Papuga - rejestry
Bieżąca maszyna wirtualna Perl 5 jest maszyną stosową. Przekazuje wartości między operacjami, utrzymując je na stosie. Operacje ładują wartości na stos, robią wszystko, co muszą, i umieszczają wynik z powrotem na stosie. Jest to łatwe w obsłudze, ale jest powolne.
Aby dodać do siebie dwie liczby, musisz wykonać trzy wypchnięcia stosu i dwa wyskoki. Co gorsza, stos musi rosnąć w czasie wykonywania, a to oznacza przydzielanie pamięci tylko wtedy, gdy nie chcesz jej przydzielać.
Dlatego Parrot przełamie ustaloną tradycję dla maszyn wirtualnych i zastosuje architekturę rejestru, bardziej zbliżoną do architektury prawdziwego sprzętowego procesora. Ma to jeszcze jedną zaletę. Możemy wykorzystać całą istniejącą literaturę na temat pisania kompilatorów i optymalizatorów dla procesorów opartych na rejestrach dla naszego procesora programowego!
Firma Parrot posiada specjalistyczne rejestry dla każdego typu: 32 rejestry IV, 32 rejestry NV, 32 rejestry łańcuchowe i 32 rejestry PMC. W asemblerze Parrot są one nazwane odpowiednio I1 ... I32, N1 ... N32, S1 ... S32, P1 ... P32.
Spójrzmy teraz na asemblera. Możemy ustawić te rejestry za pomocą operatora set:
set I1, 10
set N1, 3.1415
set S1, "Hello, Parrot"
Wszystkie operacje Parrot mają ten sam format: nazwa operatora, rejestr docelowy, a następnie operandy.