Текущая виртуальная машина Perl 5 является стековой машиной. Он передает значения между операциями, сохраняя их в стеке. Операции загружают значения в стек, делают все, что им нужно, и помещают результат обратно в стек. С этим легко работать, но это медленно.
Чтобы сложить два числа, вам нужно выполнить три нажатия на стек и два всплытия. Хуже того, стек должен расти во время выполнения, а это означает выделение памяти именно тогда, когда вы не хотите выделять ее.
Таким образом, Parrot собирается нарушить сложившуюся традицию для виртуальных машин и использовать архитектуру регистров, более похожую на архитектуру реального аппаратного процессора. Это имеет еще одно преимущество. Мы можем использовать всю существующую литературу о том, как писать компиляторы и оптимизаторы для ЦП на основе регистров для нашего программного ЦП!
Parrot имеет специальные регистры для каждого типа: 32 регистра IV, 32 регистра NV, 32 регистра строки и 32 регистра PMC. В ассемблере Parrot они называются I1 … I32, N1 … N32, S1 … S32, P1 … P32 соответственно.
Теперь давайте посмотрим на некоторый ассемблер. Мы можем установить эти регистры с помощью оператора set:
set I1, 10 set N1, 3.1415 set S1, "Hello, Parrot"
Все операции Parrot имеют одинаковый формат: имя оператора, регистр назначения, а затем операнды.