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