東京Ruby会議11 招待講演
Powered by Rabbit 2.1.8Streem日経Linuxライター@yukihiro_matzまつもと ゆきひろYukihiro "Matz" Matsumoto
View Slide
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 まつもと=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 | stdoutcat 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)producerepoll(2)read(2)queue push
Powered by Rabbit 2.1.8 task(write I/O)consumerqueue popwrite(2)
Powered by Rabbit 2.1.8 Hello World
Powered by Rabbit 2.1.8 ["Hello World"] | stdouthello 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 8007tcp_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 taskproduceraccept(2)create socket I/Oqueue push
Powered by Rabbit 2.1.8 each taskfilter (consumer)queue popcall function
Powered by Rabbit 2.1.8 # simple netcat on port 8007sock = tcp_socket("localhost", 8007)stdin | socksock | stdoutsimple 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 オブジェクト指向
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/randmap/eachtimecsvstat/math/sort
Powered by Rabbit 2.1.8 seq/repeat/rand
Powered by Rabbit 2.1.8 Producersseq(10)rand(10)repeat(v, 10)cycle([v1,v2], 10)
Powered by Rabbit 2.1.8 Producerszip(strm1,strm2)concat(strm1,strm2)
Powered by Rabbit 2.1.8 map/each
Powered by Rabbit 2.1.8 Filtersmap{|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 Filtersreduce{|x,y| x*y}reduce_by_key{|x,y| x*y}countmin/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 sortsort{|x,y| x.cmp(y)}sort_by{|x| x(2)}medianmedian{|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