building a compiler in jruby

Post on 19-Jan-2015

606 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.

TRANSCRIPT

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

RubyDynamic, 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

ThnadJust 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 UseJRuby

Parslet

Kaspar Shiess

Parser in pure Ruby

Bitescript

Charles Nutter

JVM bytecode emitter for JRubySunday, 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

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

sucklang Code Sample

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

top related