Pegarus & Poison Rubinius VM as a Multilanguage Platform - - PowerPoint PPT Presentation

pegarus poison
SMART_READER_LITE
LIVE PREVIEW

Pegarus & Poison Rubinius VM as a Multilanguage Platform - - PowerPoint PPT Presentation

Pegarus & Poison Rubinius VM as a Multilanguage Platform Thursday, July 29, 2010 Brian Ford brixen on {twitter IRC gmail} Thursday, July 29, 2010 Thursday, July 29, 2010 Thursday, July 29, 2010 Thursday, July 29, 2010 discussion rant


slide-1
SLIDE 1

Pegarus & Poison

Rubinius VM as a Multilanguage Platform

Thursday, July 29, 2010

slide-2
SLIDE 2

Brian Ford

brixen on {twitter IRC gmail}

Thursday, July 29, 2010

slide-3
SLIDE 3

Thursday, July 29, 2010

slide-4
SLIDE 4

Thursday, July 29, 2010

slide-5
SLIDE 5

Thursday, July 29, 2010

slide-6
SLIDE 6

discussion rant tutorial Q&A interaction

Thursday, July 29, 2010

slide-7
SLIDE 7

fundamentally, we solve problems

Thursday, July 29, 2010

slide-8
SLIDE 8

Thursday, July 29, 2010

slide-9
SLIDE 9

how?

Thursday, July 29, 2010

slide-10
SLIDE 10

We spend most of our time talking about “How”

dynamic vs static functional vs object-oriented threads vs events Rails vs Django Ruby vs Python vs Perl vs PHP C++ vs Java SQL vs NoSQL

Thursday, July 29, 2010

slide-11
SLIDE 11

what?

Thursday, July 29, 2010

slide-12
SLIDE 12

We spend a lot less talking about “What”

should we build Facebook? Twitter? Google? Windows?

Thursday, July 29, 2010

slide-13
SLIDE 13

why?

Thursday, July 29, 2010

slide-14
SLIDE 14

We spend the least time on the most important question...

Why am I doing this?

Thursday, July 29, 2010

slide-15
SLIDE 15

because

Thursday, July 29, 2010

slide-16
SLIDE 16

do as I say, not as I do

Thursday, July 29, 2010

slide-17
SLIDE 17

values morals emotions attachments

Thursday, July 29, 2010

slide-18
SLIDE 18

right vs wrong

Thursday, July 29, 2010

slide-19
SLIDE 19

context

Thursday, July 29, 2010

slide-20
SLIDE 20

$ ruby bt.rb bt.rb:7:in `bar': boo (RuntimeError) from bt.rb:2:in `foo' from bt.rb:7:in `bar' from bt.rb:10

Thursday, July 29, 2010

slide-21
SLIDE 21

$ rbx bt.rb An exception occurred running bt.rb boo (RuntimeError) Backtrace: Object#bar {} at bt.rb:7 Object#foo at bt.rb:2 Object#bar at bt.rb:7 main.__script__ at bt.rb:10 Rubinius::CodeLoader#load_script at kernel/delta/codeloader.rb:67 Rubinius::CodeLoader.load_script at kernel/delta/codeloader.rb:91 Rubinius::Loader#script at kernel/loader.rb:429 Rubinius::Loader#main at kernel/loader.rb:521 Rubinius::Loader.main at kernel/loader.rb:558 Object#__script__ at kernel/loader.rb:570

Thursday, July 29, 2010

slide-22
SLIDE 22

cargo culting is a failure to understand “why?”

Thursday, July 29, 2010

slide-23
SLIDE 23

we are hard-wired for mimicry

Thursday, July 29, 2010

slide-24
SLIDE 24

mirror neurons

Thursday, July 29, 2010

slide-25
SLIDE 25

there is no place in our programming languages for rationale

Thursday, July 29, 2010

slide-26
SLIDE 26

so, you want to implement a programming language

Thursday, July 29, 2010

slide-27
SLIDE 27

