La representación intermedia de Parrot ( PIR ), anteriormente llamada código intermedio (IMC), es uno de los dos lenguajes ensambladores de la máquina virtual de Parrot . El otro es el lenguaje ensamblador de Parrot o PASM. En comparación con PASM, PIR existe en una capa de abstracción ligeramente superior y proporciona registros temporales y registros con nombre, lo que simplifica la generación de código.
Si bien Parrot aún está evolucionando, actualmente se utiliza en muchas capacidades diferentes y ha experimentado varios lanzamientos.
PIR proporciona un conjunto de abstracciones que permiten al programador ignorar ciertas redundancias en el código de bytes de Parrot y escribir rápidamente código que se adhiera a las complejidades de Parrot, como las convenciones de llamada.
PIR ofrece abstracción de tipos y polimorfismo hasta cierto punto. Por ejemplo, el +
operador " " se puede utilizar con int
, num
o con ambos:
. int local a . número local b a = 1 b = 1.1 . número local c c = a + b
Las convenciones de llamada en Parrot son complejas, pero toda esa complejidad se puede ocultar mediante el uso de directivas PIR:
. sub foo . parámetro int a . parámetro int b . local int tmp tmp = a + b . return ( tmp ) . fin
Cada una de las directivas precedidas por un " .
" se expande al bytecode de Parrot requerido, pero no representa directamente ninguna operación fundamental de Parrot.
El programa Hola Mundo en PIR es
. sub hola : main print "Hola mundo!\n" . end
Si el programa se guarda como hello.pir , se puede compilar y ejecutar con este comando:parrot hello.pir