Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby without the Syntax
Search
Syed Faraaz Ahmad
December 16, 2023
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ruby without the Syntax
Syed Faraaz Ahmad
December 16, 2023
More Decks by Syed Faraaz Ahmad
See All by Syed Faraaz Ahmad
BYOJ: Build your Own JIT (RubyConfTH 2023)
faraazahmad
0
100
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Navigating Weather and Climate Data
rabernat
0
510
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Paper Plane
katiecoart
PRO
2
53k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Rails Girls Zürich Keynote
gr2m
96
14k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
ruby without the syntax
Faraaz Ahmad Twitter: @Faraaz98 Github: faraazahmad
interpreted? / compiled?
Y E S
Compiled, then interpreted 1 + 2 putobject 1 putobject 2
opt_plus leave
Yet Another Virtual Machine a.k.a YARV putobject 1 putobject 2
opt_plus leave YARV 010101010101 100001010101 001010101010 101000010101 010100001011
W.W.Y.D. What Would YARV Do?
github.com/ruby/ruby
Ruby on Cocaine…
Ruby C API
Ruby: def foo; end YARV: definemethod foo C API: rb_define_global_function(
"foo", my_method, argc );
class.c
Top level methods are stored in the Kernel module >
puts 25 25 => nil > Kernel.puts 25 25 => nil
Top level methods are stored in the Kernel module >
def foo = 420 => :foo > Kernel.private_methods => [..., :foo, ...]
None
PseudoRuby Examples
Init the VM
Sum of 2 numbers
Sum of 2 numbers
Area of circle
Area of circle
Define module and class
You can do all of it (I think) rb_require(...); rb_load(...);
rb_raise( rb_eRuntimeError, "Error code %d", 404 ); VALUE gv; rb_gv_set("$x", gv); gv = rb_gv_get("$x"); iv = rb_iv_get(obj, "@x");
Comparison
Ship your Ruby program as a single binary
Resources http://silverhammermba.github.io/emberb/c/ http://github.com/faraazahmad/pseudoruby
But why?
But why not?
None
None
None
Mess-around driven development
Mess-around driven development
Mess-around be nice. have fun.
Thank you