Зачем использовать Parrot (или другую виртуальную машину), если у меня есть переводчик?

Почему я должен использовать VM, например Parrot, для динамического языка, который я использую (Python, Perl, ...), если у меня уже есть переводчик? Что я могу потенциально получить за счет наличия разных виртуальных машин в моем коде и на моей машине и за счет использования отдельного интерпретатора?

(Я новичок в вопросе ВМ, так что, возможно, ответ очевиден)

РЕДАКТИРОВАТЬ

В чем преимущество Parrot VM для конечных пользователей?

2 ответа

Решение

Почему я должен использовать VM, например Parrot, для динамического языка, который я использую (Python, Perl, ...), если у меня уже есть переводчик?

Во-первых, если вы начинаете проект, возможно, у вас еще нет переводчика.

Однако, если у вас есть переводчик и вы думаете, стоит ли добавить к нему функциональность или переписать его, чтобы использовать Parrot, на ум приходят следующие компромиссы:

  • В общем, Parrot, вероятно, лучше протестирован, чем рассматриваемый интерпретатор (лучший оптимизатор, лучший сборщик мусора и т. Д.)
  • В общем, разработчики Parrot знают больше о кроссплатформенных проблемах, чем обычные программисты
  • В общем, Parrot решил большинство проблем, с которыми вы можете столкнуться
  • Попугай был спроектирован с полной общностью, и это добавило тонну сложности; вам может не понадобиться дополнительная общность

Лично мне хватило бы оптимизатора Parrot (и основанного на регистрах дизайна, в значительной степени облегчающего оптимизацию) и хорошо протестированной кроссплатформенной кодовой базы, чтобы убедить меня.

Разбор исходного кода ASCII идет медленно. Это быстрее, если исходный файл анализируется один раз, а затем интерпретатор использует двоичную структуру. В Python эта структура хранится в .pyc файлы для быстрого повторного использования.

Есть два шага:

  1. Разобрать исходный код, создать байт-код
  2. Запустить (интерпретировать) байт-код.

Это используется, например, Scala: нет Scala-VM. Scala - это просто новый синтаксис. Компилятор scala создает байт-код Java.

Другие вопросы по тегам