handful of VMs to choose from...

Thursday, July 29, 2010

slide-28
SLIDE 28

handful of VMs to choose from... and, they all suck

Thursday, July 29, 2010

slide-29
SLIDE 29

primary language primary data types

Thursday, July 29, 2010

slide-30
SLIDE 30

Rubinius

An implementation of Ruby

github.com/evanphx/rubinius

Thursday, July 29, 2010

slide-31
SLIDE 31

In ~3.5 years...

virtual machine garbage collector bytecode compiler Ruby core library primitives system JIT compiler RubySpecs

Thursday, July 29, 2010

slide-32
SLIDE 32

In ~3.5 years...

virtual machines garbage collectors bytecode compilers Ruby core library primitives systems JIT compilers

  • f RubySpecs

2 1.75 3 1 2 2 tons

Thursday, July 29, 2010

slide-33
SLIDE 33

rewrite lazily

Thursday, July 29, 2010

slide-34
SLIDE 34

rewrite lazily... but, for everyone’s sake, rewrite!

Thursday, July 29, 2010

slide-35
SLIDE 35
  • C++ virtual machine
  • generational garbage collector
  • Ruby bytecode compiler
  • Ruby core library
  • native threads (GIL)
  • Fibers (experimental)
  • LLVM-base JIT compiler

Thursday, July 29, 2010

slide-36
SLIDE 36

Pegarus

An implementation of LPEG

github.com/brixen/pegarus

Thursday, July 29, 2010

slide-37
SLIDE 37

A Text Pattern-Matching Tool based on Parsing Expression Grammars

www.inf.puc-rio.br/~roberto/docs/peg.pdf www.inf.puc-rio.br/~roberto/lpeg/lpeg.html

Thursday, July 29, 2010

slide-38
SLIDE 38

disadvantages of regexes

ad hoc extensions no formal semantics unpredictable complexity difficult optimizations

Thursday, July 29, 2010

slide-39
SLIDE 39

advantages of a parsing machine

fairly simple formal semantics

  • ptimizations

Thursday, July 29, 2010

slide-40
SLIDE 40

Thursday, July 29, 2010

slide-41
SLIDE 41

/./

Thursday, July 29, 2010

slide-42
SLIDE 42

/a/

Thursday, July 29, 2010

slide-43
SLIDE 43

/.a/

Thursday, July 29, 2010

slide-44
SLIDE 44

Thursday, July 29, 2010

slide-45
SLIDE 45

Thursday, July 29, 2010

slide-46
SLIDE 46

Thursday, July 29, 2010

slide-47
SLIDE 47

Thursday, July 29, 2010

slide-48
SLIDE 48

Thursday, July 29, 2010

slide-49
SLIDE 49

Thursday, July 29, 2010

slide-50
SLIDE 50

Thursday, July 29, 2010

slide-51
SLIDE 51

Thursday, July 29, 2010

slide-52
SLIDE 52

Thursday, July 29, 2010

slide-53
SLIDE 53

Thursday, July 29, 2010

slide-54
SLIDE 54

Thursday, July 29, 2010

slide-55
SLIDE 55

Thursday, July 29, 2010

slide-56
SLIDE 56

Thursday, July 29, 2010

slide-57
SLIDE 57

Thursday, July 29, 2010

slide-58
SLIDE 58

Thursday, July 29, 2010

slide-59
SLIDE 59

Thursday, July 29, 2010

slide-60
SLIDE 60

Thursday, July 29, 2010

slide-61
SLIDE 61

Thursday, July 29, 2010

slide-62
SLIDE 62

Thursday, July 29, 2010

slide-63
SLIDE 63

Poison

An interpretation of Potion

github.com/brixen/poison

Thursday, July 29, 2010

slide-64
SLIDE 64

Potion syntax*

* examples from _why’s docs

Thursday, July 29, 2010

slide-65
SLIDE 65

Potion syntax*

* examples from _why’s docs

Thursday, July 29, 2010

