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
Streem
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yukihiro Matsumoto
May 28, 2016
Programming
3.8k
8
Share
Streem
東京Ruby会議11 招待講演
Yukihiro Matsumoto
May 28, 2016
More Decks by Yukihiro Matsumoto
See All by Yukihiro Matsumoto
30 Years of Ruby
matz
0
520
mruby VM
matz
0
110
Contribute to Ruby (RubyKaigi 2022)
matz
0
280
Ruby_through_Reserved_Words.pdf
matz
0
160
Ruby after 25 years
matz
1
1.5k
What is software made of?
matz
0
710
world-of-languages.pdf
matz
8
1.3k
Ruby Everywhere
matz
11
120k
Other Decks in Programming
See All in Programming
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
130
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
120
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
180
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
110
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
4
1.1k
Oxcを導入して開発体験が向上した話
yug1224
4
280
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
270
3Dシーンの圧縮
fadis
1
590
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
100
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
400
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
150
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Paper Plane
katiecoart
PRO
1
51k
Building the Perfect Custom Keyboard
takai
2
780
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
930
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
370
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
So, you think you're a good person
axbom
PRO
2
2k
Transcript
Powered by Rabbit 2.1.8 Streem 日経Linuxライター @yukihiro_matz まつもと ゆきひろ Yukihiro
"Matz" Matsumoto
Powered by Rabbit 2.1.8 まつもとゆきひろ
Powered by Rabbit 2.1.8 Ruby
Powered by Rabbit 2.1.8 プログラマ
Powered by Rabbit 2.1.8 言語デザイナー
Powered by Rabbit 2.1.8 日経Linuxライター
Powered by Rabbit 2.1.8 作りながら学ぶプログラミング言語
Powered by Rabbit 2.1.8 言語デザイン
Powered by Rabbit 2.1.8 言語実装
Powered by Rabbit 2.1.8 プロ(?)デザイナーの技
Powered by Rabbit 2.1.8 書ける人が他にいない
Powered by Rabbit 2.1.8 Streem
Powered by Rabbit 2.1.8 教材・例題
Powered by Rabbit 2.1.8 言語デザイン
Powered by Rabbit 2.1.8 言語実装
Powered by Rabbit 2.1.8 どんな言語?
Powered by Rabbit 2.1.8 ポジション
Powered by Rabbit 2.1.8 汎用言語を目指さない
Powered by Rabbit 2.1.8 まつもと=Rubyのひと
Powered by Rabbit 2.1.8 「まつもとがRubyをあきらめた」
Powered by Rabbit 2.1.8 Rubyの発展の邪魔になりたくない
Powered by Rabbit 2.1.8 実験
Powered by Rabbit 2.1.8 教材
Powered by Rabbit 2.1.8 特定目的言語
Powered by Rabbit 2.1.8 可能であればRubyと変える
Powered by Rabbit 2.1.8 異なる設計判断
Powered by Rabbit 2.1.8 妥協できない点の明確化
Powered by Rabbit 2.1.8 20年の経験の反映
Powered by Rabbit 2.1.8 関数型(的)プログラミング
Powered by Rabbit 2.1.8 イミュータブルデータ
Powered by Rabbit 2.1.8 コンカレンシー
Powered by Rabbit 2.1.8 プログラミングモデル
Powered by Rabbit 2.1.8 ストリーミングプログラミング
Powered by Rabbit 2.1.8 ループがない
Powered by Rabbit 2.1.8 endがない
Powered by Rabbit 2.1.8 ピタゴラスイッチ・プログラミング Rube Goldberg Programming
Powered by Rabbit 2.1.8 実例
Powered by Rabbit 2.1.8 Cat
Powered by Rabbit 2.1.8 stdin | stdout cat pipeline
Powered by Rabbit 2.1.8 stdin = read I/O
Powered by Rabbit 2.1.8 stdout = write I/O
Powered by Rabbit 2.1.8 read I/O | write I/O
Powered by Rabbit 2.1.8 task(read I/O) | task(write I/O)
Powered by Rabbit 2.1.8 task(read I/O) producer epoll(2) read(2)
queue push
Powered by Rabbit 2.1.8 task(write I/O) consumer queue pop
write(2)
Powered by Rabbit 2.1.8 Hello World
Powered by Rabbit 2.1.8 ["Hello World"] | stdout hello
world
Powered by Rabbit 2.1.8 配列はproducerになる
Powered by Rabbit 2.1.8 Socket connection
Powered by Rabbit 2.1.8 # simple echo server on
port 8007 tcp_server(8007) | each{|sock| sock | sock } simple echo server
Powered by Rabbit 2.1.8 tcp_server = tcp_server task
Powered by Rabbit 2.1.8 each task
Powered by Rabbit 2.1.8 sock I/O | sock I/O
Powered by Rabbit 2.1.8 tcp_server task producer accept(2) create
socket I/O queue push
Powered by Rabbit 2.1.8 each task filter (consumer) queue
pop call function
Powered by Rabbit 2.1.8 # simple netcat on port
8007 sock = tcp_socket("localhost", 8007) stdin | sock sock | stdout simple netcat client
Powered by Rabbit 2.1.8 FizzBuzz
Powered by Rabbit 2.1.8 # seq(100) returns a stream
of numbers from 1 to 100. # stdout is an output destination. seq(100) | map{|x| if (x % 15 == 0) "FizzBuzz" else if (x % 3 == 0) "Fizz" else if (x % 5 == 0) "Buzz" else x } | stdout
Powered by Rabbit 2.1.8 スケジューラー
Powered by Rabbit 2.1.8 コア数のスレッド
Powered by Rabbit 2.1.8 スレッドループ ループ タスクキューから取り出し 実行 全ストリーム終了まで
Powered by Rabbit 2.1.8 FizzBuzz
Powered by Rabbit 2.1.8 # simple netcat on port
8007 sock = tcp_socket("localhost", 8007) stdin | sock sock | stdout simple netcat client
Powered by Rabbit 2.1.8 オブジェクト指向
Powered by Rabbit 2.1.8 foo.bar => bar(foo)
Powered by Rabbit 2.1.8 namespace
Powered by Rabbit 2.1.8 namespace { ... }
Powered by Rabbit 2.1.8 new namespace(args)
Powered by Rabbit 2.1.8 bar(foo)
Powered by Rabbit 2.1.8 bar(foo) fooのnamespaceにbarがあれば なければ変数barを実行
Powered by Rabbit 2.1.8 bar(foo) barが無名関数なら実行 barがC関数なら実行 barが配列ならx(0)で先頭要素
Powered by Rabbit 2.1.8 Lisp1.5
Powered by Rabbit 2.1.8 総称関数を導入したい
Powered by Rabbit 2.1.8 Lisp1
Powered by Rabbit 2.1.8 ライブラリ
Powered by Rabbit 2.1.8 少しずつ充実させてる
Powered by Rabbit 2.1.8 seq/repeat/rand map/each time csv stat/math/sort
Powered by Rabbit 2.1.8 seq/repeat/rand
Powered by Rabbit 2.1.8 Producers seq(10) rand(10) repeat(v, 10)
cycle([v1,v2], 10)
Powered by Rabbit 2.1.8 Producers zip(strm1,strm2) concat(strm1,strm2)
Powered by Rabbit 2.1.8 map/each
Powered by Rabbit 2.1.8 Filters map{|x| x*2} flatmap{|x| x*2}
filter{|x| x%2 == 0} each{|x| print(x)}
Powered by Rabbit 2.1.8 map=each+emit
Powered by Rabbit 2.1.8 def map(func) { each{|x| emit
func(x)} }
Powered by Rabbit 2.1.8 Filters reduce{|x,y| x*y} reduce_by_key{|x,y| x*y}
count min/max
Powered by Rabbit 2.1.8 time
Powered by Rabbit 2.1.8 now() time("2016-05-28T10:30 +0830") time(2016,5,28,10,30)
Powered by Rabbit 2.1.8 任意のタイムゾーンで生成・表示
Powered by Rabbit 2.1.8 csv
Powered by Rabbit 2.1.8 csv()
Powered by Rabbit 2.1.8 stat/math/sort
Powered by Rabbit 2.1.8 sum() average() stdev() variance() correl()
sample()
Powered by Rabbit 2.1.8 sort sort{|x,y| x.cmp(y)} sort_by{|x| x(2)}
median median{|x| x(2)}
Powered by Rabbit 2.1.8 今後の展開
Powered by Rabbit 2.1.8 総称関数
Powered by Rabbit 2.1.8 パターンマッチング
Powered by Rabbit 2.1.8 キーワード引数
Powered by Rabbit 2.1.8 なにができるの?
Powered by Rabbit 2.1.8 CSV処理
Powered by Rabbit 2.1.8 統計(っぽい)処理
Powered by Rabbit 2.1.8 シェルスクリプト(っぽい)処理
Powered by Rabbit 2.1.8 データ変換
Powered by Rabbit 2.1.8 おもちゃレベルのEmbulk
Powered by Rabbit 2.1.8 Web? Maybe
Powered by Rabbit 2.1.8 Game? Maybe
Powered by Rabbit 2.1.8 ワークフローエンジン?
Powered by Rabbit 2.1.8 今後も成長
Powered by Rabbit 2.1.8 楽しい!
Powered by Rabbit 2.1.8 自作言語の世界
Powered by Rabbit 2.1.8 Thank you