stringtranslate.com

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

Parrot — это прекращенная виртуальная машина процессов на основе регистров , разработанная для эффективного запуска динамических языков . Можно скомпилировать язык ассемблера Parrot и промежуточное представление Parrot (PIR, промежуточный язык) в байт-код Parrot и выполнить его. Parrot — это бесплатное программное обеспечение с открытым исходным кодом . [2]

Parrot был создан сообществом Perl и разработан с помощью сообществ открытого исходного кода и свободного программного обеспечения . В результате он был сосредоточен на лицензионной совместимости с Perl ( Artistic License 2.0 ), платформенной совместимости с широким спектром систем, совместимости архитектуры процессора с большинством современных процессоров, скорости выполнения, небольшом размере (около 700k в зависимости от платформы) и гибкости для обработки различных требований, предъявляемых 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 был распущен в 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 VM, были Raku (известный в то время как Rakudo Perl 6), Lua и новый язык под названием «Winxed». [12] Были начаты проекты по реализации многих других языков, включая PHP , Python и Ruby ; наряду с эзотерическими и демонстрационными языками, такими как Befunge и обучающий язык «squaak». [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 ' , ' print N1 print " \ n " end                             

В ПИР

. 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" . end

mod_parrot

mod_parrot — это необязательный модуль для веб-сервера Apache . Он встраивает интерпретатор виртуальной машины Parrot в сервер Apache и обеспечивает доступ к API Apache, что позволяет писать обработчики на языке ассемблера Parrot или любом языке высокого уровня, ориентированном на Parrot.

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

Ссылки

  1. ^ ab "Новая поддерживаемая версия 8.1.0 "Andean Parakeet"". Parrot Foundation. 2016-02-16 . Получено 2016-09-26 .
  2. ^ "Parrot Contributor License Agreement 1.0" (PDF) . Parrot Foundation. Архивировано из оригинала (PDF) 2010-08-16 . Получено 2009-03-18 .
  3. ^ "Parrot Roadmap". Parrot Foundation. 2008-11-20. Архивировано из оригинала 2010-04-15 . Получено 2008-11-20 .
  4. ^ ab "Неактивный Parrot | Parrot VM". www.parrot.org .
  5. ^ "История розыгрыша с попугаем - O'Reilly Media". Oreilly.com. 2001-04-06 . Получено 2014-02-25 .
  6. ^ "Programming Parrot". Perl.com. Архивировано из оригинала 2010-07-18 . Получено 2014-02-25 .
  7. ^ "Расширенный поиск корпораций". Департамент лицензирования штата Вашингтон . UBI 602 839 536. Получено 09.04.2021 .
  8. Анонсирование Фонда Parrot. Архивировано 29 июня 2008 г. на Wayback Machine.
  9. ^ "Parrot 6.1.0 - Parrot Design Documents (PDDs)". Docs.parrot.org . Получено 25.02.2014 .
  10. ^ Отто, Кристоф (21.10.2010). "reparrot: У Parrot новый архитектор. Что теперь?". Reparrot.blogspot.com . Получено 25.02.2014 .
  11. ^ [1] Архивировано 9 мая 2009 г. на Wayback Machine.
  12. ^ "Языки - Parrot VM". parrot.org . Получено 2023-11-18 .
  13. ^ "Языки – Parrot". Вики по разработке Parrot . Получено 2023-11-18 .
  14. ^ "Формат Parrot Bytecode (PBC) - parrotcode". Архивировано из оригинала 2008-12-24 . Получено 2009-07-15 .
  15. ^ [2] Архивировано 20 июля 2009 г. на Wayback Machine.

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