Что такое хорошая виртуальная машина для разработки языка хобби?
Я думаю о написании своего собственного маленького языка.
Я нашел несколько вариантов, но не стесняйтесь предлагать больше.
- JVM
- Попугай
- OSA
Многие языки используют JVM, но если вы не напишите язык Java-ish, вся мощь, которую дает вам stdlib, будет уродливой; Это не очень хорошо в динамических вещах.
Parrot кажется хорошей виртуальной машиной для разработки языков, но у него немного запаха / незавершенности / хобби.
OSA - это то, что поддерживает Applescript, не очень известную виртуальную машину, но я использую Mac, и она предлагает хорошую системную интеграцию.
CLR + Mac не выглядит хорошей комбинацией...
Мой язык будет объектно-ориентированным функциональным параллельным языком потока данных со строгой типизацией и сочетанием синтаксиса Python и Lisp. Звучит хорошо, а?
[редактировать]
Я принял Python сейчас, но я хотел бы услышать больше об OSA и Parrot.
4 ответа
Один из подходов, с которыми я играл, заключается в использовании модуля Python ast для создания абстрактного синтаксического дерева, представляющего код для запуска. Питон compile
Функция может скомпилировать AST в байт-код Python, который exec
может тогда бежать. Это немного более высокий уровень, чем непосредственное генерирование байт-кода, но вам придется иметь дело с некоторыми причудами языка Python (например, принципиальным отличием операторов и выражений).
При этом я также написал "deparse" модуль, который пытается преобразовать AST обратно в эквивалентный исходный код Python, просто для отладки. Вы можете найти код в репозитории psil, если вам интересно.
Посмотрите на LLVM. Это не просто виртуальная машина как таковая, а скорее фреймворк с собственным IR, который позволяет вам создавать виртуальные машины высокого уровня. Имеет хорошие вещи, такие как статический анализ кода и поддержка JIT
- У Lua есть небольшая, хорошо написанная и быстрая ВМ
- Python VM - вы можете присоединить к нему новый язык, если хотите. Или напишите (используйте?) Что-то вроде tinypy, которая представляет собой небольшую и простую реализацию Python VM.
Оба варианта выше имеют доступ к полезным стандартным библиотекам, которые сохранят вашу работу, и написаны на относительно чистом и модульном C, так что к ним не должно быть сложно подключиться.
Тем не менее, я не согласен, что попугай заброшен / хобби. Он довольно зрелый, и над ним работают очень сильные разработчики. Кроме того, это, в частности, виртуальная машина, предназначенная для работы с несколькими динамическими языками. Таким образом, он был разработан с учетом гибкости.
Вы рассматривали Pypy? Из того, что я прочитал, помимо того, что он является JIT-компилятором Python, он также может работать с другими языками. Например, есть руководство, которое объясняет, как создать JIT-компилятор Brainfuck с использованием Pypy.