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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Syed Faraaz Ahmad
December 16, 2023
0
99
Ruby without the Syntax
Syed Faraaz Ahmad
December 16, 2023
Tweet
Share
More Decks by Syed Faraaz Ahmad
See All by Syed Faraaz Ahmad
BYOJ: Build your Own JIT (RubyConfTH 2023)
faraazahmad
0
66
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
0
220
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
200
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.8k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
730
Typedesign – Prime Four
hannesfritz
42
2.9k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.5k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
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