SlideShare a Scribd company logo
1 of 30
Download to read offline
Building a Miserably
                Fun Compiler in
                     JRuby.
                                Chris Umbel

                                @chrisumbel

                         http://www.chrisumbel.com


Sunday, January 29, 12
Agenda


                         Ruby/JRuby introduction

                         Talk background

                         Building a compiler




Sunday, January 29, 12
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
Ruby Examples



                         OO

                         Data Structures




Sunday, January 29, 12
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
JRuby Examples


                         Java types

                         Using .jars

                         conventions




Sunday, January 29, 12
Inspiration

                         Ian Dees @undees

                         JRubyConf 2011

                         JRuby, Not Just for Hard-Headed
                         Pragmatists Anymore

                         Author: Using JRuby: Bringing Ruby to
                         Java



Sunday, January 29, 12
JRubyConf


                         Practical problem solving

                         Customers, Customers, Customers!

                         ROI




Sunday, January 29, 12
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
                         literature


Sunday, January 29, 12
What We’ll Build


                         Lisp-style S-expressions

                         Pure JRuby

                         Compiles to Java bytecode




Sunday, January 29, 12
What We’ll Use
                         JRuby

                         Parslet

                           Kaspar Shiess

                           Parser in pure Ruby

                         Bitescript

                           Charles Nutter

                           JVM bytecode emitter for JRuby
Sunday, January 29, 12
What it wont’ do

                         Conditionals

                         Non-parametric locally scoped
                         variables

                         OO

                         Provide Java library support,
                         standard or otherwise.



Sunday, January 29, 12
What It’ll Do

                         Basic math

                         Functions

                         Standard output

                         Suck!!!




Sunday, January 29, 12
sucklang




Sunday, January 29, 12
Language Components


                         Simple Atoms (identifiers; literal
                         strings and integers)

                         Lists

                         Function calls




Sunday, January 29, 12
sucklang Code Sample




                (defun foo [x y]
                  (+ x y))
                (println "result is " (foo 6 9))




Sunday, January 29, 12
Parts


                         Parser

                         Transmogrifier

                         Compiler




Sunday, January 29, 12
Step 1

                         Parser

                           Numbers

                           Basic list

                           Whitespace handling




Sunday, January 29, 12
Step 2



                         Parser

                           Expressions




Sunday, January 29, 12
Step 3

                         Parser

                           Identifiers

                           Atoms

                           Lists in lists

                           Operators are Identifiers



Sunday, January 29, 12
Step 4



                         Parser

                           Strings




Sunday, January 29, 12
Step 5



                         Parser

                           Vectors




Sunday, January 29, 12
Step 6



                         Transmogrifier

                           AST




Sunday, January 29, 12
Step 7: STOP!



                         javap - Java disassembler




Sunday, January 29, 12
Step 8



                         bitescript example




Sunday, January 29, 12
Step 9


                         compiler

                           java requires/imports

                           emitting of simple types




Sunday, January 29, 12
Step 10

                         emitting of functions

                           +

                           println

                           defun

                           calls



Sunday, January 29, 12
What It Did


                         Parsed S-expressions into an AST

                         Compiled AST to JVM bytecode

                         Sucked (a lot of assumptions)




Sunday, January 29, 12
What We’ve Learned


                         Parslet

                         Bitescript

                         JVM innards




Sunday, January 29, 12
Thank you!




Sunday, January 29, 12

More Related Content

Similar to Building a compiler in JRuby

Building Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript SpaghettiBuilding Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript SpaghettiJared Faris
 
D3 interactivity Linegraph basic example
D3 interactivity Linegraph basic exampleD3 interactivity Linegraph basic example
D3 interactivity Linegraph basic exampleAdam Pah
 
Building Scale Free Applications with Hadoop and Cascading
Building Scale Free Applications with Hadoop and CascadingBuilding Scale Free Applications with Hadoop and Cascading
Building Scale Free Applications with Hadoop and Cascadingcwensel
 
