Промежуточное представление попугая - Parrot intermediate representation

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 в ПИР

 .sub hello :main
  print "Hello world!\n"
 .end

Если программа сохраняется как hello.pir , он может быть составлен и выполнен с помощью следующей команды: parrot hello.pir

внешняя ссылка