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
340
Other Decks in Programming
See All in Programming
VR HMDとしてのVision Pro+ゲーム開発について
yasei_no_otoko
0
100
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
9
1k
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
230
CSC509 Lecture 09
javiergs
PRO
0
110
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
3
400
色々なIaCツールを実際に触って比較してみる
iriikeita
0
270
go.mod、DockerfileやCI設定に分散しがちなGoのバージョンをまとめて管理する / Go Connect #3
arthur1
10
2.4k
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
430
Android 15 でアクションバー表示時にステータスバーが白くなってしまう問題
tonionagauzzi
0
140
Identifying User Idenity
moro
6
7.9k
プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
d_endo
1
1k
Why Spring Matters to Jakarta EE - and Vice Versa
ivargrimstad
0
1k
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Teambox: Starting and Learning
jrom
132
8.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Thoughts on Productivity
jonyablonski
67
4.3k
Practical Orchestrator
shlominoach
186
10k
How to Ace a Technical Interview
jacobian
275
23k
Docker and Python
trallard
40
3.1k
Code Reviewing Like a Champion
maltzj
519
39k
Designing for Performance
lara
604
68k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
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