Кіріспе

Бағдарламалау тілдерін іске қосуға арналған бағдарламалық қамтамасыз ету.

Parrot – динамикалық тілдерді тиімді іске қосу үшін жасалған, қазіргі кезде қолданыстан тоқтатылған, тіркелімге негізделген процесс виртуалды машинасы. Parrot тіліндегі ассемблер мен Parrot аралық өрнегін (PIR, аралық тіл) Parrot байт-кодына компиляциялап, оны іске қосу мүмкін. Parrot – еркін және ашық кодты бағдарламалық қамтамасыз ету. Parrot-ты Perl қауымдастығы бастады және ашық кодты және еркін бағдарламалық қамтамасыз ету қауымдастықтарының көмегімен дамытылды. Осының нәтижесінде, Perl лицензиясымен (Artistic License 2.0) үйлесімділік, жүйелердің кең ауқымында платформалық үйлесімділік, көптеген заманауи процессорларда процессорлық архитектураның үйлесімділігі, орындалу жылдамдығы, кішкентай көлем (платформаға байланысты шамамен 700 килобайтқа дейін) және Raku және басқа да заманауи динамикалық тілдердің әртүрлі талаптарына бейімделуге назар аударылды. 2009 жылдың 17 наурызында тұрақты қолданбалы бағдарламалау интерфейсі (API) бар 1.0 нұсқасы жарық көрді. Соңғы нұсқасы – 8.1.0 "Андийлік конго".

Тарих

Parrot атауы Python және Perl-ді біріктіретін Parrot деп аталатын гипотетикалық тіл туралы сәуір айында жасалған әзілден туындаған. Кейіннен бұл атау Parrot жобасы қабылдады (бастапқыда Raku әзірлеу жұмысының бір бөлігі), ол Raku, Python және басқа да бағдарламалау тілдерін қолдау мақсатын қойды. Parrot қоры 2014 жылы таратылды. Parrot қоры 2008 жылы Parrot жобасының авторлық құқықтары мен тауарлық белгілерін сақтау, тілдік іске асырулар мен негізгі код базасын дамытуға көмектесу, Parrot қауымдастығының өсуіне негіз жасау және басқа тілдердің қауымдастықтарымен байланыс орнату үшін құрылды. Тарихи жобалау шешімдері Parrot Design Documents немесе PDD нысанында Parrot репозиторийінде құжатталған. 2005 жылдың соңына дейін Дэн Сугальски Parrot-тың бас дизайнері және бас архитектор болды. Perl, Linux ядросы және C++ хакері ретінде танымал Чип Салценберг 2006 жылдың ортасына дейін басшылықты өз қолына алды, содан кейін ол жетекші әзірлеуші болды. Punie-нің жетекші әзірлеушісі және Parrot компилятор құралдарының бас архитектор болған Алисон Рэндал 2010 жылдың қазан айының ортасына дейін бас архитектор қызметін атқарды, содан кейін ол орнынан бас тартып, Кристоф Оттоны жаңа бас архитектор етіп тағайындады.

Тілдер

Parrot виртуалды машинасының мақсаты клиенттік тілдерді қолдау және олардың бір-бірімен өзара жұмыс істеуіне мүмкіндік беру болды. Бұл мақсатқа жетуде бірнеше қиындықтар бар, әсіресе тілдер арасында жоғары деңгейдегі түсініктерді, деректерді және деректер құрылымдарын үйлестірудің қиындығы.

Статикалық және динамикалық тілдер

Статикалық және динамикалық типтегі тілдердің өзгеше қасиеттері Parrot дизайнының туындауына себеп болды. Қазіргі танымал виртуалды машиналар, мысалы Java виртуалды машинасы және .NET платформасы үшін Common Language Runtime, статикалық типтелген тілдерге арналған, ал Parrot-тың қолдануға арналған тілдері динамикалық типтелген. Java виртуалды машинасы және қазіргі Perl 5 виртуалды машинасы сияқты виртуалды машиналар да стекке негізделген. Parrot әзірлеушілері аппараттық құрылымға жақындығы үшін регистрлік дизайнды таңдады, бұл компиляторды оңтайландыру бойынша кең көлемді әдебиетті пайдаланып, Parrot виртуалды машинасы үшін машиналық кодқа жақын жылдамдықпен орындала алатын байт-кодты жасауға мүмкіндік береді. Басқа регистрлік виртуалды машиналар, соның ішінде LLVM, Lua VM және Inferno's Dis, Parrot дизайнының кейбір бөліктеріне әсер етті.

Функционалдық ұғымдар

Parrot функционалдық бағдарламалаудың бірнеше мүмкіндіктерін толық қолдайды, соның ішінде жабылулар мен жалғастыруларды. Бұлардың екеуін де дұрыс және платформалар бойынша үйлесімді жүзеге асыру, әсіресе қателерді өңдеу және көп жіптілікпен бірге қолдану кезінде қиын болуы мүмкін. Ең маңызды артықшылығы – объектілерді әдістермен динамикалық түрде кеңейту мүмкіндігі, бұл полиморфты контейнерлерге (PMC) және олармен байланысты операциялық кодтарға (опкодтарға) жол ашады. Виртуалды машина деңгейінде осы мәселелерді шешу, клиенттік тілдердің әрқайсысында оларды жеке шешу қажеттілігін жояды.

Компилятор құралдары

Parrot компилятор құру құралдары жиынтығын ұсынады, оның ішінде Parser Grammar Engine (PGE) – гибридті парсер генераторы бар, ол рекурсивті түсу парсерін де, оператор басымдылығы парсерін де қолдана алады, сонымен қатар бір грамматикада екеуінің арасында еркін өтуге мүмкіндік береді. PGE ағаш грамматикасы қозғалтқышына (TGE) дерек жібереді, ол PGE жасаған синтаксистік ағашты оңтайландыру және соңында кодты генерациялау үшін одан әрі өңдейді.

Қолданылу

Parrot VM-ге бағытталған ең толық тілдік іске асырылымдар Raku (сол кезде Rakudo Perl 6 деп аталған), Lua және "Winxed" деп аталған жаңа тіл болды. PHP, Python және Ruby сияқты көптеген басқа тілдерді іске асыру жобалары да басталды; сондай-ақ, Befunge және "squaak" оқу тілі сияқты эзотерикалық және демонстрациялық тілдер де болды. Бұл жобалардың ешқайсысы сәйкес тілдерінің негізгі іске асырылымына айнала алмады. Ол екілік форматта болып табылады және тікелей Parrot-пен интерпретацияланады. Байт-код әдетте ".pbc" кеңейтімді файлдарда сақталады. Parrot тілдік ассамблері (PASM) – байт-кодқа дейін компиляцияланатын төменгі деңгейдегі тіл. PASM коды әдетте ".pasm" кеңейтімді файлдарда сақталады. Parrot аралық өрнегі (PIR) PASM-ге қарағанда біршама жоғары деңгейдегі тіл және ол да байт-кодқа дейін компиляцияланады. Бұл тілдік іске асырылымдардың негізгі мақсаты болып табылады. PIR Parrot-тың процедуралық шақыру конвенцияларын ашық түрде басқарады, жақсартылған синтаксис, регистрлерді бөлу және тағы да басқа мүмкіндіктерді ұсынады. PIR коды әдетте ".pir" кеңейтімді файлдарда сақталады.