Почему компиляторы не переводят на более простые языки?

Обычно компиляторы переводят с языка, который они поддерживают, на ассемблер. Или, самое большее, на язык, подобный ассемблеру (байт-код), например GIMPLE / GENERIC для GCC или байт-код Python / Java / .NET.

Разве не было бы проще для компилятора перевести на более простой язык, который уже реализует большая часть их грамматики?

Например, компилятор Objective-C, который на 100% совместим с C, мог бы добавить семантику только для синтаксиса, который она расширяет на C, переводя ее на C. Я вижу много преимуществ в этом; можно использовать этот компилятор Objective-C для перевода своего кода на C, чтобы скомпилировать сгенерированный код C с другим компилятором, который не поддерживает C ++ (но который оптимизирует больше, или который компилируется быстрее, или может компилироваться для большего количества архитектур ). Или можно было бы использовать сгенерированный код C в проекте, где разрешен только C.

Я думаю / надеюсь, что если бы все работало таким образом, было бы намного проще писать расширения ] для текущих языков (например: добавление ключевых слов в C ++ для упрощения реализации общих шаблонов или, все еще в C ++, удаление правила объявить перед использованием путем перемещения встроенных функций-членов в конец файлов заголовков)

Какие будут штрафы? Сгенерированный код будет очень трудно понять людям? Компиляторы не смогут оптимизировать столько, сколько могут сейчас? Что еще?

9
задан peoro 14 November 2010 в 14:30
поделиться