SAM SIG: Hadoop architecture, MapReduce patterns, and best practices with Cas...
SAM SIG: Hadoop architecture, MapReduce patterns, and best practices with Cas...SAM SIG: Hadoop architecture, MapReduce patterns, and best practices with Cas...
SAM SIG: Hadoop architecture, MapReduce patterns, and best practices with Cas...cwensel
 

Similar to Building a compiler in JRuby (8)

JRuby at Square
JRuby at SquareJRuby at Square
JRuby at Square
 
Function currying
Function curryingFunction currying
Function currying
 
Reef - ESUG2011
Reef  - ESUG2011Reef  - ESUG2011
Reef - ESUG2011
 
Test Driven Development - Caleb Tutty
Test Driven Development - Caleb TuttyTest Driven Development - Caleb Tutty
Test Driven Development - Caleb Tutty
 
Building Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript SpaghettiBuilding Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript Spaghetti
 
D3 interactivity Linegraph basic example
D3 interactivity Linegraph basic exampleD3 interactivity Linegraph basic example
D3 interactivity Linegraph basic example
 
Building Scale Free Applications with Hadoop and Cascading
Building Scale Free Applications with Hadoop and CascadingBuilding Scale Free Applications with Hadoop and Cascading
Building Scale Free Applications with Hadoop and Cascading
 
SAM SIG: Hadoop architecture, MapReduce patterns, and best practices with Cas...
SAM SIG: Hadoop architecture, MapReduce patterns, and best practices with Cas...SAM SIG: Hadoop architecture, MapReduce patterns, and best practices with Cas...
SAM SIG: Hadoop architecture, MapReduce patterns, and best practices with Cas...
 

Recently uploaded

#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 

Recently uploaded (20)

DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 

Building a compiler in JRuby

  • 1. Building a Miserably Fun Compiler in JRuby. Chris Umbel @chrisumbel http://www.chrisumbel.com Sunday, January 29, 12
  • 2. Agenda Ruby/JRuby introduction Talk background Building a compiler Sunday, January 29, 12
  • 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. Ruby Examples OO Data Structures Sunday, January 29, 12
  • 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. JRuby Examples Java types Using .jars conventions Sunday, January 29, 12
  • 7. Inspiration Ian Dees @undees JRubyConf 2011 JRuby, Not Just for Hard-Headed Pragmatists Anymore Author: Using JRuby: Bringing Ruby to Java Sunday, January 29, 12
  • 8. JRubyConf Practical problem solving Customers, Customers, Customers! ROI Sunday, January 29, 12
  • 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 literature Sunday, January 29, 12
  • 10. What We’ll Build Lisp-style S-expressions Pure JRuby Compiles to Java bytecode Sunday, January 29, 12
  • 11. What We’ll Use JRuby Parslet Kaspar Shiess Parser in pure Ruby Bitescript Charles Nutter JVM bytecode emitter for JRuby Sunday, January 29, 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. What It’ll Do Basic math Functions Standard output Suck!!! Sunday, January 29, 12
  • 15. Language Components Simple Atoms (identifiers; literal strings and integers) Lists Function calls Sunday, January 29, 12
  • 16. sucklang Code Sample (defun foo [x y] (+ x y)) (println "result is " (foo 6 9)) Sunday, January 29, 12
  • 17. Parts Parser Transmogrifier Compiler Sunday, January 29, 12
  • 18. Step 1 Parser Numbers Basic list Whitespace handling Sunday, January 29, 12
  • 19. Step 2 Parser Expressions Sunday, January 29, 12
  • 20. Step 3 Parser Identifiers Atoms Lists in lists Operators are Identifiers Sunday, January 29, 12
  • 21. Step 4 Parser Strings Sunday, January 29, 12
  • 22. Step 5 Parser Vectors Sunday, January 29, 12
  • 23. Step 6 Transmogrifier AST Sunday, January 29, 12
  • 24. Step 7: STOP! javap - Java disassembler Sunday, January 29, 12
  • 25. Step 8 bitescript example Sunday, January 29, 12
  • 26. Step 9 compiler java requires/imports emitting of simple types Sunday, January 29, 12
  • 27. Step 10 emitting of functions + println defun calls Sunday, January 29, 12
  • 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. What We’ve Learned Parslet Bitescript JVM innards Sunday, January 29, 12