Русская Википедия:Parrot

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Карточка программы

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

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

Примеры

Регистры

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

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

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Викиучебник

Шаблон:Freesoftware-stub Шаблон:Perl Шаблон:Lua Шаблон:PHP