Presentation is loading. Please wait.

Presentation is loading. Please wait.

Targeting Parrot Léon Brocard Fotango Ltd.

Similar presentations


Presentation on theme: "Targeting Parrot Léon Brocard Fotango Ltd."— Presentation transcript:

1 Targeting Parrot Léon Brocard Fotango Ltd.

2 Outline What is Parrot? Why target Parrot? Targeting Modifying Parrot

3 Targeting? public class Fib { static void Main() { int n = 24, a = 1, b = 1, f = 1, i = 3; while(i <= n) { puti(i); puts("\n"); f = a + b; a = b; b = f; i++; } set I0, 24 set I2, 1 set I3, 1 set I4, 1 set I5, 3 LBL1: gt I5, I0, LBL2 print I5 print "\n" add I4, I2, I3 set I2, I3 set I3, I4 set I1, I5 inc I5 branch LBL1 LBL2: end

5 Targeting consists of: Parsing the source language (Doing some data structure munging) Outputting assembler / machine code

6 Java Virtual Machine Two stage ( javac, java ) int x, y, z; x = 1; y = 1; z = x + y; iconst_1 istore_1 iconst_1 istore_2 iload_1 iload_2 iadd istore_3

7 Targeting Expression by expression Parrot does not have for, while Use branch instead

8 Parrot Virtual Machine Two stage ( assemble.pl, parrot ) a c c d c6c f 6f77 6c a c print “Hello world!\n” end

9 Parrot Virtual Machine (2) Two stage ( assemble.pl, parrot ) %./assemble.pl hello.pasm -o hello.pbc %./parrot hello.pbc Hello world! %

10 Main methods of targeting Output Parrot source code (.pasm) Output Parrot bytecode Output interpreter (BASIC) Output code (cola, jako) Hybrid

11 Parrot is dynamic Not only for dynamic languages, but also fairly dynamic itself Modify Parrot for your own use: Modify the virtual machine Modify the opcodes Modify the PMCs

12 Targeting Want to run your language under Parrot? Got an existing parser? Simply retarget your language at Parrot

13 Parrot is a register machine Mostly for speed: add I0, I1, I2 Also a stack machine, so if targeting a stack language, use the stack for ease of translation: restore I1 restore I2 add I0, I1, I2 save I0

14 Adding ops What was that about a stack machine? op iadd() { INTVAL x; INTVAL y; stack_pop(interpreter, interpreter->user_stack, &x, STACK_ENTRY_INT); stack_pop(interpreter, interpreter->user_stack, &y, STACK_ENTRY_INT); x = x + y; stack_push(interpreter, interpreter->user_stack, &x, STACK_ENTRY_INT, STACK_CLEANUP_NULL); goto NEXT(); }

15 Register allocation Use registers for speed Use graph colouring, du-chains for lexicals and symbolic temporaries Register spilling: use spill weights “Compilers: Principles, Techniques and Tools” by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman

16 Register allocation: imcc imcc: intermediate compiler for Parrot by Melvin Smith and Angel Faus handles register allocation and spillage (infinite number of typed temporaries or named lexicals) in the future: constant folding, expression evaluation, instruction selection, other optimisations…

17 Register allocation: imcc _MAIN: save "" set I0, 4 add I0, I0, 1 set I0, I0 print I0 print "\n" end ret.sub _MAIN.arg "".local int out $I0 = 4 $I1 = $I0 + 1 out = $I1 print out print "\n" end ret

18 Adding PMCs A little more involved (docs/vtables.pod) SchemePair PMC car, cdr and all that jazz Add ops which use the PMCs Caveat: tricky, underdocumented atm.

19 Calling Conventions PDD03: Parrot Calling Conventions Caller-save Important for exposing public subroutines Mostly ignoreable

20 Garbage collection Parrot has a GC system

21 Debugging Parrot debugger pdb Trace with the -t flag … or print statements

22 TODO ;-) Wait for Parrot to have more features, target some more languages at it and then finish these slides Ship parrot with your language? Type conversions / stack manipulations / PMC / control / subroutines / exceptions /

23 If you remember one thing… Computer languages can easily be targeted at Parrot

24 Thank you


Download ppt "Targeting Parrot Léon Brocard Fotango Ltd."

Similar presentations


Ads by Google