Parrot

Parrot
AutorParrot Foundation
Aktualna wersja stabilna8.1.0 – 16 lutego 2016; ponad 6 lat temu[1]
Platforma sprzętowawieloplatformowość
System operacyjnywieloplatformowość
Rodzajmaszyna wirtualna
LicencjaLicencja Artystyczna
Strona internetowa

Parrotmaszyna wirtualna przeznaczona do języków dynamicznie typowanych, takich jak Perl, Ruby i Python.

Historia

Nazwa Parrot pochodzi od primaaprilisowego żartu Simona Cozensa, który w 2001 roku napisał artykuł Programming Parrot na Perl.com (O'Reilly Network), pisząc o tym, iż Larry Wall i Guido van Rossum planują rzekomo połączenie języków Perl i Python. Wbrew burzy negatywnych komentarzy jakie wówczas wywołał, żart ów jak się później miało okazać zawierał więcej prawdy niż ktokolwiek mógł wtedy sądzić.

Języki programowania

Projekt Parrot powstał na listach dyskusyjnych Perla jako maszyna wirtualna przeznaczona dla Perla 6 (do dziś lista dyskusyjna projektu Parrot nosi nazwę perl6-internals, lecz wkrótce zmieniona zostanie na parrot-internals, pozostając jednak na serwerach perl.org), jednak prawdopodobnie wcześniej będzie można wykonywać za jej pomocą programy w języku Python lub Perl 5 (projekt Pony) niż Perl 6 (projekt Rakudo). Poza nimi trwają już prace nad wykorzystaniem projektu Parrot dla języków BASIC, Befunge, Brainfuck, Cola, Forth, Jako, m4, Miniperl, Ook, OpenComal, PHP, Plot, Ruby, Scheme, Tcl, URM, LOLCODE i YAL. Wewnętrznymi językami dla projektu Parrot są PASM i IMC (PIR).

Duże zainteresowanie projektem przejawiają środowiska związane z Ruby, podczas gdy twórcy Pythona są bardziej zainteresowani pracami nad własnym projektem PyPy.

Zasady działania

Parrot jest maszyną rejestrową z operacjami wysokiego poziomu, takimi jak (podobnie jak aktualny kod bajtowy Perla) operacje na całych łańcuchach.

Rejestry

Parrot ma po 32 rejestry czterech typów:

  • I0 do I31 – rejestry całkowitoliczbowe, mogą zawierać liczbę całkowitą lub wskaźnik (I od integer, liczba całkowita),
  • N0 do N31 – rejestry zmiennoprzecinkowe (N od number, liczba),
  • S0 do S31 – rejestry łańcuchowe (S od string, łańcuch znaków),
  • P0 do P31 – rejestry obiektowe (P od PMC, Parrot Magic Cookie).

W przeciwieństwie do kodu bajtowego Perla, natywne perlowe typy (skalar, tablica, hasz i inne) są tu traktowane jako obiekty, a maszyna wirtualna operuje na znacznie prostszych typach.

Przypisy

  1. New supported release 8.1.0 "Andean Parakeet" (ang.). Parrot Foundation, 2016-02-16. [dostęp 2020-05-01].

Linki zewnętrzne