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
Matz - Be a language designer
Search
Daniel Lv
November 17, 2012
Programming
9
1k
Matz - Be a language designer
Matz先生在RubyConfChina2012上的主题分享PPT。
Daniel Lv
November 17, 2012
Tweet
Share
More Decks by Daniel Lv
See All by Daniel Lv
ActionCable, WebSocket and Scalability
lgn21st
3
590
Koz - 听我们的?
lgn21st
2
350
Other Decks in Programming
See All in Programming
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
1.7k
Ethereum_.pdf
nekomatu
0
460
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
100
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
170
Amazon Qを使ってIaCを触ろう!
maruto
0
410
初めてDefinitelyTypedにPRを出した話
syumai
0
420
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
300
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
Jakarta EE meets AI
ivargrimstad
0
110
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
330
距離関数を極める! / SESSIONS 2024
gam0022
0
280
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
A Tale of Four Properties
chriscoyier
156
23k
Writing Fast Ruby
sferik
627
61k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Six Lessons from altMBA
skipperchong
27
3.5k
GraphQLとの向き合い方2022年版
quramy
43
13k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Typedesign – Prime Four
hannesfritz
40
2.4k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Transcript
Powered by Rabbit 1.0.8 Be a language designer Yukihiro "Matz"
Matsumoto @yukihiro_matz
Powered by Rabbit 1.0.8 Ruby started February 1993 1/185
Powered by Rabbit 1.0.8 as a scripting language for
UNIX 2/185
Powered by Rabbit 1.0.8 to replace Perl 3/185
Powered by Rabbit 1.0.8 But not really 4/185
Powered by Rabbit 1.0.8 I just wanted to create
my own language 5/185
Powered by Rabbit 1.0.8 Just for Fun 6/185
Powered by Rabbit 1.0.8 Recently, a guy came and
blamed me on Twitter 7/185
Powered by Rabbit 1.0.8 “Why did you invented Ruby,
where we had Perl?” 8/185
Powered by Rabbit 1.0.8 “It was redundant, reinvention of
the wheel” 9/185
Powered by Rabbit 1.0.8 “It was waste of man-power
that is limited resource” 10/185
Powered by Rabbit 1.0.8 “So, many IT people feel
negative about your work” 11/185
Powered by Rabbit 1.0.8 What do you think? 12/185
Powered by Rabbit 1.0.8 Give me a break 13/185
Powered by Rabbit 1.0.8 Indeed we have limited resources
14/185
Powered by Rabbit 1.0.8 Only 7 Billion people on
Earth 15/185
Powered by Rabbit 1.0.8 Very few among them code
16/185
Powered by Rabbit 1.0.8 But it's not a bottleneck
17/185
Powered by Rabbit 1.0.8 We have more rare resource
18/185
Powered by Rabbit 1.0.8 It's Motivation 19/185
Powered by Rabbit 1.0.8 We are not machines 20/185
Powered by Rabbit 1.0.8 We need driving force to
accomplish great things 21/185
Powered by Rabbit 1.0.8 What's your motivation? 22/185
Powered by Rabbit 1.0.8 Fun? 23/185
Powered by Rabbit 1.0.8 Profit? 24/185
Powered by Rabbit 1.0.8 My motivation is love toward
programming languages 25/185
Powered by Rabbit 1.0.8 I love all programming languages
on earth 26/185
Powered by Rabbit 1.0.8 Including Fortran 27/185
Powered by Rabbit 1.0.8 Perl 28/185
Powered by Rabbit 1.0.8 Even PHP 29/185
Powered by Rabbit 1.0.8 It might sound spooky 30/185
Powered by Rabbit 1.0.8 to LOVE programming languages 31/185
Powered by Rabbit 1.0.8 No one should laugh at
motivation 32/185
Powered by Rabbit 1.0.8 Some may call it reinventing
the wheel 33/185
Powered by Rabbit 1.0.8 Go ahead, if you are
motivated 34/185
Powered by Rabbit 1.0.8 You may invent the better
wheel 35/185
Powered by Rabbit 1.0.8 If not, it's OK. 36/185
Powered by Rabbit 1.0.8 As long as you follow
your motivation 37/185
Powered by Rabbit 1.0.8 And it will introduce diversity
38/185
Powered by Rabbit 1.0.8 Diversity is Good 39/185
Powered by Rabbit 1.0.8 It may require cost 40/185
Powered by Rabbit 1.0.8 It may waste your time
41/185
Powered by Rabbit 1.0.8 But the world without diversity
is unpleasant 42/185
Powered by Rabbit 1.0.8 What if we force people
to focus on Perl? 43/185
Powered by Rabbit 1.0.8 Like the world of 1984
44/185
Powered by Rabbit 1.0.8 Diversity is the cost for
innovation 45/185
Powered by Rabbit 1.0.8 No one understands Innovation 46/185
Powered by Rabbit 1.0.8 Succeeded people don't 47/185
Powered by Rabbit 1.0.8 Failed people don't 48/185
Powered by Rabbit 1.0.8 No one 49/185
Powered by Rabbit 1.0.8 We try 50/185
Powered by Rabbit 1.0.8 Again and again 51/185
Powered by Rabbit 1.0.8 until we make innovation 52/185
Powered by Rabbit 1.0.8 But we`d better predict the
future 53/185
Powered by Rabbit 1.0.8 To raise the possibility of
success 54/185
Powered by Rabbit 1.0.8 55/185
Powered by Rabbit 1.0.8 人们做的事情,但昂贵 的小众”和“开发编程 语言和环境,”在未来 的职业生存 by
Google Translation 56/185
Powered by Rabbit 1.0.8 IT survives will be: language
designers dev env implementers and high valued niche players 57/185
Powered by Rabbit 1.0.8 Language designers? 58/185
Powered by Rabbit 1.0.8 Sounds weird? 59/185
Powered by Rabbit 1.0.8 His outline: Programming will be
fundamental literacy Easy tasks can be done by everybody Professionals (like us) should do harder tasks 60/185
Powered by Rabbit 1.0.8 Fair enough 61/185
Powered by Rabbit 1.0.8 But how can we be
language designers? 62/185
Powered by Rabbit 1.0.8 How many language designers do
you know? 63/185
Powered by Rabbit 1.0.8 me (Ruby) 64/185
Powered by Rabbit 1.0.8 Guido (Python) 65/185
Powered by Rabbit 1.0.8 Larry (Perl) 66/185
Powered by Rabbit 1.0.8 Rasmus (PHP) 67/185
Powered by Rabbit 1.0.8 ? 68/185
Powered by Rabbit 1.0.8 Language Designer or Serial Killer?
69/185
Powered by Rabbit 1.0.8 70/185
Powered by Rabbit 1.0.8 Language designers, raise your hand
71/185
Powered by Rabbit 1.0.8 Language implementers, raise your hand
72/185
Powered by Rabbit 1.0.8 It's not as hard as
you may think 73/185
Powered by Rabbit 1.0.8 You may not start making
a popular programming language 74/185
Powered by Rabbit 1.0.8 You may not implement a
programming language 75/185
Powered by Rabbit 1.0.8 How can we be language
designers? 76/185
Powered by Rabbit 1.0.8 You code 77/185
Powered by Rabbit 1.0.8 You design 78/185
Powered by Rabbit 1.0.8 You design code 79/185
Powered by Rabbit 1.0.8 You design API 80/185
Powered by Rabbit 1.0.8 You design interface 81/185
Powered by Rabbit 1.0.8 They are languages 82/185
Powered by Rabbit 1.0.8 Dave Thomas 83/185
Powered by Rabbit 1.0.8 Programming is a process of
designing your own DSL -- Dave Thomas 84/185
Powered by Rabbit 1.0.8 In that sense, you can
be language designers 85/185
Powered by Rabbit 1.0.8 Too few people care about
design 86/185
Powered by Rabbit 1.0.8 Too many people create software
without care 87/185
Powered by Rabbit 1.0.8 Care about them 88/185
Powered by Rabbit 1.0.8 Care about your users 89/185
Powered by Rabbit 1.0.8 Care about your team members
90/185
Powered by Rabbit 1.0.8 Care about yourself 91/185
Powered by Rabbit 1.0.8 Care about future yourself 92/185
Powered by Rabbit 1.0.8 Choose the vocabulary 93/185
Powered by Rabbit 1.0.8 Mind names you use 94/185
Powered by Rabbit 1.0.8 Analyze the structure 95/185
Powered by Rabbit 1.0.8 Block is your friend 96/185
Powered by Rabbit 1.0.8 Block can represent the strucuture
97/185
Powered by Rabbit 1.0.8 or scope 98/185
Powered by Rabbit 1.0.8 Pull Ruby to your domain
99/185
Powered by Rabbit 1.0.8 Design your DSL 100/185
Powered by Rabbit 1.0.8 Write small code in your
DSL 101/185
Powered by Rabbit 1.0.8 To experiment 102/185
Powered by Rabbit 1.0.8 To prototype 103/185
Powered by Rabbit 1.0.8 To test 104/185
Powered by Rabbit 1.0.8 To build your final application
105/185
Powered by Rabbit 1.0.8 Part II 106/185
Powered by Rabbit 1.0.8 mruby 107/185
Powered by Rabbit 1.0.8 Matz's 108/185
Powered by Rabbit 1.0.8 eMbeddable 109/185
Powered by Rabbit 1.0.8 Minimalistic 110/185
Powered by Rabbit 1.0.8 Ruby 111/185
Powered by Rabbit 1.0.8 Ruby for small devices 112/185
Powered by Rabbit 1.0.8 small memory footprint 113/185
Powered by Rabbit 1.0.8 Small (<500K) 114/185
Powered by Rabbit 1.0.8 Embedding API 115/185
Powered by Rabbit 1.0.8 a la Lua 116/185
Powered by Rabbit 1.0.8 Soft realtime 117/185
Powered by Rabbit 1.0.8 Incremental GC 118/185
Powered by Rabbit 1.0.8 Small devices 119/185
Powered by Rabbit 1.0.8 SAKURA Board 120/185
Powered by Rabbit 1.0.8 SAKURA Board 121/185
Powered by Rabbit 1.0.8 CPU: RX63N (96MHz) 122/185
Powered by Rabbit 1.0.8 1MB Flash 123/185
Powered by Rabbit 1.0.8 128KB RAM 124/185
Powered by Rabbit 1.0.8 16,800JPY (≒1,300元) 125/185
Powered by Rabbit 1.0.8 Board LCD Text CD-ROM 126/185
Powered by Rabbit 1.0.8 127/185
Powered by Rabbit 1.0.8 128/185
Powered by Rabbit 1.0.8 129/185
Powered by Rabbit 1.0.8 Mobile 130/185
Powered by Rabbit 1.0.8 MobiRuby mruby for iOS 131/185
Powered by Rabbit 1.0.8 mruby for Android 132/185
Powered by Rabbit 1.0.8 Server side 133/185
Powered by Rabbit 1.0.8 mod_mruby Apache mruby extension 134/185
Powered by Rabbit 1.0.8 mruby_nginx Nginx mruby extension 135/185
Powered by Rabbit 1.0.8 mruby-libuv Async I/O for mruby
136/185
Powered by Rabbit 1.0.8 Server side 137/185
Powered by Rabbit 1.0.8 mruby extensions for languages 138/185
Powered by Rabbit 1.0.8 JavaScript Lua Go Ruby 139/185
Powered by Rabbit 1.0.8 Real world app 140/185
Powered by Rabbit 1.0.8 Solar panel controller 141/185
Powered by Rabbit 1.0.8 Intelligent Internet router 142/185
Powered by Rabbit 1.0.8 Vending machine controller 143/185
Powered by Rabbit 1.0.8 Possibility 144/185
Powered by Rabbit 1.0.8 Smart appliance 145/185
Powered by Rabbit 1.0.8 Automobiles 146/185
Powered by Rabbit 1.0.8 Games 147/185
Powered by Rabbit 1.0.8 Editors 148/185
Powered by Rabbit 1.0.8 Cloud 149/185
Powered by Rabbit 1.0.8 Part III 150/185
Powered by Rabbit 1.0.8 Ruby 2.0 151/185
Powered by Rabbit 1.0.8 for Web 2.0 152/185
Powered by Rabbit 1.0.8 in 1993 153/185
Powered by Rabbit 1.0.8 Almost 20 years ago 154/185
Powered by Rabbit 1.0.8 I had been happy for
last 20 years 155/185
Powered by Rabbit 1.0.8 It always had been more
than expected 156/185
Powered by Rabbit 1.0.8 I will try to make
the world better place 157/185
Powered by Rabbit 1.0.8 by making Ruby even better
158/185
Powered by Rabbit 1.0.8 On February 24th 2013 159/185
Powered by Rabbit 1.0.8 Ruby's 20th birthday 160/185
Powered by Rabbit 1.0.8 We will release Ruby 2.0
161/185
Powered by Rabbit 1.0.8 finally 162/185
Powered by Rabbit 1.0.8 But it is progressing steadily
163/185
Powered by Rabbit 1.0.8 It will be faster 164/185
Powered by Rabbit 1.0.8 It will be more reliable
165/185
Powered by Rabbit 1.0.8 More fun to use 166/185
Powered by Rabbit 1.0.8 keyword formal argument 167/185
Powered by Rabbit 1.0.8 keyword formal argument def downto(from, to,
step: n) ... end 168/185
Powered by Rabbit 1.0.8 Enumerable#lazy 169/185
Powered by Rabbit 1.0.8 Enumerable#lazy (1..Float::INFINITY).lazy.map {|i| i.to_s }.select{|s| /3/
=== s }.first(5) 170/185
Powered by Rabbit 1.0.8 Module#prepend 171/185
Powered by Rabbit 1.0.8 Module#prepend class Foo def foo; p
:foo; end end module Prepend def foo p :before super p :after end end class Foo prepend Prepend end Foo.new.foo 172/185
Powered by Rabbit 1.0.8 Refinement 173/185
Powered by Rabbit 1.0.8 Refinement module R refine String do
def foo ... end end end "".foo # => error! using R "".foo 174/185
Powered by Rabbit 1.0.8 Come join us 175/185
Powered by Rabbit 1.0.8 By using trunk 176/185
Powered by Rabbit 1.0.8 By reporting bugs 177/185
Powered by Rabbit 1.0.8 By fixing bugs 178/185
Powered by Rabbit 1.0.8 By sending pull-request 179/185
Powered by Rabbit 1.0.8 By porting your project to
2.0 180/185
Powered by Rabbit 1.0.8 We can make it better
181/185
Powered by Rabbit 1.0.8 We can make the world
better 182/185
Powered by Rabbit 1.0.8 mruby 183/185
Powered by Rabbit 1.0.8 Happy hacking! 184/185
Powered by Rabbit 1.0.8 Thank you 185/185