Виртуальная машина Попугая
![]() | Эту статью необходимо обновить . ( август 2022 г. ) |
![]() | |
Финальный выпуск | 8.1.0
/ 16 февраля 2016 г [1] |
---|---|
Репозиторий | |
Написано в | С |
Операционная система | Кросс-платформенный |
Преемник | МоарВМ (для Раку) |
Тип | Виртуальная машина |
Лицензия | Художественная лицензия 2.0 |
Веб-сайт | www |
Parrot — это снятая с производства на основе регистров, виртуальная машина процессов предназначенная для эффективной работы с динамическими языками . Можно скомпилировать ассемблерный язык Parrot и промежуточное представление Parrot (PIR, промежуточный язык) в байт-код Parrot и выполнить его. Parrot — бесплатное программное обеспечение с открытым исходным кодом . [2]
Parrot был создан сообществом Perl и разработан при помощи сообществ открытого и бесплатного программного обеспечения . В результате основное внимание уделялось совместимости лицензий с Perl ( Artistic License 2.0 ), совместимости платформ с широким спектром систем, совместимости архитектуры процессора с большинством современных процессоров, скорости выполнения, небольшому размеру (около 700 КБ в зависимости от платформы) и гибкость для удовлетворения различных требований, предъявляемых Raku и другими современными динамическими языками .
Версия 1.0 со стабильным интерфейсом программирования приложений (API) для разработки была выпущена 17 марта 2009 года. [3] Последней версией является выпуск 8.1.0 «Андский попугай». [1] Официальное прекращение поддержки Parrot было прекращено в августе 2021 года после того, как его заменил MoarVM в его основном использовании (Raku) и он так и не стал основной виртуальной машиной ни для одного из других поддерживаемых языков. [4]
История
[ редактировать ]Название Parrot произошло от первоапрельской шутки, в которой было объявлено о создании гипотетического языка Parrot , который объединит Python и Perl . [5] [6] Позже это название было принято проектом Parrot (первоначально являвшимся частью разработки Raku), целью которого была поддержка Raku, Python и других языков программирования.
Фонд Parrot Foundation был распущен в 2014 году. [7] Фонд был создан в 2008 году для владения авторскими правами и товарными знаками проекта Parrot, для помощи в разработке языковых реализаций и основной кодовой базы, для обеспечения базы для роста сообщества Parrot и для взаимодействия с другими языковыми сообществами. [8]
Исторические проектные решения документируются в форме проектных документов Parrot или PDD в репозитории Parrot. [9]
До конца 2005 года Дэн Сугальски был ведущим дизайнером и главным архитектором Parrot. Чип Зальценберг , давний хакер Perl, ядра Linux и C++, занял пост до середины 2006 года, когда он стал ведущим разработчиком. Эллисон Рэндал , ведущий разработчик Punie и главный архитектор инструментов компилятора Parrot, была главным архитектором до середины октября 2010 года, когда она ушла в отставку и выбрала Кристофа Отто новым главным архитектором. [10]
Языки
[ редактировать ]Целью виртуальной машины Parrot было размещение клиентских языков и обеспечение взаимодействия между ними. На пути достижения этой цели существует несколько препятствий, в частности, сложность сопоставления концепций высокого уровня, данных и структур данных между языками.
Статические и динамические языки
[ редактировать ]Различные свойства статически и динамически типизированных языков послужили причиной создания Parrot. Современные популярные виртуальные машины, такие как виртуальная машина Java и Common Language Runtime для платформы .NET , были разработаны для статически типизированных языков, в то время как языки, на которые нацелен Parrot, являются динамически типизированными.
Виртуальные машины, такие как виртуальная машина Java и текущая виртуальная машина Perl 5, также основаны на стеке . Разработчики Parrot выбрали дизайн на основе регистров, мотивируя это тем, что он больше напоминает аппаратный дизайн, что позволяет использовать обширную литературу по оптимизации компилятора при генерации байт-кода для виртуальной машины Parrot, которая может работать на скоростях, близких к машинному коду . [ нужна ссылка ] Другие виртуальные машины на основе регистров вдохновили часть дизайна Parrot, включая LLVM , Lua VM от Inferno и Dis .
Функциональные концепции
[ редактировать ]Parrot имеет богатую поддержку нескольких функций функционального программирования, включая замыкания и продолжения , обе из которых может быть особенно сложно реализовать правильно и переносимо, особенно в сочетании с обработкой исключений и многопоточностью . Самым большим преимуществом является динамическая расширяемость объектов с помощью методов, что позволяет использовать полиморфные контейнеры (PMC) и связанные с ними коды операций . Реализация решений этих проблем на уровне виртуальных машин избавляет от необходимости решать их на отдельных клиентских языках.
Инструменты компилятора
[ редактировать ]Parrot предоставляет набор инструментов для написания компиляторов. [11] который включает в себя Parser Grammar Engine (PGE), гибридный анализатор-генератор, который может выражать анализатор рекурсивного спуска , а также анализатор с приоритетом операторов , обеспечивая свободный переход между ними в одной грамматике. PGE передается в механизм древовидной грамматики (TGE), который дополнительно преобразует дерево синтаксического анализа, сгенерированное PGE, для оптимизации и, в конечном итоге, для генерации кода.
Реализации
[ редактировать ]Наиболее полными языковыми реализациями, предназначенными для виртуальной машины Parrot, были Raku (известный в то время как Rakudo Perl 6), Lua и новый язык под названием «Winxed». [12] Были начаты проекты по реализации многих других языков, включая PHP , Python и Ruby ; наряду с эзотерическими и демонстрационными языками, такими как Befunge и учебный язык « скквак ». [13] Ни один из этих проектов не стал первичным внедрением соответствующих языков. [4]
Внутренности
[ редактировать ]Существует три формы программного кода для Parrot:
- Байт-код [14] является двоичным и изначально интерпретируется Parrot. Байт-код обычно хранится в файлах с расширением имени файла «.pbc».
- Язык ассемблера Parrot (PASM) — это язык низкого уровня, который компилируется в байт-код. Код PASM обычно хранится в файлах с расширением имени файла «.pasm».
- Промежуточное представление попугая (PIR [15] ) — это язык немного более высокого уровня, чем PASM, который также компилируется в байт-код. Это основная цель языковых реализаций. PIR прозрачно управляет соглашениями о межпрограммных вызовах Parrot, обеспечивает улучшенный синтаксис, распределение регистров и многое другое. Код PIR обычно хранится в файлах с расширением имени файла «.pir».
Примеры
[ редактировать ]Регистры
[ редактировать ]Parrot основан на регистрах, как и большинство аппаратных процессоров , и в отличие от большинства виртуальных машин, которые основаны на стеке. Parrot предоставляет четыре типа регистров:
- I: собственный целочисленный тип
- N: с плавающей запятой числа
- S: расширенные строковые регистры с Unicode. поддержкой
- P: PMC или полиморфный контейнер — тип объекта Parrot.
Parrot предоставляет произвольное количество регистров; это число фиксируется во время компиляции каждой подпрограммы.
Арифметические операции
[ редактировать ]В ПАСМ
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
См. также
[ редактировать ]- МоарВМ
- ГраальВМ
- Общеязыковая среда выполнения (CLR)
- Сравнение виртуальных машин приложений
- mod_parrot
- Машина Да Винчи
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Новая поддерживаемая версия 8.1.0 «Андский попугай» » . Фонд попугаев. 16 февраля 2016 г. Проверено 26 сентября 2016 г.
- ^ «Лицензионное соглашение для участников Parrot 1.0» (PDF) . Фонд попугаев. Архивировано из оригинала (PDF) 16 августа 2010 г. Проверено 18 марта 2009 г.
- ^ «Дорожная карта попугаев» . Фонд попугаев. 20 ноября 2008 г. Архивировано из оригинала 15 апреля 2010 г. Проверено 20 ноября 2008 г.
- ^ Перейти обратно: а б «Неактивный попугай | Parrot VM» . www.parrot.org .
- ^ «История розыгрыша с попугаем - O'Reilly Media» . Орейли.com. 6 апреля 2001 г. Проверено 25 февраля 2014 г.
- ^ «Программирование попугая» . Perl.com. Архивировано из оригинала 18 июля 2010 г. Проверено 25 февраля 2014 г.
- ^ «Расширенный поиск корпораций» . Департамент лицензирования штата Вашингтон . УБИ 602 839 536 . Проверено 9 апреля 2021 г.
- ↑ Объявление о создании Parrot Foundation. Архивировано 29 июня 2008 г. в Wayback Machine.
- ^ «Parrot 6.1.0 — Проектная документация Parrot (PDD)» . Docs.parrot.org . Проверено 25 февраля 2014 г.
- ^ Отто, Кристоф (21 октября 2010 г.). "reparrot: У Попугая новый архитектор. Что теперь?" . Reparrot.blogspot.com . Проверено 25 февраля 2014 г.
- ^ [1] Архивировано 9 мая 2009 г., в Wayback Machine.
- ^ «Языки — Попугай В.М.» . сайт попугая . Проверено 18 ноября 2023 г.
- ^ «Языки – Попугай» . Wiki по разработке Parrot . Проверено 18 ноября 2023 г.
- ^ «Формат байт-кода Parrot (PBC) — код попугая» . Архивировано из оригинала 24 декабря 2008 г. Проверено 15 июля 2009 г.
- ^ [2] Архивировано 20 июля 2009 г., в Wayback Machine.