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
3
270
Rubinius X
Presented at WindyCityRails 2014
brixen
September 04, 2014
Tweet
Share
More Decks by brixen
See All by brixen
Stop making mud pies!
brixen
0
110
Papers We Love - Immix mark-region garbage collector
brixen
2
730
An Ensemble of Programming Languages: How to Build a Platform for Collaboration
brixen
0
230
Types As Premature Optimization
brixen
2
540
Code Is What Code Does
brixen
0
410
Augmented Ruby: The Rubinius Language Platform
brixen
2
130
The Future of Ruby
brixen
1
330
Rubinius, and the Future of Ruby
brixen
2
250
So you want to design a programming language
brixen
1
140
Other Decks in Technology
See All in Technology
【CEDEC2025】LLMを活用したゲーム開発支援と、生成AIの利活用を進める組織的な取り組み
cygames
PRO
1
2.2k
生成AIによる情報システムへのインパクト
taka_aki
1
230
モバイルゲームの開発を支える基盤の歩み ~再現性のある開発ラインを量産する秘訣~
qualiarts
0
1k
Bet "Bet AI" - Accelerating Our AI Journey #BetAIDay
layerx
PRO
4
1.2k
クマ×共生 HACKATHON - 熊対策を『特別な行動」から「生活の一部」に -
pharaohkj
0
270
反脆弱性(アンチフラジャイル)とデータ基盤構築
cuebic9bic
2
140
【Λ(らむだ)】最近のアプデ情報 / RPALT20250729
lambda
0
210
SAE J1939シミュレーション環境構築
daikiokazaki
1
210
風が吹けばWHOISが使えなくなる~なぜWHOIS・RDAPはサーバー証明書のメール認証に使えなくなったのか~
orangemorishita
15
5k
AI時代の知識創造 ─GeminiとSECIモデルで読み解く “暗黙知”と創造の境界線
nyagasan
0
180
人に寄り添うAIエージェントとアーキテクチャ #BetAIDay
layerx
PRO
8
1.6k
AWS表彰プログラムとキャリアについて
naoki_0531
1
150
Featured
See All Featured
Become a Pro
speakerdeck
PRO
29
5.5k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
KATA
mclloyd
31
14k
Why Our Code Smells
bkeepers
PRO
337
57k
Typedesign – Prime Four
hannesfritz
42
2.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
530
What's in a price? How to price your products and services
michaelherold
246
12k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.4k
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