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
600
Koz - 听我们的?
lgn21st
2
360
Other Decks in Programming
See All in Programming
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
960
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
280
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
770
QA環境で誰でも自由自在に現在時刻を操って検証できるようにした話
kalibora
1
140
선언형 UI에서의 상태관리
l2hyunwoo
0
270
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
590
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
420
カンファレンス動画鑑賞会のススメ / Osaka.swift #1
hironytic
0
180
良いユニットテストを書こう
mototakatsu
11
3.6k
Swiftコンパイラ超入門+async関数の仕組み
shiz
0
180
ErdMap: Thinking about a map for Rails applications
makicamel
1
680
Amazon Nova Reelの可能性
hideg
0
200
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Making Projects Easy
brettharned
116
6k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
210
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Into the Great Unknown - MozCon
thekraken
34
1.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Site-Speed That Sticks
csswizardry
3
270
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
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