Parrot - Registri
L'attuale macchina virtuale Perl 5 è una macchina stack. Comunica i valori tra le operazioni mantenendoli in pila. Le operazioni caricano i valori nello stack, fanno tutto ciò di cui hanno bisogno e rimettono il risultato nello stack. Questo è facile da lavorare, ma è lento.
Per aggiungere due numeri insieme, è necessario eseguire tre stack push e due stack pop. Peggio ancora, lo stack deve crescere in fase di esecuzione e ciò significa allocare memoria proprio quando non si desidera allocarlo.
Quindi Parrot romperà la tradizione consolidata delle macchine virtuali e utilizzerà un'architettura a registro, più simile all'architettura di una CPU hardware reale. Questo ha un altro vantaggio. Possiamo usare tutta la letteratura esistente su come scrivere compilatori e ottimizzatori per CPU basate su registri per la nostra CPU software!
Parrot dispone di registri specializzati per ogni tipo: 32 registri IV, 32 registri NV, 32 registri stringa e 32 registri PMC. In Parrot assembler, questi sono denominati rispettivamente I1 ... I32, N1 ... N32, S1 ... S32, P1 ... P32.
Ora diamo un'occhiata a qualche assemblatore. Possiamo impostare questi registri con l'operatore set:
set I1, 10
set N1, 3.1415
set S1, "Hello, Parrot"
Tutte le operazioni Parrot hanno lo stesso formato: il nome dell'operatore, il registro di destinazione e quindi gli operandi.