Что такое хорошая виртуальная машина для разработки языка хобби? - PullRequest
8 голосов
/ 30 января 2010

Я думаю написать свой собственный маленький язык.

Я нашел несколько вариантов, но не стесняйтесь предлагать больше.

  • JVM
  • Parrot
  • OSA

Многие языки используют JVM, но если вы не напишите язык Java-ish, вся мощь, которую дает вам stdlib, будет уродливой; Это не очень хорошо для динамических вещей.

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

OSA - это то, что поддерживает Applescript, не очень известную виртуальную машину, но я использую Mac, и она предлагает хорошую системную интеграцию.

CLR + Mac не очень хорошая комбинация ...

Мой язык будет объектно-ориентированным функциональным параллельным языком потока данных со строгой типизацией и сочетанием синтаксиса Python и Lisp. Звучит хорошо, а?

[править]
На данный момент я принял Python, но хотел бы больше узнать об OSA и Parrot.

Ответы [ 4 ]

5 голосов
/ 30 января 2010

Один из подходов, с которыми я играл, заключается в использовании модуля Python ast для построения абстрактного синтаксического дерева, представляющего код для запуска. Функция Python compile может компилировать AST в байт-код Python, который затем можно запустить exec. Это немного более высокий уровень, чем непосредственное генерирование байт-кода, но вам придется иметь дело с некоторыми причудами языка Python (например, принципиальным отличием операторов и выражений).

Для этого я также написал «deparse» модуль, который пытается преобразовать AST обратно в эквивалентный исходный код Python, просто для отладки. Вы можете найти код в репозитории psil , если вам интересно.

4 голосов
/ 30 января 2010

Посмотрите на LLVM . Это не просто виртуальная машина как таковая, а скорее фреймворк с собственным IR, который позволяет создавать виртуальные машины высокого уровня. Имеет приятные вещи, такие как статический анализ кода и поддержка JIT

2 голосов
/ 30 января 2010
  • У Lua есть небольшая, хорошо написанная и быстрая ВМ
  • Python VM - вы можете присоединить к нему новый язык, если хотите. Или напишите (используйте?) Что-то вроде tinypy, которая представляет собой небольшую и простую реализацию Python VM.

Оба вышеуказанных варианта имеют доступ к полезным стандартным библиотекам, которые сохранят вашу работу, и кодируются в относительно чистом и модульном C, поэтому к ним не должно быть сложностей при подключении.

Тем не менее, я не согласен, что Попугай заброшен / хобби. Он довольно зрелый, и над ним работают очень сильные разработчики. Кроме того, это определенно виртуальная машина, предназначенная для работы с несколькими динамическими языками. Таким образом, он был разработан с учетом гибкости.

1 голос
/ 10 июня 2012

Вы рассматривали Pypy? Из того, что я прочитал, помимо того, что он является JIT-компилятором Python, он также может работать с другими языками. Например, есть учебник , в котором объясняется, как создать JIT-компилятор Brainfuck с помощью Pypy.

...