Literal constants in PIR are the same as constants in PASM. Integers and floating-point numbers are numeric literals and strings are enclosed in quotes. PIR strings use the same escape sequences as PASM.
PIR code has a variety of ways to store values while you work with them. The most basic way is to use Parrot registers directly. PASM register names always start with a single character that shows whether it is an integer, numeric, string, or PMC register, and end with the number of the register (between 0 and 31):
S0 = "Hello, Polly.\n" print S0
When you work directly with Parrot registers, you can only have 32 registers of any one type at a time. If you have more than that, you have to start shuffling stored values on and off the user stack. You also have to manually track when it’s safe to reuse a register. This kind of low-level access to the Parrot registers is handy when you need it, but it’s pretty unwieldy for large sections of code.
PIR provides an easier way to work with Parrot registers. The
temporary register variables are named like the PASM
registers—with a single character for the type of register and
a number—but they start with a
set $S42, "Hello, Polly.\n" print $S42
The most obvious difference between Parrot registers and temporary register variables is that you have an unlimited number of temporaries. Parrot handles register allocation for you. It keeps track of how long a value in a Parrot ...