Parrot (віртуальна машина)
Parrot (перрот або паррот; від англ. parrot — папуга) — віртуальна машина, що використовується інтерпретованими мовами для ефективного виконання байт-коду. Parrot є вільним програмним забезпеченням з відкритим вихідним кодом.[1] 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 неповна і перебуває в експериментальному стані. Версія 1.0 зі стабільним інтерфейсом прикладного програмування (API) для розробки була випущена 17 березня 2009 року[2]. Остання версія — випуск 8.1.0 «Andean Parakeet»[3]. У 2014 році, у зв'язку з проблемами розвитку Parrot, як альтернативну реалізацію віртуальної машини для Perl 6 було випущено MoarVM. Parrot офіційно припинив своє існування у серпні 2021 року, після того, як був витіснений MoarVM у своєму основному використанні (Raku) і так і не став основною віртуальною машиною для жодної з інших підтримуваних ним мов.[4] ІсторіяНазва Parrot походить від першоквітневого жарту, в якому було оголошено про гіпотетичну мову, названу Parrot, яка об'єднала б Python та Perl.[5][6] Пізніше ця назва була перейнята проєктом Parrot (спочатку частиною зусиль з розробки Raku), метою якого була підтримка Raku, Python та інших мов програмування. Фонд Parrot Foundation був розпущений у 2014 р.[7] Фонд був створений у 2008 р. з метою збереження авторських прав та торгових марок проєкту Parrot, сприяння розвитку мовних реалізацій та основної кодової бази, забезпечення бази для зростання спільноти Parrot та налагодження зв'язків з іншими мовними спільнотами. Історичні проєктні рішення задокументовані у вигляді проєктних документів Parrot, або PDD, у репозиторії Parrot.[8] До кінця 2005 року провідним дизайнером і головним архітектором Parrot був Ден Сугальскі. Чіп Зальценберг, давній хакер Perl, ядра Linux і C++, зайняв цю посаду до середини 2006 року, коли він став провідним розробником. Елісон Рендал, провідний розробник Punie і головний архітектор інструментів компілятора Parrot, була головним архітектором до середини жовтня 2010 року, коли вона пішла у відставку і обрала Крістофа Отто новим головним архітектором.[9] МовиМетою віртуальної машини Parrot було розміщення клієнтських мов і забезпечення взаємодії між ними. На шляху до досягнення цієї мети існувало кілька перешкод, зокрема складність відображення високорівневих концепцій, даних і структур даних між мовами. Статичні та динамічні мовиРізні властивості статично та динамічно типізованих мов мотивували розробку Parrot. Популярні віртуальні машини, такі як віртуальна машина Java та Common Language Runtime для платформи .NET, були розроблені для статично типізованих мов, в той час, як мови, на які орієнтований Parrot, є динамічно типізованими. Віртуальні машини, такі як віртуальна машина Java та поточна віртуальна машина Perl 5, також базуються на стеку. Розробники Parrot обрали регістрову структуру, мотивуючи це тим, що вона більше нагадує апаратну структуру, що дозволяє використовувати величезну літературу з оптимізації компіляторів для створення байт-коду для віртуальної машини Parrot, який може працювати зі швидкістю, наближеною до машинного коду[джерело не вказано]. Інші реєстрові віртуальні машини надихнули на створення Parrot, зокрема LLVM, Lua VM та Inferno's Dis. Функціональні концепціїParrot має багату підтримку декількох функцій функціонального програмування, включаючи закриття та продовження, обидві з яких можуть бути особливо складними для правильної та портативної реалізації, особливо у поєднанні з обробкою винятків та багатопотоковістю. Найбільшою перевагою є динамічна розширюваність об'єктів з методами, що дозволяє використовувати поліморфні контейнери (PMC) та пов'язані з ними опкоди. Реалізація розв'язання цих проблем на рівні віртуальної машини позбавляє від необхідності розв'язувати ці проблеми в окремих клієнтських мовах. Інструменти компілятораParrot надає набір інструментів для написання компіляторів, який включає Parser Grammar Engine (PGE), гібридний синтаксичний аналізатор-генератор, який може виражати як синтаксичний аналізатор рекурсивного спуску, так і синтаксичний аналізатор операторного передування, дозволяючи вільний перехід між ними в одній граматиці. PGE подає дані до деревовидного граматичного рушія (TGE), який далі трансформує дерево розбору, згенероване PGE, для оптимізації і, зрештою, для генерації коду. РеалізаціїНайповнішими мовними реалізаціями, орієнтованими на Parrot VM, були Raku (відома на той час як Rakudo Perl 6), Lua та нова мова під назвою «Winxed».[10] Було розпочато проєкти з реалізації багатьох інших мов, зокрема PHP, Python та Ruby, а також езотеричних та демонстраційних мов, таких як Befunge та навчальна мова «squaak». Жодному з цих проєктів не вдалося стати основною реалізацією відповідних ПрикладиРегістриParrot базується на регістрах, як більшість апаратних ЦП, і відрізняється від більшості віртуальних машин, які базуються на стеку. Parrot надає чотири типи регістрів: I: цілочисельний тип S: розширені рядкові регістри з підтримкою Unicode P: PMC, або поліморфний контейнер — тип об'єкта Parrot Parrot надає довільну кількість регістрів; це число фіксується на етапі компіляції для кожної підпрограми. Арифметичні операції В PASM 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
В PIR .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
Також дивитисьПримітки
Посилання
|
Portal di Ensiklopedia Dunia