Parrot - Registres

La machine virtuelle Perl 5 actuelle est une machine à pile. Il communique des valeurs entre les opérations en les gardant sur une pile. Les opérations chargent des valeurs sur la pile, font ce qu'elles doivent faire et remettent le résultat dans la pile. C'est facile à travailler, mais c'est lent.

Pour ajouter deux nombres ensemble, vous devez effectuer trois poussées de pile et deux pop de pile. Pire encore, la pile doit croître au moment de l'exécution, ce qui signifie allouer de la mémoire juste au moment où vous ne voulez pas l'allouer.

Parrot va donc briser la tradition établie des machines virtuelles, et utiliser une architecture de registre, plus proche de l'architecture d'un processeur matériel réel. Cela présente un autre avantage. Nous pouvons utiliser toute la littérature existante sur la façon d'écrire des compilateurs et des optimiseurs pour les processeurs basés sur des registres pour nos processeurs logiciels!

Parrot dispose de registres spécialisés pour chaque type: 32 registres IV, 32 registres NV, 32 registres string et 32 ​​registres PMC. Dans l'assembleur Parrot, ils sont nommés respectivement I1 ... I32, N1 ... N32, S1 ... S32, P1 ... P32.

Regardons maintenant un assembleur. Nous pouvons définir ces registres avec l'opérateur set:

set I1, 10
   set N1, 3.1415
   set S1, "Hello, Parrot"

Toutes les opérations Parrot ont le même format: le nom de l'opérateur, le registre de destination puis les opérandes.