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
2
250
Rubinius, and the Future of Ruby
Presentation at Elemental
http://www.elementaltechnologies.com/
on 1 March 2013.
brixen
March 01, 2013
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
550
Rubinius X
brixen
3
270
Code Is What Code Does
brixen
0
410
Augmented Ruby: The Rubinius Language Platform
brixen
2
130
The Future of Ruby
brixen
1
330
So you want to design a programming language
brixen
1
140
Other Decks in Technology
See All in Technology
KAGのLT会 #8 - 東京リージョンでGAしたAmazon Q in QuickSightを使って、報告用の資料を作ってみた
0air
0
200
GA technologiesでのAI-Readyの取り組み@DataOps Night
yuto16
0
260
Findy Team+のSOC2取得までの道のり
rvirus0817
0
320
AI時代だからこそ考える、僕らが本当につくりたいスクラムチーム / A Scrum Team we really want to create in this AI era
takaking22
6
3.2k
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
5.4k
"複雑なデータ処理 × 静的サイト" を両立させる、楽をするRails運用 / A low-effort Rails workflow that combines “Complex Data Processing × Static Sites”
hogelog
3
1.9k
いまさら聞けない ABテスト入門
skmr2348
1
200
AI Agentと MCP Serverで実現する iOSアプリの 自動テスト作成の効率化
spiderplus_cb
0
480
許しとアジャイル
jnuank
1
120
Goに育てられ開発者向けセキュリティ事業を立ち上げた僕が今向き合う、AI × セキュリティの最前線 / Go Conference 2025
flatt_security
0
340
Optuna DashboardにおけるPLaMo2連携機能の紹介 / PFN LLM セミナー
pfn
PRO
1
860
VCC 2025 Write-up
bata_24
0
180
Featured
See All Featured
Facilitating Awesome Meetings
lara
56
6.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
The Cost Of JavaScript in 2023
addyosmani
53
9k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
19
1.2k
Building Applications with DynamoDB
mza
96
6.6k
Scaling GitHub
holman
463
140k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
What's in a price? How to price your products and services
michaelherold
246
12k
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