Representação intermediária do papagaio - Parrot intermediate representation
A representação intermediária do Parrot ( PIR ), anteriormente chamada de código intermediário (IMC), é uma das duas linguagens de montagem da máquina virtual Parrot . A outra é a linguagem assembly Parrot ou PASM. Comparado ao PASM, o PIR existe em uma camada de abstração ligeiramente superior e fornece registros temporários e registros nomeados, simplificando a geração de código.
Embora o Parrot ainda esteja evoluindo, ele está sendo usado em muitas capacidades diferentes e passou por vários lançamentos.
Visão geral
O PIR fornece um conjunto de abstrações que permitem ao programador ignorar certas redundâncias no bytecode do Parrot e escrever rapidamente o código que segue as complexidades do Parrot, como as convenções de chamada.
Abstrações
O PIR fornece abstração de tipo e polimorfismo até certo ponto. Por exemplo, o +
operador " " pode ser usado com int
, num
ou ambos:
.local int a
.local num b
a = 1
b = 1.1
.local num c
c = a + b
Convenções de chamada
As convenções de chamada no Parrot são complexas, mas toda essa complexidade pode ser ocultada usando as diretivas PIR:
.sub foo
.param int a
.param int b
.local int tmp
tmp = a + b
.return (tmp)
.end
Cada uma das diretivas com o prefixo " .
" se expande para o bytecode necessário do Parrot, mas não representa diretamente nenhuma operação fundamental do Parrot.
Exemplo
O programa hello world no PIR é
.sub hello :main
print "Hello world!\n"
.end
Se o programa for salvo como hello.pir , ele pode ser compilado e executado com este comando: parrot hello.pir