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

Виртуальная машина 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) и так и не стал основной виртуальной машиной для любого из других поддерживаемых языков.

История

Название 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) и связанные с ними коды операций . Реализация решений этих проблем на уровне виртуальной машины избавляет от необходимости решать эти проблемы на отдельных клиентских языках.

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

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 выпускает новую стабильную версию программного обеспечения каждый третий вторник месяца. Основные коммиттеры по очереди выпускают выпуски в возобновляемом графике, где ни один коммиттер не отвечает за несколько выпусков подряд.

Смотрите также

использованная литература

внешние ссылки