Parrot - Registros

A máquina virtual Perl 5 atual é uma máquina de pilha. Ele comunica valores entre as operações, mantendo-os em uma pilha. As operações carregam valores na pilha, fazem o que for necessário e colocam o resultado de volta na pilha. Isso é fácil de trabalhar, mas é lento.

Para somar dois números, você precisa realizar três empilhamento de pilha e dois empilhamento de pilha. Pior, a pilha precisa crescer em tempo de execução, e isso significa alocar memória apenas quando você não quiser alocá-la.

Portanto, o Parrot vai quebrar a tradição estabelecida para máquinas virtuais e usar uma arquitetura de registro, mais semelhante à arquitetura de uma CPU de hardware real. Isso tem outra vantagem. Podemos usar toda a literatura existente sobre como escrever compiladores e otimizadores para CPUs baseadas em registro para nossa CPU de software!

A Parrot tem registros especializados para cada tipo: 32 registros IV, 32 registros NV, 32 registros de string e 32 registros PMC. No montador Parrot, são denominados I1 ... I32, N1 ... N32, S1 ... S32, P1 ... P32, respectivamente.

Agora vamos dar uma olhada em algum montador. Podemos definir esses registros com o operador set:

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

Todas as operações do Parrot têm o mesmo formato: o nome do operador, o registrador de destino e depois os operandos.