Нормально ли при написании компилятора использовать си, как целевой язык?

Сейчас я пишу компилятор в учебных целях. Изначально я хотел транслировать код в язык ассемблера, но потом возникли сомнения насчёт этого, так как для портирования компилятора пришлось бы переписывать модуль, ответственный за трансляцию. Возникло два вопроса - считается ли нормальной трансляция на язык си в среде разработчиков компиляторов, и, если нет, какие кроме llvm есть альтернативы для достижения кроссплатформенности (мне просто не хочется тащить в зависимости llvm)?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
На выходе компилятора должен быть машинный код (реального процессора или некой виртуальной машины). Если на выходе C или другой язык высокого уровня, то получите транслятор, а не компилятор.
Ответ написан
2ord
@2ord
продвинутый чайник
Нормально Си в качестве бэкенд использовать.
В качестве примера: Vishap's Oberon Compiler (voc). Вообще, Оберон (не Оберон-2) удобно рассматривать в качестве языка, который прост и у него есть приличное количество реализаций как с байткодом, так и на целевые платформы.
Можно еще WebAssembly генерировать, при помощи Cranelift IR.
Хотя иметь LLVM в зависимости не так уж и плохо.
Ответ написан
@potan
Функциональный программист
Да, такой подход используют, например, в ATS. Основные проблемы - медленно и не удается использовать информацию от фронтенда для оптимизации в бекенде.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы