Parrot (пэррот или паррот; от англ. parrot — попугай) — виртуальная машина, используемая интерпретируемыми языками для эффективного исполнения байт-кода. Название происходит от первоапрельской шутки[3], когда было объявлено о создании нового языка, объединяющего Perl и Python.

Parrot
Логотип программы Parrot
Тип виртуальная машина
Разработчик The Perl Foundation[d]
Написана на Си
Операционная система Кроссплатформенное программное обеспечение
Последняя версия
Репозиторий github.com/parrot/parrot
Лицензия

Artistic License и GNU GPL

 (англ.)
Сайт parrot.org

Одной из важных причин для разработки новой виртуальной машины стало различие между языками со статическими и динамическими типами данных. Современные распространенные виртуальные машины, как, например, 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[en], Tcl, URM и YAL, но большая часть реализаций этих языков для Parrot неполна и находится в экспериментальном состоянии.

В 2014 году, в связи с проблемами развития Parrot, в качестве альтернативной реализации виртуальной машины для Perl 6 была выпущена MoarVM[en][4].

Примеры править

Регистры править

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 для компиляции на лету от Риза Везерли, Клауса Трейчела, Алексея Демакова и Кирилла Кононенко

Примечания править

  1. https://github.com/parrot/parrot/releases/tag/RELEASE_8_1_0
  2. http://www.parrot.org/news/2016/Parrot-8.1.0
  3. Programming Parrot. perl.com (1 апреля 2001). Дата обращения: 26 февраля 2015. Архивировано из оригинала 18 июля 2010 года.  (англ.)
  4. Андрей Шитов. Perl 6 XXI века // Pragmatic Perl. — декабрь 2014. — Вып. 22. Архивировано 13 сентября 2021 года.

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