Building a compiler in JRuby

849 views
750 views

Published on

Building a Compiler in JRuby - Chris Umbel at Jan 24th 2012 PittJUG meeting showing how you can create a language using JRuby tools to parse the language an emit JVM bytecode.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
849
On SlideShare
0
From Embeds
0
Number of Embeds
31
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Building a compiler in JRuby

  1. 1. Building a Miserably Fun Compiler in JRuby. Chris Umbel @chrisumbel http://www.chrisumbel.comSunday, January 29, 12
  2. 2. Agenda Ruby/JRuby introduction Talk background Building a compilerSunday, January 29, 12
  3. 3. Ruby Dynamic, but strongly typed. Object-oriented metaprogrammable Has multiple implementations (MRI, IronRuby, Rubinius, JRuby) Has functional features (Higher-order functions, blocks)Sunday, January 29, 12
  4. 4. Ruby Examples OO Data StructuresSunday, January 29, 12
  5. 5. JRuby Highly compatible Ruby implementation Written in Java/runs on the JVM Can consume arbitrary Java libraries Favorable concurrency characteristics to CRuby (no GIL)Sunday, January 29, 12
  6. 6. JRuby Examples Java types Using .jars conventionsSunday, January 29, 12
  7. 7. Inspiration Ian Dees @undees JRubyConf 2011 JRuby, Not Just for Hard-Headed Pragmatists Anymore Author: Using JRuby: Bringing Ruby to JavaSunday, January 29, 12
  8. 8. JRubyConf Practical problem solving Customers, Customers, Customers! ROISunday, January 29, 12
  9. 9. Thnad Just enough of a fictional programming language to show how to write a compiler https://github.com/undees/thnad Sort of JavaScript-ey Allusion to the greatest of classical literatureSunday, January 29, 12
  10. 10. What We’ll Build Lisp-style S-expressions Pure JRuby Compiles to Java bytecodeSunday, January 29, 12
  11. 11. What We’ll Use JRuby Parslet Kaspar Shiess Parser in pure Ruby Bitescript Charles Nutter JVM bytecode emitter for JRubySunday, January 29, 12
  12. 12. What it wont’ do Conditionals Non-parametric locally scoped variables OO Provide Java library support, standard or otherwise.Sunday, January 29, 12
  13. 13. What It’ll Do Basic math Functions Standard output Suck!!!Sunday, January 29, 12
  14. 14. sucklangSunday, January 29, 12
  15. 15. Language Components Simple Atoms (identifiers; literal strings and integers) Lists Function callsSunday, January 29, 12
  16. 16. sucklang Code Sample (defun foo [x y] (+ x y)) (println "result is " (foo 6 9))Sunday, January 29, 12
  17. 17. Parts Parser Transmogrifier CompilerSunday, January 29, 12
  18. 18. Step 1 Parser Numbers Basic list Whitespace handlingSunday, January 29, 12
  19. 19. Step 2 Parser ExpressionsSunday, January 29, 12
  20. 20. Step 3 Parser Identifiers Atoms Lists in lists Operators are IdentifiersSunday, January 29, 12
  21. 21. Step 4 Parser StringsSunday, January 29, 12
  22. 22. Step 5 Parser VectorsSunday, January 29, 12
  23. 23. Step 6 Transmogrifier ASTSunday, January 29, 12
  24. 24. Step 7: STOP! javap - Java disassemblerSunday, January 29, 12
  25. 25. Step 8 bitescript exampleSunday, January 29, 12
  26. 26. Step 9 compiler java requires/imports emitting of simple typesSunday, January 29, 12
  27. 27. Step 10 emitting of functions + println defun callsSunday, January 29, 12
  28. 28. What It Did Parsed S-expressions into an AST Compiled AST to JVM bytecode Sucked (a lot of assumptions)Sunday, January 29, 12
  29. 29. What We’ve Learned Parslet Bitescript JVM innardsSunday, January 29, 12
  30. 30. Thank you!Sunday, January 29, 12

×