Разработчики) | Фонд Попугая |
---|---|
Стабильный выпуск | 8.1.0 / 16 февраля 2016 г . [1] |
Репозиторий | |
Написано в | C |
Операционная система | Кроссплатформенность |
Тип | Виртуальная машина |
Лицензия | Художественная лицензия 2.0 |
Интернет сайт | попугай |
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 произошло от первоапрельской шутки, в которой был анонсирован гипотетический язык под названием Parrot , который объединит Python и Perl . [4] [5] Это название было позже принято в этом проекте (первоначально являвшемся частью усилий по разработке Raku), который направлен на поддержку Raku, Python и других языков программирования. Несколько языков переносятся для работы на виртуальной машине Parrot. [6]
Фонд Parrot Foundation был создан в 2008 году, чтобы владеть авторскими правами и товарными знаками проекта Parrot, чтобы способствовать развитию языковых реализаций и основной кодовой базы, обеспечивать основу для роста сообщества Parrot и выходить на другие языковые сообщества. [7]
Языки [ править ]
Целью виртуальной машины Parrot является размещение клиентских языков и обеспечение взаимодействия между ними. На пути к достижению этой цели существует несколько препятствий, в частности, сложность сопоставления высокоуровневых концепций, данных и структур данных между языками.
Статические и динамические языки [ править ]
Различия в свойствах языков со статической и динамической типизацией послужили мотивацией для разработки Parrot. Популярные в настоящее время виртуальные машины, такие как виртуальная машина Java и Common Language Runtime для платформы .NET, были разработаны для языков со статической типизацией, тогда как языки, на которые нацелена Parrot, имеют динамическую типизацию.
Виртуальные машины, такие как виртуальная машина Java и текущая виртуальная машина Perl 5, также основаны на стеке . Разработчики Parrot рассматривают включение регистров в Parrot как преимущество, поскольку оно больше напоминает конструкцию оборудования, позволяя использовать обширную литературу по оптимизации компилятора при генерации байт-кода для виртуальной машины Parrot, которая могла бы работать со скоростью, близкой к машинному коду . Другие виртуальные машины на основе регистров вдохновили часть дизайна Parrot, включая LLVM , Lua VM и Dis .
Функциональные концепции [ править ]
Parrot имеет богатую поддержку нескольких функций функционального программирования, включая замыкания и продолжения , которые могут быть особенно трудными для правильной и переносимой реализации, особенно в сочетании с обработкой исключений и потоковой передачей . Самым большим преимуществом является динамическая расширяемость объектов с помощью методов, что позволяет использовать полиморфные контейнеры (PMC) и связанные с ними коды операций . Реализация решений этих проблем на уровне виртуальной машины избавляет от необходимости решать эти проблемы на отдельных клиентских языках.
Инструменты компилятора [ править ]
Parrot предоставляет набор инструментов для написания компиляторов [8], который включает Parser Grammar Engine (PGE), гибридный синтаксический анализатор, который может выражать рекурсивный анализатор спуска, а также синтаксический анализатор приоритета операторов , позволяющий свободный переход между ними в единая грамматика. PGE передается в Tree Grammar Engine (TGE), который дополнительно преобразует дерево синтаксического анализа, сгенерированное PGE, для оптимизации и, в конечном итоге, для генерации кода.
Существующие клиентские языки [ править ]
Многие языки уже имеют интерфейсы компиляторов, разработанные для Parrot; однако многие из них по-прежнему функционируют лишь частично. [9] По состоянию на июль 2013 г. [ требуется обновление ] активно поддерживаемыми языками являются: [10]
- C (C99 "диалект")
- Ява
- Байт-код Java
- Радость
- Lua
- MiniPerl (Perl 1.0) [ необходима ссылка ]
- NQP (не совсем Perl)
- Perl 5
- PHP (через Пиппа)
- Python (через pynie)
- Раку (через Ракудо )
- Рубин (через Кардинала)
- Схема
- Учебный язык " squaak "
- Tcl (через partcl)
- WMLScript
Неактивными языками по состоянию на июль 2013 г. являются следующие:
- Дуга
- APL
- до н.э
- Common Lisp
- Лисп
- ECMAScript
- Четвертый
- Общий императивный язык
- GNU m4
- Яко
- Октава [11]
- QuickBASIC 4.5
- Smalltalk (через чат)
- Байт-код .NET
Также были реализованы следующие эзотерические языки программирования :
- Befunge
- Brainfuck
- HQ9 Plus
- Ленивый K
- ЛОЛКОД
- Оу!
- Шекспир
- Unlambda
Внутреннее [ править ]
Для Parrot существует три формы программного кода:
- Байт-код [12] является двоичным и изначально интерпретируется Parrot. Байт-код обычно хранится в файлах с расширением имени файла «.pbc».
- Ассемблер Parrot (PASM) - это язык низкого уровня, который компилируется до байт-кода. Код PASM обычно хранится в файлах с расширением имени файла «.pasm».
- Промежуточное представление Parrot (PIR [13] ) - это язык немного более высокого уровня, чем PASM, и он также компилируется до байт-кода. Это основная цель языковых реализаций. PIR прозрачно управляет соглашениями о межпрограммных вызовах Parrot, обеспечивает улучшенный синтаксис, распределение регистров и многое другое. PIR-код обычно хранится в файлах с расширением имени файла «.pir».
Примеры [ править ]
Регистры [ править ]
Parrot основан на регистрах, как и большинство аппаратных процессоров , и в отличие от большинства виртуальных машин, которые основаны на стеке. Parrot предоставляет четыре типа регистров:
- I: собственный целочисленный тип
- N: с плавающей точкой номер
- S: расширенные строковые регистры с поддержкой Unicode
- P: PMC, или полиморфный контейнер - тип объекта Parrot
Parrot предоставляет произвольное количество регистров; это число фиксируется во время компиляции для каждой подпрограммы.
Арифметические операции [ править ]
В PASM
set I1 , 4 inc I1 # I1 теперь 5 добавить I1 , 2 # I1 теперь 7 set N1 , 42 .0 dec N1 # N1 теперь 41.0 sub N1 , 2 .0 # N1 теперь 39.0 print I1 print ' , ' печать N1 печать "\ n " конец
В ПИР
. sub 'main' : main $ I1 = 4 inc $ I1 # $ I1 теперь 5 $ I1 + = 2 # $ I1 теперь 7 $ N1 = 42.0 dec $ N1 # $ N1 теперь 41.0 $ N1 - = 2.0 # $ N1 теперь 39.0 print $ I1 print ',' print $ N1 print "\ n" . конец
Развитие [ править ]
До конца 2005 года Дэн Сугальский был ведущим дизайнером и главным архитектором Parrot. Чип Зальценберг , давний хакер Perl, ядра Linux и C ++, занимал эту должность до середины 2006 года, когда он стал ведущим разработчиком. Эллисон Рэндал , ведущий разработчик Punie и главный архитектор инструментов компилятора Parrot, была главным архитектором до середины октября 2010 года, когда она ушла в отставку и выбрала Кристофа Отто в качестве нового главного архитектора. [14]
Обсуждения разработки проходят в основном на канале #parrot на irc.perl.org. Кроме того, еженедельно проходят модерируемые встречи для разработчиков Parrot и языков, которые проводятся в #parrotsketch в той же сети. Много обсуждений также происходит в списке рассылки parrot-dev, размещенном на parrot.org.
Обсуждения дизайна существуют в форме проектных документов Parrot или PDD в репозитории Parrot. [15] Главный архитектор или другой назначенный дизайнер создает эти документы, чтобы объяснить философию функции, а также ее интерфейс и примечания к дизайну. Хакеры Parrot превращают эти документы в исполняемые тесты, а затем в существующие функции.
Команда Parrot выпускает новую стабильную версию программного обеспечения каждый третий вторник месяца. Основные коммиттеры по очереди выпускают выпуски в возобновляемом графике, когда ни один коммиттер не отвечает за несколько выпусков подряд. Эта практика повысила скорость и стабильность проекта. [ необходима цитата ]
См. Также [ править ]
- Общеязыковая среда выполнения (CLR)
- Сравнение виртуальных машин приложений
- mod_parrot
- Машина да Винчи
Ссылки [ править ]
- ^ a b «Новый поддерживаемый выпуск 8.1.0« Андский попугай » » . Фонд попугая. 2016-02-16 . Проверено 26 сентября 2016 .
- ^ «Лицензионное соглашение участника Parrot 1.0» (PDF) . Фонд попугая . Проверено 18 марта 2009 .
- ^ «Дорожная карта Parrot» . Фонд попугая. 2008-11-20 . Проверено 20 ноября 2008 .
- ↑ «История розыгрыша попугая - O'Reilly Media» . Oreilly.com. 2001-04-06 . Проверено 25 февраля 2014 .
- ^ "Попугай программирования" . Perl.com. Архивировано из оригинала на 2010-07-18 . Проверено 25 февраля 2014 .
- ^ "Языки | Попугай В.М." . Parrot.org. 2006-02-14 . Проверено 25 февраля 2014 .
- ^ Объявляя Parrot Foundation в архив 29 июня 2008, в Wayback Machine
- ^ [1] Архивировано 9 мая 2009 года в Wayback Machine.
- ^ "Языки - Попугай" . Trac.parrot.org . Проверено 25 февраля 2014 .
- ^ "Языки - Попугай В.М." . parrot.org . Проверено 19 апреля 2018 года .
- ^ WhiteKnight. "Белый рыцарь / матрикс - GitHub" . Github.com . Проверено 25 февраля 2014 .
- ^ http://www.parrotcode.org/docs/parrotbyte.html
- ↑ [2] Архивировано 20 июля 2009 г., в Wayback Machine.
- ↑ Отто, Кристоф (21.10.2010). "reparrot: у Parrot новый архитектор. Что теперь?" . Reparrot.blogspot.com . Проверено 25 февраля 2014 .
- ^ «Parrot 6.1.0 - Проектная документация Parrot (PDD)» . Docs.parrot.org . Проверено 25 февраля 2014 .
Внешние ссылки [ править ]
- Официальный веб-сайт
- Ссылки на Perl 6 и Parrot