Parrot

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Parrot
Parrot logo.png
Тип

виртуальная машина

Разработчики

The Perl Foundation

Написана на

Си

Операционная система

Кроссплатформенное программное обеспечение

Последняя версия

6.8.0 (16 сентября 2014)[1],
6.9.0 (21 октября 2014)[2],
6.10.0 (19 ноября 2014)[3]

Лицензия

Artistic License и GNU GPL  (англ.)

Сайт

parrot.org

Parrot (пэррот или паррот; от англ. parrot — попугай) — виртуальная машина, используемая интерпретируемыми языками для эффективного исполнения байт-кода. Название происходит от первоапрельской шутки[4], когда было объявлено о создании нового языка, объединяющего 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[en], Tcl, URM и YAL, но большая часть реализаций этих языков для Parrot неполна и находится в экспериментальном состоянии.

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

Примеры[править | править вики-текст]

Регистры[править | править вики-текст]

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. http://www.parrot.org/news/2014/Parrot-6.8.0
  2. http://lists.parrot.org/pipermail/parrot-dev/2014-October/007638.html
  3. http://lists.parrot.org/pipermail/parrot-dev/2014-November/007640.html
  4. Programming Parrot. perl.com (1 апреля 2001). Проверено 26 февраля 2015.  (англ.)
  5. Андрей Шитов Perl 6 XXI века // Pragmatic Perl. — декабрь 2014. — Вып. 22.

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