stringtranslate.com

Виртуальная машина Попугая

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 «Andean Parakeet». [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 и Dis от Inferno .

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

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

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

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

Реализации

Наиболее полными языковыми реализациями, предназначенными для виртуальной машины Parrot, были Raku (известный в то время как Rakudo Perl 6), Lua и новый язык под названием «Winxed». [12] Были начаты проекты по реализации многих других языков, включая PHP , Python и Ruby ; наряду с эзотерическими и демонстрационными языками, такими как Befunge и обучающий язык «писк». [13] Ни один из этих проектов не стал первичным внедрением соответствующих языков. [4]

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

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

Примеры

Регистры

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

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

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

В ПАСМ

 set I1 , 4 inc I1 # I1 теперь 5 add 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  напечатайте  $I1  напечатайте  ','  напечатайте  $N1  напечатайте  "\n" . конец

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

Рекомендации

  1. ^ ab «Новая поддерживаемая версия 8.1.0 «Андский попугай»». Фонд попугаев. 16 февраля 2016 г. Проверено 26 сентября 2016 г.
  2. ^ «Лицензионное соглашение для участников Parrot 1.0» (PDF) . Фонд попугаев. Архивировано из оригинала (PDF) 16 августа 2010 г. Проверено 18 марта 2009 г.
  3. ^ "Дорожная карта попугаев" . Фонд попугаев. 20 ноября 2008 г. Архивировано из оригинала 15 апреля 2010 г. Проверено 20 ноября 2008 г.
  4. ^ ab «Неактивный попугай | Parrot VM». www.parrot.org .
  5. ^ "История розыгрыша с попугаем - O'Reilly Media" . Орейли.com. 6 апреля 2001 г. Проверено 25 февраля 2014 г.
  6. ^ «Программирование попугая». Perl.com. Архивировано из оригинала 18 июля 2010 г. Проверено 25 февраля 2014 г.
  7. ^ «Расширенный поиск корпораций» . Департамент лицензирования штата Вашингтон . УБИ 602 839 536 . Проверено 9 апреля 2021 г.
  8. Объявление о создании Parrot Foundation. Архивировано 29 июня 2008 г. в Wayback Machine.
  9. ^ «Parrot 6.1.0 — Проектные документы Parrot (PDD)» . Docs.parrot.org . Проверено 25 февраля 2014 г.
  10. ^ Отто, Кристоф (21 октября 2010 г.). "reparrot: У Попугая новый архитектор. Что теперь?". Reparrot.blogspot.com . Проверено 25 февраля 2014 г.
  11. ^ [1] Архивировано 9 мая 2009 г., в Wayback Machine.
  12. ^ "Языки - Попугай ВМ" . сайт попугая . Проверено 18 ноября 2023 г.
  13. ^ «Языки - Попугай» . Wiki по разработке Parrot . Проверено 18 ноября 2023 г.
  14. ^ "Формат байт-кода попугая (PBC) - код попугая" . Архивировано из оригинала 24 декабря 2008 г. Проверено 15 июля 2009 г.
  15. ^ [2] Архивировано 20 июля 2009 г., в Wayback Machine.

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