Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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
  • Машина да Винчи

Ссылки [ править ]

  1. ^ a b «Новый поддерживаемый выпуск 8.1.0« Андский попугай » » . Фонд попугая. 2016-02-16 . Проверено 26 сентября 2016 .
  2. ^ «Лицензионное соглашение участника Parrot 1.0» (PDF) . Фонд попугая . Проверено 18 марта 2009 .
  3. ^ «Дорожная карта Parrot» . Фонд попугая. 2008-11-20 . Проверено 20 ноября 2008 .
  4. «История розыгрыша попугая - O'Reilly Media» . Oreilly.com. 2001-04-06 . Проверено 25 февраля 2014 .
  5. ^ "Попугай программирования" . Perl.com. Архивировано из оригинала на 2010-07-18 . Проверено 25 февраля 2014 .
  6. ^ "Языки | Попугай В.М." . Parrot.org. 2006-02-14 . Проверено 25 февраля 2014 .
  7. ^ Объявляя Parrot Foundation в архив 29 июня 2008, в Wayback Machine
  8. ^ [1] Архивировано 9 мая 2009 года в Wayback Machine.
  9. ^ "Языки - Попугай" . Trac.parrot.org . Проверено 25 февраля 2014 .
  10. ^ "Языки - Попугай В.М." . parrot.org . Проверено 19 апреля 2018 года .
  11. ^ WhiteKnight. "Белый рыцарь / матрикс - GitHub" . Github.com . Проверено 25 февраля 2014 .
  12. ^ http://www.parrotcode.org/docs/parrotbyte.html
  13. [2] Архивировано 20 июля 2009 г., в Wayback Machine.
  14. Отто, Кристоф (21.10.2010). "reparrot: у Parrot новый архитектор. Что теперь?" . Reparrot.blogspot.com . Проверено 25 февраля 2014 .
  15. ^ «Parrot 6.1.0 - Проектная документация Parrot (PDD)» . Docs.parrot.org . Проверено 25 февраля 2014 .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Ссылки на Perl 6 и Parrot