Зачем использовать Parrot (или другую виртуальную машину), если у меня есть переводчик?
Почему я должен использовать VM, например Parrot, для динамического языка, который я использую (Python, Perl, ...), если у меня уже есть переводчик? Что я могу потенциально получить за счет наличия разных виртуальных машин в моем коде и на моей машине и за счет использования отдельного интерпретатора?
(Я новичок в вопросе ВМ, так что, возможно, ответ очевиден)
РЕДАКТИРОВАТЬ
2 ответа
Почему я должен использовать VM, например Parrot, для динамического языка, который я использую (Python, Perl, ...), если у меня уже есть переводчик?
Во-первых, если вы начинаете проект, возможно, у вас еще нет переводчика.
Однако, если у вас есть переводчик и вы думаете, стоит ли добавить к нему функциональность или переписать его, чтобы использовать Parrot, на ум приходят следующие компромиссы:
- В общем, Parrot, вероятно, лучше протестирован, чем рассматриваемый интерпретатор (лучший оптимизатор, лучший сборщик мусора и т. Д.)
- В общем, разработчики Parrot знают больше о кроссплатформенных проблемах, чем обычные программисты
- В общем, Parrot решил большинство проблем, с которыми вы можете столкнуться
- Попугай был спроектирован с полной общностью, и это добавило тонну сложности; вам может не понадобиться дополнительная общность
Лично мне хватило бы оптимизатора Parrot (и основанного на регистрах дизайна, в значительной степени облегчающего оптимизацию) и хорошо протестированной кроссплатформенной кодовой базы, чтобы убедить меня.
Разбор исходного кода ASCII идет медленно. Это быстрее, если исходный файл анализируется один раз, а затем интерпретатор использует двоичную структуру. В Python эта структура хранится в .pyc
файлы для быстрого повторного использования.
Есть два шага:
- Разобрать исходный код, создать байт-код
- Запустить (интерпретировать) байт-код.
Это используется, например, Scala: нет Scala-VM. Scala - это просто новый синтаксис. Компилятор scala создает байт-код Java.