AST для кодогенерации/семантического анализа? Где можно почитать(желательно на русском)
Почему такой вопрос возник:
Наткнулся на то, что применяют Visitor, но при этом как-то неприкольно хранить промежуточное состояние кодогенерации LLVM в AST узле(имеются ввиду объекты LLVM, которые генерируют затем IR). Хочется, чтобы узлы AST вообще не знали о существовании LLVM, но при этом можно было удобным образом понять контекст выражения
В расте для этого mir'ы придумали
То есть ast последовательно с проверками трансформируется во все более низкоуровневый mir, а кодогенерация для каждого бекенда своя. Т.е. сейчас основная -llvm, может еще и для gcc и cranelift
Не смотрел с какого именно места Cranelift прикручивают конкретно к rustc, но вообще, Cranelift умеет оптимизировать код и генерировать в бинарник начиная с CFG, который скорее HIR. 😊
Вообще да, но раст проводит специфические для себя оптимизации, о которых все бэкенды могут не знать. Ну к примеру оптимизировать структуры в памяти в соответствии с repr - атрибутом, вроде бы.
Да там много чего должно быть, начиная с алиасинга. Вот я и говорю, от Cranelift они могли "оторвать" только "совсем бэкенд", который непосредственно кодгеном занимается (с распределением регистров и выбором инструкций, понятное дело).
Обсуждают сегодня