slide-66
SLIDE 66

Potion syntax*

* examples from _why’s docs

Thursday, July 29, 2010

slide-67
SLIDE 67

Potion syntax*

* examples from _why’s docs

Thursday, July 29, 2010

slide-68
SLIDE 68

Potion syntax*

* examples from _why’s docs

Thursday, July 29, 2010

slide-69
SLIDE 69

Potion syntax*

* examples from _why’s docs

Thursday, July 29, 2010

slide-70
SLIDE 70

$ cat test.pn "hello" print

Thursday, July 29, 2010

slide-71
SLIDE 71

$ bin/poison test.pn Script @statements: \ Statements @statements: \ Expression @expression: \ Value @value: \ String @value: "hello" Message @name: "print"

Thursday, July 29, 2010

slide-72
SLIDE 72

Some missing parts

exceptions method arities variadic methods expression grouping singleton methods class methods

Thursday, July 29, 2010

slide-73
SLIDE 73

Rubinius

rbx compile --help

Thursday, July 29, 2010

slide-74
SLIDE 74

$ rbx compile -S -e 'a = 1' [:script, [:lasgn, :a, [:lit, 1]]]

Thursday, July 29, 2010

slide-75
SLIDE 75

$ rbx compile -A -e 'a = 1' Script @name: __script__ @file: "(snippet)" @body: \ LocalVariableAssignment @line: 1 @name: a @variable: nil @value: \ FixnumLiteral @line: 1 @value: 1

Thursday, July 29, 2010

slide-76
SLIDE 76

$ rbx compile -B -e 'a = 1' ============= :__script__ ============== Arguments: 0 required, 0 total Locals: 1: a Stack size: 2 Lines to IP: 1: 0-5 0000: meta_push_1 0001: set_local 0 # a 0003: pop 0004: push_true 0005: ret

  • Thursday, July 29, 2010
slide-77
SLIDE 77

$ rbx compile -B -e 'def foo(a) a + 1 end; foo 5' ============= :__script__ ============== Arguments: 0 required, 0 total Locals: 0 Stack size: 5 Lines to IP: 1: 0-23 0000: push_rubinius 0001: push_literal :foo 0003: push_literal #<Rubinius::CompiledMethod foo file=(snippet)> 0005: push_scope 0006: push_variables 0007: send_stack :method_visibility, 0 0010: send_stack :add_defn_method, 4 0013: pop 0014: push_self 0015: push_int 5 0017: allow_private 0018: send_stack :foo, 1 0021: pop 0022: push_true 0023: ret

  • ================= :foo =================

Arguments: 1 required, 1 total Locals: 1: a Stack size: 3 Lines to IP: 1: 0-5 0000: push_local 0 # a 0002: meta_push_1 0003: meta_send_op_plus :+ 0005: ret

  • Thursday, July 29, 2010
slide-78
SLIDE 78

$ rbx compile -B -N foo -e 'def foo(a) a + 1 end; foo 5' ================= :foo ================= Arguments: 1 required, 1 total Locals: 1: a Stack size: 3 Lines to IP: 1: 0-5 0000: push_local 0 # a 0002: meta_push_1 0003: meta_send_op_plus :+ 0005: ret

  • Thursday, July 29, 2010
slide-79
SLIDE 79

Thank you

Thursday, July 29, 2010

slide-80
SLIDE 80

[3] lwn.net/images/conf/ks-jls-09/matz2.jpg [7] www.thadguy.com/wp-content/uploads/2007/07/modal-logic-can-solve-all-problems.png [9] blog.tmcnet.com/blog/tom-keating/images/chow-hound-what-no-gravy.jpg [10] www.toothpastefordinner.com/030910/what-did-you-have-for-breakfast.gif [11] spamusement.com/gfx/17.gif [16] pyeuler.wdfiles.com/local--files/start/functional-programming-joke.png [21] student.biology.arizona.edu/honors2007/group11/monkeysee.jpg

Image Credits

Thursday, July 29, 2010