Как Parrot сравнивается с другими виртуальными машинами?
Parrot - это виртуальная машина, изначально разработанная для Perl 6.
Какие технические возможности предлагает виртуальная машина Parrot, которой не хватает конкурирующим виртуальным машинам, таким как виртуальная машина Java (JVM) / виртуальная машина Hotspot и Common Language Runtime (CLR)?
7 ответов
Следующий ответ был написан в 2009 году. См. Также это обновление 2015 года от raiph.
Чтобы расширить @Reed и указать на некоторые основные моменты, коды операций Parrot находятся на гораздо более высоком уровне, чем большинство виртуальных машин. Например, в то время как большинство машин хранят целые числа и числа с плавающей запятой, основными регистрами являются целые числа, числа, строки и файлы cookie Parrot Magic (PMC). Просто встроенные строки - это шаг вперед от JVM.
Более интересным является PMC, вроде объекта типа JVM, но гораздо более взаимозаменяемый. PMC - это контейнер для всех других более сложных типов, которые вам нужны в реальном языке, таких как массивы, таблицы, деревья, итераторы, операции ввода-вывода и т. Д. PMC и широкий спектр встроенных операций для него означает меньше работы для автора языка, Попугай не уклоняется от грязной, но необходимой части реализации языка.
Моя информация может быть устаревшей, но я считаю, что коды операций являются подключаемыми, вы можете заказать виртуальную машину Parrot, которая содержит только коды операций, необходимые для вашего языка. Они также будут наследуемыми, если ваш язык хочет, чтобы их массивы работали немного иначе, чем стандартные массивы Parrot, вы можете сделать это подклассом.
Наконец, Parrot можно написать не только на ассемблере ( PASM), но и на языке более высокого уровня, Parrot Intermediate Presentation (PIR). В PIR есть циклы, подпрограммы, локализованные переменные и некоторые базовые математические операции и операции сравнения, все основные принципы, которые люди ожидают от языка программирования, не отходя слишком далеко от металла.
В общем, Parrot очень дружелюбен к языковым дизайнерам (написанным ими и для них), которые хотят разработать язык и оставить как можно большую часть реализации кому-либо еще.
Вы можете прочитать об этом на странице Parrot VM Intro.
Основное преимущество Parrot перед JVM или CLR заключается в том, что он спроектирован для поддержки сначала динамических языков и потенциально обеспечивает лучшую поддержку и производительность для языков с динамической типизацией. JVM и CLR больше ориентированы на поддержку статически типизированных языков, и многие из проектных решений показывают это.
Parrot - это виртуальная машина, изначально разработанная для Perl 6.
Сейчас есть две виртуальные машины, изначально разработанные для Perl 6; коммиты в MoarVM начались в 2012 году.
Какие технические возможности предлагает виртуальная машина Parrot, которой не хватает конкурирующим виртуальным машинам, таким как виртуальная машина Java (JVM)/ виртуальная машина Hotspot и Common Language Runtime (CLR)?
В другом ответе на этой странице, Reini Urban, текущий (апрель 2015) ведущий разработчик Parrot, дает краткое сравнение Parrot с JVM и CLR VM.
По словам Рейни, ключевое преимущество Parrot по сравнению с MoarVM - это "эффективно блокируемые потоки".
Я недостаточно знаю JVM и CLR, но мои советы:
- поддержка динамических языков (замыкания, полиморфные скаляры, продолжения, сопрограммы) (скорость)
- динамическая отправка метода,
- функции первого класса,
- первоклассные продолжения,
- параметры (необязательные, именованные, ..),
- на основе регистра
- обеспечена совместимость HLL на уровне сборки
- ряд платформ
Обновление: это, вероятно, не имеет значения, поскольку JVM в настоящее время является одним из бэкэндов Rakudo Perl 6. См. Rakudo Perl 6 на JVM (календарь Perl 6 Advent 2013, день 3).
Еще одна вещь, которая отличает Parrot от большинства виртуальных машин (безусловно, отличается от JVM), заключается в том, что это машина регистрации, а не машина стека. Но я думаю, что люди будут долго спорить, можно ли это назвать преимуществом или недостатком.
Этот вопрос устарел. Rakudo Perl 6 больше не предназначается для Parrot в качестве бэкэнда; MoarVM является предпочтительным бэкэндом, поскольку бэкенд JVM находится в стадии разработки (обычно работает, но многие функции Perl 6 не реализованы или в настоящее время не работают). Работы по разработке (не готовые для пользователей) ведутся для добавления Javascript в качестве третьего бэкэнда.
Основное преимущество и техническое различие по сравнению с JVM и CLR заключается в том, что типы (классы, называемые PMC) и ops (методы) могут динамически загружаться из эффективных предоставленных пользователем реализаций C, а среда синтаксического анализатора для создания и расширения языков является встроенной.,