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, and the Future of Ruby
Search
brixen
March 01, 2013
Technology
260
2
Share
Rubinius, and the Future of Ruby
Presentation at Elemental
http://www.elementaltechnologies.com/
on 1 March 2013.
brixen
March 01, 2013
More Decks by brixen
See All by brixen
Stop making mud pies!
brixen
0
120
Papers We Love - Immix mark-region garbage collector
brixen
2
760
An Ensemble of Programming Languages: How to Build a Platform for Collaboration
brixen
0
250
Types As Premature Optimization
brixen
2
570
Rubinius X
brixen
3
290
Code Is What Code Does
brixen
0
420
Augmented Ruby: The Rubinius Language Platform
brixen
2
150
The Future of Ruby
brixen
1
340
So you want to design a programming language
brixen
1
170
Other Decks in Technology
See All in Technology
非同期・イベント駆動処理の分散トレーシングの繋げ方
ichikawaken
1
250
CloudFrontのHost Header転送設定でパケットの中身はどう変わるのか?
nagisa53
1
230
CREがSLOを握ると 何が変わるのか
nekomaho
0
320
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
kaomi_wombat
0
280
PostgreSQL 18のNOT ENFORCEDな制約とDEFERRABLEの関係
yahonda
0
150
遊びで始めたNew Relic MCP、気づいたらChatOpsなオブザーバビリティボットができてました/From New Relic MCP to a ChatOps Observability Bot
aeonpeople
1
130
MCPで決済に楽にする
mu7889yoon
0
160
自分をひらくと次のチャレンジの敷居が下がる
sudoakiy
3
1k
FastMCP OAuth Proxy with Cognito
hironobuiga
3
230
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
5
1.3k
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
200
Zephyr(RTOS)でARMとRISC-Vのコア間通信をしてみた
iotengineer22
0
110
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
How to train your dragon (web standard)
notwaldorf
97
6.6k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
How GitHub (no longer) Works
holman
316
150k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Believing is Seeing
oripsolob
1
100
Ethics towards AI in product and experience design
skipperchong
2
240
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
440
Raft: Consensus for Rubyists
vanstee
141
7.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Being A Developer After 40
akosma
91
590k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
210
Transcript
Rubinius, and the Future of Ruby ELEMENTAL 1 MARCH 2013
Brian Shirai Rubinius Developer
None
Questions Tools for thought
OSS/FOSS/CC Community of contributions
Has Ruby reached its potential?
If yes, Where do we go from here?
If no, What should we be working on?
Celluloid Actor-based concurrent object framework
None
Should Matz be the only one making decisions about Ruby?
If yes, Why?
Concurrency Performance Security Integration API
Refinements Action at a distance
Libraries Frameworks Applications
"active_model".camelize # => "ActiveModel"
Stratification Foundation vs Roof
Composition Joining together
Coordinaton Working together
class A include Enumerable def each # ... end end
a.each { |x| b x }
If no, Who?
RubyConf 12 Toward a Design for Ruby
Have you tried Rubinius?
If yes, How was your experience?
If no, When?
None
Rubinius A platform for languages
28c3 The Science of Insecurity
Flexibility Dynamically typed system language
None
None
Ruby In Ruby
class Array def [] Ruby.primitive :array_aref raise PrimitiveFailure, "Array#[] primitive
failed" end end
class Array : public Object { private: Fixnum* total_; //
slot Tuple* tuple_; // slot public: attr_accessor(total, Fixnum); attr_accessor(tuple, Tuple); }
class Array : public Object { // Ruby.primitive :array_aref Object*
aref(STATE, Fixnum* idx); }
instruction send_method(literal) [ receiver -- value ] => send flush_ip();
Object* recv = stack_top(); InlineCache* cache = reinterpret_cast<InlineCache*>(literal); Arguments args(cache->name, recv, cNil, 0, 0); Object* ret = cache->execute(state, call_frame, args); (void)stack_pop(); CHECK_AND_PUSH(ret); end
class OneArgument { public: static bool call(STATE, VMMethod* vmm, StackVariables*
scope, Arguments& args) { if(args.total() != 1) return false; scope->set_local(0, args.get_argument(0)); return true; } };
Reliability Earning trust
$ time make test test succeeded real!0m1.232s user!0m0.857s sys! 0m0.166s
$ time make test test succeeded real!0m4.868s user!0m0.937s sys! 0m0.375s
$ make test ... PASS all 951 tests
RubySpec Executable specification of Ruby
23122 examples 158698 expectations
Performance Objects and execution
Memory Generational garbage collection
Method JIT Profile & type-feedback driven
Concurrency Parallelism with no global lock
Tools Understanding execution
Debugger Built-in API and CLI
Profiler Visibility of un-optimized code
Memory Analysis Allocation tracking and histograms
Agent Runtime inspection & control
Innovation Testing the limits
Mirrors Design principles for meta facilities
"name".byte_to_character_index(2)
Capabilities Robust composition for access & concurrency control
a.b(c)
atomy-lang.org fancy-lang.org rubini.us/projects
github.com/rubinius github.com/brixen @brixen
Thank you