Разработать интерпретатор проще, чем компилятор.
Усилие при разработке ...:
интерпретатор <байт-код-интерпретатор <байт-код-jit-компилятор <компилятор дляплатформа-независимый язык <компилятор-несколько-машин-зависимый ассемблер. </p>
Это общая тенденция - останавливать разработку на jit-компиляторах из-за независимости от платформы.Только предпочтительные языки в отношении производительности и исследований в области теоретической информатики существуют и будут развиваться во ВСЕХ возможных направлениях, включая новый интерпретатор байт-кода, даже при том, что существуют хорошие и продвинутые компиляторы для независимых от платформы языков и для различных машинно-зависимых ассемблеров.
Исследования на языках ООП довольно приятны ... скажем, скучно по сравнению с функциональными языками, потому что действительно новые языковые и компиляторные технологии легче выразить с помощью / в / с использованием математической теории категорий и математических описаний туров.полные системы типов.Другими словами: он почти функциональный сам по себе, в то время как императивные языки являются почти только интерфейсом ассемблера с некоторым синтаксическим сахаром.ООП языки, как правило, являются императивными языками, потому что функциональные языки уже имеют замыкания и лямбду.Существуют и другие способы реализации java-подобных «интерфейсов» в функциональных языках, и нет необходимости в дополнительных объектно-ориентированных функциях.
В ie Haskell добавление возможности OOP-подобного программирования, вероятно, было бы болеечем только несколько шагов назад в технологии - не было бы смысла использовать это.(<- это не только ИМХО ... вы когда-нибудь слышали о GADT или классах с несколькими параметрами?) Возможно, могут быть даже лучшие способы динамического создания объектов с интерфейсами для взаимодействия с ООП-языками, чем изменение самого этого языка,Но есть и другие функциональные языки, которые явно объединяют функциональные аспекты и ООП.Просто больше науки с преимущественно функциональными языками, чем с нефункциональными OO-языками. </p>
Языки OO не могут быть легко скомпилированы с другими языками OO, если они в некотором роде более "продвинуты".Обычно они имеют такие функции, как защита стека, расширенные возможности отладки, абстрактная и проверяемая многопоточность, динамическая загрузка объектов из файлов из Интернета ... Многие из этих функций трудно или не так просто реализовать с помощью C или C ++ в качестве компилятора.-backend.Функциональный язык LISP (которому 50 лет!) Был AFAIK первым с сборщиком мусора.В качестве бэкэнда компилятора LISP использовал взломанную версию языка C, потому что обычный C не разрешал некоторые из этих вещей, а ассемблер разрешал, т.е.C-- допускает это.
Другой аспект: императивные языки предназначены для работы на определенной архитектуре, то есть программы на C и C ++ работают только на тех архитектурах, для которых они запрограммированы.Java более экстремален: он работает только на одной архитектуре, виртуальной, которая сама работает на других.Функциональные языки обычно по своему дизайну довольно независимы от архитектуры: LISP был разработан так, чтобы быть настолько не зависящим от архитектуры, что его можно было бы скомпилировать в генетический код в некотором отдаленном будущем.Да, как программы, работающие в живых биологических ячейках.
С помощью байт-кода для LLVM функциональные языки, скорее всего, будут скомпилированы в байт-код и в будущем.Большинство императивных языков, скорее всего, все еще будут иметь те же унаследованные проблемы, что и сейчас, когда они недостаточно абстрагированы.Ну, я не совсем уверен насчет Clang и D, но эти двое в любом случае не "самые".