Виртуальная машина Parrot

редактировать
Виртуальная машина Parrot
Логотип Parrot Foundation
Окончательный релиз 8.1.0 / 16 февраля 2016 г. ; 5 лет назад (2016-02-16)
Репозиторий
Написано в C
Операционная система Кроссплатформенность
Преемник MoarVM (для Раку)
Тип Виртуальная машина
Лицензия Художественная лицензия 2.0
Веб-сайт попугай.org Отредактируйте это в Викиданных

Parrot - это виртуальная машина на основе регистров, предназначенная для эффективного выполнения динамических языков. Можно скомпилировать Parrot ассемблера и Parrot промежуточное представление (PIR, промежуточный язык), чтобы Parrot байткод и выполнить его. Parrot является свободным и открытым исходным кодом программного обеспечения.

Parrot был создан сообществом Perl и разработан с помощью сообществ открытого и бесплатного программного обеспечения. В результате он ориентирован на лицензионную совместимость с Perl ( Artistic License 2.0 ), совместимость платформ с широким спектром систем, совместимость архитектуры процессоров с большинством современных процессоров, скорость выполнения, небольшой размер (около 700 КБ в зависимости от платформы) и гибкость для удовлетворения различных требований, предъявляемых Raku и другими современными динамическими языками.

Версия 1.0 со стабильным интерфейсом прикладного программирования (API) для разработки была выпущена 17 марта 2009 года. Последней версией является выпуск 8.1.0 «Андский попугай». Parrot был официально прекращен в августе 2021 года после того, как был вытеснен MoarVM в его основном использовании (Raku) и так и не стал основной виртуальной машиной для любого из других поддерживаемых языков.

СОДЕРЖАНИЕ
  • 1 История
  • 2 языка
    • 2.1 Статические и динамические языки
    • 2.2 Функциональные концепции
    • 2.3 Инструменты компилятора
    • 2.4 Существующие клиентские языки
  • 3 Внутреннее устройство
  • 4 Примеры
    • 4.1 Регистры
    • 4.2 Арифметические операции
  • 5 Развитие
  • 6 См. Также
  • 7 ссылки
  • 8 Внешние ссылки
История

Название Parrot произошло от первоапрельской шутки, в которой был анонсирован гипотетический язык под названием Parrot, который объединит Python и Perl. Позже это название было принято в этом проекте (первоначально являвшемся частью усилий по разработке Raku), который направлен на поддержку Raku, Python и других языков программирования. Несколько языков переносятся для работы на виртуальной машине Parrot.

Фонд Parrot был распущен в 2014 году. Фонд был создан в 2008 году для того, чтобы владеть авторскими правами и товарными знаками проекта Parrot, чтобы способствовать развитию языковых реализаций и основной кодовой базы, обеспечить основу для роста сообщества Parrot и достичь в другие языковые сообщества.

Языки

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

Статические и динамические языки

Различия в свойствах языков со статической и динамической типизацией послужили мотивацией для разработки Parrot. Современные популярные виртуальные машины, такие как виртуальная машина Java и Common Language Runtime для платформы.NET, были разработаны для языков со статической типизацией, в то время как языки, на которые нацелена Parrot, являются динамически типизированными.

Виртуальные машины, такие как виртуальная машина Java и текущая виртуальная машина Perl 5, также основаны на стеке. Разработчики Parrot рассматривают включение регистров в Parrot как преимущество, поскольку оно больше напоминает конструкцию оборудования, позволяя использовать обширную литературу по оптимизации компилятора при генерации байт-кода для виртуальной машины Parrot, которая могла бы работать со скоростью, близкой к машинному коду. Другие виртуальные машины на основе регистров вдохновили часть дизайна Parrot, включая LLVM, Lua VM и Dis.

Функциональные концепции

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

Инструменты компилятора

Основная статья: Parser Grammar Engine

Parrot предоставляет набор инструментов для написания компиляторов, который включает в себя Parser Grammar Engine (PGE), гибридный синтаксический анализатор-генератор, который может выражать рекурсивный синтаксический анализатор спуска, а также синтаксический анализатор приоритета операторов, позволяющий свободный переход между ними в единой грамматике.. PGE передается в Tree Grammar Engine (TGE), который дополнительно преобразует дерево синтаксического анализа, сгенерированное PGE, для оптимизации и, в конечном итоге, для генерации кода.

Существующие клиентские языки

Многие языки уже имеют интерфейсы компиляторов, разработанные для Parrot; однако многие из них по-прежнему функционируют лишь частично. По состоянию на июль 2013 года активно поддерживаемые языки:

Неактивными языками по состоянию на июль 2013 г. являются следующие:

Также были реализованы следующие эзотерические языки программирования :

Внутренности

Для Parrot существует три формы программного кода:

  • Байт-код является двоичным и изначально интерпретируется Parrot. Байт-код обычно хранится в файлах с расширением имени файла «.pbc».
  • Ассемблер Parrot (PASM) - это язык низкого уровня, который компилируется до байт-кода. Код PASM обычно хранится в файлах с расширением имени файла «.pasm».
  • Промежуточное представление Parrot (PIR) - это язык немного более высокого уровня, чем PASM, и он также компилируется до байт-кода. Это основная цель языковых реализаций. PIR прозрачно управляет соглашениями о межпрограммных вызовах Parrot, обеспечивает улучшенный синтаксис, распределение регистров и многое другое. PIR-код обычно хранится в файлах с расширением имени файла «.pir».
Примеры

Регистры

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

Parrot предоставляет произвольное количество регистров; это число фиксируется во время компиляции для каждой подпрограммы.

Арифметические операции

В PASM

 set I1, 4 inc I1  # I1 is now 5 add I1, 2  # I1 is now 7 set N1, 42.0 dec N1  # N1 is now 41.0 sub N1, 2.0 # N1 is now 39.0 print I1 print ', ' print N1 print "\n" end

В ПИР

.sub 'main' :main $I1 = 4 inc $I1  # $I1 is now 5 $I1 += 2 # $I1 is now 7 $N1 = 42.0 dec $N1  # $N1 is now 41.0 $N1 -= 2.0 # $N1 now 39.0 print $I1 print ', ' print $N1 print "\n".end
Разработка

До конца 2005 года Дэн Сугальский был ведущим дизайнером и главным архитектором Parrot. Чип Зальценберг, давний хакер Perl, ядра Linux и C ++, занимал эту должность до середины 2006 года, когда он стал ведущим разработчиком. Эллисон Рэндал, ведущий разработчик Punie и главный архитектор инструментов компилятора Parrot, была главным архитектором до середины октября 2010 года, когда она ушла в отставку и выбрала Кристофа Отто в качестве нового главного архитектора.

Обсуждения разработки проходят в основном на канале #parrot на irc.perl.org. Кроме того, еженедельно проходят модерируемые встречи для разработчиков Parrot и языков, которые проводятся в #parrotsketch в той же сети. Много обсуждений также происходит в списке рассылки parrot-dev, размещенном на parrot.org.

Обсуждения дизайна существуют в форме проектных документов Parrot или PDD в репозитории Parrot. Главный архитектор или другой назначенный дизайнер создает эти документы, чтобы объяснить философию функции, а также ее интерфейс и примечания к дизайну. Хакеры Parrot превращают эти документы в исполняемые тесты, а затем в существующие функции.

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

Смотрите также
использованная литература
внешние ссылки
Последняя правка сделана 2023-04-13 10:06:36
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте