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
Rubinius X
Search
brixen
September 04, 2014
Technology
310
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubinius X
Presented at WindyCityRails 2014
brixen
September 04, 2014
More Decks by brixen
See All by brixen
Stop making mud pies!
brixen
0
130
Papers We Love - Immix mark-region garbage collector
brixen
2
770
An Ensemble of Programming Languages: How to Build a Platform for Collaboration
brixen
0
300
Types As Premature Optimization
brixen
2
600
Code Is What Code Does
brixen
0
430
Augmented Ruby: The Rubinius Language Platform
brixen
2
170
The Future of Ruby
brixen
1
350
Rubinius, and the Future of Ruby
brixen
2
280
So you want to design a programming language
brixen
1
180
Other Decks in Technology
See All in Technology
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
What's new in Go 1.27?
ciarana
0
240
Model Studio CLI × Token Plan
maigo999
0
190
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
980
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
0
600
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
630
Reference-Free Image Quality Assessment for Virtual Try-On via Human Feedback
zozotech
PRO
0
600
メルカリのグローバルアプリで挑んだ AlloyDB 運用と課題解決の実践記
hatappi
0
250
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
130
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.4k
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
5
1.9k
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
240
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
270
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
480
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Abbi's Birthday
coloredviolet
3
9.4k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
540
Into the Great Unknown - MozCon
thekraken
41
2.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
30 Presentation Tips
portentint
PRO
1
370
We Are The Robots
honzajavorek
0
300
Building the Perfect Custom Keyboard
takai
2
840
Site-Speed That Sticks
csswizardry
13
1.4k
How to Talk to Developers About Accessibility
jct
2
520
Transcript
Rubinius X @brixen
Good morning!
None
None
None
None
None
"You can't have your cake and eat it, too"
Professional possibility finders
improveffect.com
Yes, and...
We <3 Ruby
None
None
I'd rather be...
None
What is the biggest risk to Ruby?
Ruby is stuck in the past
Why isn't Ruby the right tool?
Rubinius is Ruby
Rubinius is Ruby ~2.1 and 1.8.7
Rubinius X is Ruby 10
Ruby 2.1 is really
Ruby 2.1 is really, really
Ruby 2.1 is really, really, really
Ruby 2.1 is really, really, really, really
Ruby 2.1 is really, really, really, really legacy Ruby
Rubinius X is Rubinius
Network 1
Network 1 Performance 2
Network 1 Performance 2 Experience 3
Network 1 Performance 2 Experience 3 Context 4
Network 1 Socket • Concurrency • String
None
None
None
None
None
None
None
! require "socket"!
None
bit.ly/RubyHTTPClients
Go Node.js Elixir
Can we have networks?
Yes, and we can have one that just works
Rubinius has no global interpreter lock
Threads are fine
Locks are the problem
Shared mutable state
HAMT Hash Array Mapped Trie
HAMT ReTrieval
1 2 3 #hash value 12
1 ... 3 #hash value 14 4 5
Can we have simple data structures?
Yes, and we can have useful concurrent ones
String and Symbol
! irb> obj.method "to_s"! => #<Method: Object(Kernel)#to_s>!
! irb> obj.method :to_s! => #<Method: Object(Kernel)#to_s>!
irb> "to_s" == :to_s ! => false
irb> :to_s == "to_s"! => false
None
HashWithIndifferentAccess
Erb • HAML • Slim • Moustache
JSON • YAML • XML/HTML
Strings are immutable
HashWithIndifferentAccess
Hash
Performance 2
Fences make good neighbors
Fences make poor friends
Compilation is usually lossy
def add(a, b)! c = a + b! end
push_local 0! # a! push_local 1 ! # b! send
:+, 1! set_local 2! ! # c
add r1, r2, r3! # ^a ^b ^c! set_local r3,
2
Can we have stack bytecode?
Yes, and we can have register bytecode
assert_gte r1, r2, 0! add r1, r2, r3! # ^a
^b ^c! set_local r3, 2
and we can have assertion bytecode
record r1, r2! add r1, r2, r3! # ^a ^b
^c! set_local r3, 2
and we can have instrumentation bytecode
PEG
LPEG
and we can have parser bytecode
and we can have system bytecode
Experience 3
Run coverage in production
Smalltalk
def add(a, b)! a + b! end
Can we have file system support?
Yes, and we can have a dynamic code database
Rubinius::Console
Context 4
! puts "Hello, Chicago!"!
! "Hello, Chicago!".puts!
module Kernel! def puts(*args)! # ...! end! ! module_function :puts!
end
! puts "Hello, Chicago!"!
fun puts(*args)! # ...! end
module Kernel! def puts(*args)! # ...! end! ! module_function :puts!
end
fun puts(*args)! # ...! end
Can we have objects?
Yes, and we can have functions
destroyallsoftware.com
None
fun add(a, b)! a + b! end
fun add(a: int, b: int)! a + b! end
load_int 0, r1! load_int 1, r2! add r1, r2, r3!
# ^a ^b ^c! store_int r3, 2
Can we have dynamic types?
Yes, and we can have static types
(gradually)
Clay vs concrete
CLIs
parsers JSON • YAML • XML/HTML
HTTP parsers
Garbage collectors
Rubinius X is Rubinius
Rubinius X
Rubinius X 2.1
Source-to-source compiler
Try Rubinius github.com/rubinius/rubinius
# Gemfile! platforms :mri do! gem "ruby-debug"! end!
$ bundle update
$ bundle exec puma
@brixen
Thank you!
• http://scienceblogs.com/startswithabang/2011/11/18/the-new-opera- faster-than-ligh/ • http://www.todayinsci.com/Books/MechApp/chap23/page36.htm • http://www.urgentevoke.com/profiles/blogs/a-new-ecosystem-of- information • https://www.destroyallsoftware.com/talks/boundaries
• http://www.cleanposts.com/index.php/Win311file • https://bit.ly/RubyHTTPClients • http://www.amusingplanet.com/2009/03/impossible-illusions-made- possible.html Credits