1 / 24

Targeting Parrot

Targeting Parrot. Léon Brocard Fotango Ltd. acme@astray.com. Outline. What is Parrot? Why target Parrot? Targeting Modifying Parrot. Targeting?. set I0, 24 set I2, 1 set I3, 1 set I4, 1 set I5, 3 LBL1: gt I5, I0, LBL2 print I5 print &quot;<br>&quot; add I4, I2, I3

berke
Télécharger la présentation

Targeting Parrot

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Targeting Parrot Léon Brocard Fotango Ltd. acme@astray.com

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

  3. Targeting? 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 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++; } } }

  4. Parrot is… • Virtual machine for dynamic languages • Register-based (I, N, S, P) • Portable (bytecode-based) • High-level • Fast • Moving target

  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) print “Hello world!\n” end 0000000 0004 0000 0000 4018 0080 0000 0010 0000 0000020 55a1 0131 524c 5045 0000 0000 002c 0000 0000040 0001 0000 0073 0000 0020 0000 0000 0000 0000060 0000 0000 0001 0000 000d 0000 6548 6c6c 0000100 206f 6f77 6c72 2164 000a 0000 000c 0000 0000120 0018 0000 0000 0000 0000 0000 0000134

  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 I1restore I2add I0, I1, I2save 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 .sub _MAIN .arg "" .local int out $I0 = 4 $I1 = $I0 + 1 out = $I1 print out print "\n" end ret _MAIN: save "" set I0, 4 add I0, I0, 1 set I0, I0 print I0 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

More Related