Что такое хорошая виртуальная машина для развития хобби?
-
24-09-2019 - |
Вопрос
Я думаю о написании своего собственного маленького языка.
Я нашел несколько вариантов, но не стесняйтесь предложить больше.
- Сразу
- Попугай
- Osa.
Много языков используют JVM, но если вы не напишите язык java-ish, вся сила stdlib дает вам ощущаться уродливым; Это не очень хорошо в динамическом материале.
Попугай кажется хорошей виртуалом для разработки языков, но он немного заброшен / незаконченный / хобби к нему запах.
OSA - это то, что включает в себя AppleScript, а не особенно хорошо известную виртуальную машину, но я использую Mac, и он предлагает хорошую системную интеграцию.
CLR + Mac не кажется хорошей комбинацией ...
Мой язык будет объектно ориентированным функциональным языком одновременного DataFlow с сильным типом и смесью синтаксиса Python и Lisp. Звучит хорошо, а?
редактировать
Я принял Python сейчас, но я хотел бы услышать больше о OSA и попугае.
Решение
Один из подходов, с которым я играл, это использовать Python аст Модуль для создания абстрактного синтаксического дерева, представляющего код для запуска. Python compile
Функция может компилировать AST в Python Bytecode, который exec
может затем запустить. Это немного более высокий уровень, чем непосредственно генерирующий байткод, но вам придется иметь дело с некоторыми причудами языка Python (например, фундаментальное различие между утверждениями и выражениями).
При этом я также написал «депределительный» модуль, который пытается преобразовать AST обратно в эквивалентный исходный код Python, просто для отладки. Вы можете найти код в повсеместливый Репозиторий, если вы заинтересованы.
Другие советы
Посмотри на LLVM. Отказ Это не чисто виртуальная виртуальная виртуальная виртуальная виртуальная машина с собственной IR, которая позволяет строить VMS высокого уровня. Имеет приятные вещи, такие как анализ статического кода и поддержка JIT
- У Луа есть маленькая, хорошо написанная и быстрая виртуальная машина
- Python VM - Вы действительно можете прикрепить новый язык, если хотите. Или пишите (используйте?) Что-то вроде Tinypy, которое представляет собой небольшую и простую реализацию VM Python VM.
Обе параметры выше, имеют доступ к полезным стандартным библиотекам, которые будут сэкономить вас работать и кодироваться в относительно чистом и модульном C, поэтому им нельзя сложно подключиться.
Тем не менее, я не согласен, что попугай заброшен / хобби. Это довольно зрело, и есть некоторые очень сильные разработчики, работающие над этим. Кроме того, в частности, VM, разработанный для нацеливания нескольких динамических языков. Таким образом, был разработан с учетом гибкости.
Вы считаете выпью? Из того, что я прочитал, в дополнение к тому, чтобы быть компилятором Python Jit, он также имеет возможность обрабатывать другие языки. Например, есть Учебник что объясняет, как создать компилятор JIT Brainfuck JIT, используя Pypy.