Parrot
Parrot | |
---|---|
Тип | виртуальная машина |
Операционная система | Кроссплатформенное программное обеспечение |
Лицензия | (англ.) |
Parrot (пэррот или паррот; от англ. parrot — попугай) — виртуальная машина, используемая интерпретируемыми языками для эффективного исполнения байт-кода. Название происходит от первоапрельской шутки[1], когда было объявлено о создании нового языка, объединяющего Perl и Python.
Одной из важных причин для разработки новой виртуальной машины стало различие между языками со статическими и динамическими типами данных. Современные распространенные виртуальные машины, как, например, Java VM и .NET CLR, были разработаны для языков со статическими типами данных, тогда как языки, на поддержку которых нацелен Parrot, используют динамические типы. Виртуальная машина Parrot основана на использовании регистров, а не стека, так как, по мнению разработчиков, это увеличивает скорость и лучше отражает устройство современных процессоров.
Parrot планировалось сделать основой интерпретатора Perl, а также целевой платформой для компиляции кода Perl 6. Кроме реализованной части Perl 6, в байткод можно скомпилировать программы на других языках, включая APL, BASIC, Befunge, Brainfuck, Cola, Forth, Jako, Lisp, m4, Miniperl, Ook!, Parakeet, OpenComal, PHP, Plot, Pheme, Punie, Python, Ruby, Scheme, Span[англ.], Tcl, URM и YAL, но большая часть реализаций этих языков для Parrot неполна и находится в экспериментальном состоянии.
В 2014 году, в связи с проблемами развития Parrot, в качестве альтернативной реализации виртуальной машины для Perl 6 была выпущена MoarVM[англ.][2].
Примеры
Регистры
Parrot основан на использовании регистров, в отличие от большинства виртуальных машин, основанных на стеке. Parrot предоставляет 4 типа регистров:
- I: целые числа (от англ. integer)
- N: числа с плавающей точкой (от англ. number)
- S: расширенные строковые регистры с поддержкой Юникода (от англ. string)
- P: PMC, или Parrot Magic Cookie — специальный тип объектов Parrot
До версии 0.3.0 включительно Parrot обычно предоставлял программам по 32 регистра каждого типа с возможностью увеличения этого числа до 64. Более поздние версии стали предоставлять неограниченное число регистров; каждая функция может запросить столько регистров, сколько ей требуется.
Parrot Assembly Language
Кроме, непосредственно, байткода в Parrot есть специальный язык низкого уровня Parrot Assembly Language (PASM). Ниже приведен пример небольшой программы на нём:
set I1, 4 # Запись в регистр I1 числа 4 inc I1 # Инкремент I1 add I1, 2 # Добавление к I1 двойки; значение в I1 станет равным 7 set N1, 42.0 # Запись в N1 значения 42.0 dec N1 # Декремент N1, новое значение будет 41.0 sub N1, 2.0 # N1 станет равным 39.0 print I1 # Вывод содержимого I1 print ", " # Вывод строки «, » print N1 # Вывод значения N1 print "\n" # Вывод символа перевода строки end
Поддерживаемые платформы
Parrot компилируется и запускается на большом числе платформ, включая все самые распространенные, в том числе Linux (x86), Cygwin, Win32, Tru64, OpenVMS (Alpha), Solaris (Sparc), FreeBSD (x86).
См. также
- Библиотека libJIT для компиляции на лету от Риза Везерли, Клауса Трейчела, Алексея Демакова и Кирилла Кононенко
Примечания
- ↑ Programming Parrot (недоступная ссылка). perl.com (1 апреля 2001). Дата обращения: 26 февраля 2015. Архивировано 18 июля 2010 года. (англ.)
- ↑ Андрей Шитов. Perl 6 XXI века // Pragmatic Perl. — декабрь 2014. — Вып. 22.
Ссылки
- Parrot Virtual Machine (англ.) (недоступная ссылка). — официальная страница проекта. Дата обращения: 30 сентября 2011. Архивировано 18 мая 2012 года.
- Parrot (недоступная ссылка) (29 февраля 2004). — перевод части документации. Дата обращения: 18 июля 2011. Архивировано 26 сентября 2008 года.
- LXF73: Что такое...Parrot? . — статья в LinuxFormat. Архивировано 18 мая 2012 года.
- Как использовать виртуальную машину Parrot: Часть 1, Часть 2, Алексей Снастин, IBM developerWorks