Промежуточное представление попугая
( Промежуточное представление Parrot PIR ) , ранее называвшееся Промежуточным кодом (IMC), является одним из двух языков ассемблера для виртуальной машины Parrot . Другой — ассемблер Parrot или PASM. По сравнению с PASM, PIR существует на несколько более высоком уровне абстракции и предоставляет временные и именованные регистры, упрощая генерацию кода.
Хотя Parrot все еще развивается, в настоящее время он используется в самых разных целях и выдержал несколько выпусков.
Обзор
[ редактировать ]PIR предоставляет набор абстракций, которые позволяют программисту игнорировать определенные избыточности в байт-коде Parrot и быстро писать код, соответствующий сложностям Parrot, таким как соглашения о вызовах.
Абстракции
[ редактировать ]PIR в некоторой степени обеспечивает как абстракцию типов, так и полиморфизм . Например, " +
"Оператор можно использовать с int
, num
или оба:
.local int a
.local num b
a = 1
b = 1.1
.local num c
c = a + b
Соглашения о вызовах
[ редактировать ]Соглашения о вызовах в Parrot сложны, но всю эту сложность можно скрыть с помощью директив PIR:
.sub foo
.param int a
.param int b
.local int tmp
tmp = a + b
.return (tmp)
.end
Каждая из директив с префиксом " .
" расширяется до необходимого байт-кода Parrot, но не представляет напрямую какую-либо фундаментальную операцию Parrot.
Пример
[ редактировать ]Программа hello world в PIR
.sub hello :main
print "Hello world!\n"
.end
Если программа сохранена как hello.pir , ее можно скомпилировать и выполнить с помощью этой команды: parrot hello.pir