@yukihiro_matz Yukihiro "Matz" Matsumoto まつもとゆきひろ

TBD
ネットワーク応用通信研究所
Heroku
Rubyアソシエーション
@yukihiro_matz
Yukihiro "Matz" Matsumoto
まつもとゆきひろ
Powered by Rabbit 2.1.6
TBD
Powered by Rabbit 2.1.6
To Be Defined
Powered by Rabbit 2.1.6
Toward Brain-aware Design
Powered by Rabbit 2.1.6
まつもとゆきひろ
Powered by Rabbit 2.1.6
プログラミング言語Ruby開発者
Powered by Rabbit 2.1.6
プログラミング言語Ruby創始者
Powered by Rabbit 2.1.6
YAPC
Powered by Rabbit 2.1.6
Yet Another Perl Conference
Powered by Rabbit 2.1.6
アウェイ感
Powered by Rabbit 2.1.6
1997 Perl Conference Japan
Powered by Rabbit 2.1.6
2000 Perl/Ruby Conference (京
都)
Powered by Rabbit 2.1.6
2006 YAPC::Asia Tokyo
Powered by Rabbit 2.1.6
2015 YAPC::Asia Tokyo Final
Powered by Rabbit 2.1.6
Rubyの話は封印
Powered by Rabbit 2.1.6
「Perlにelse ifを追加した話」
Powered by Rabbit 2.1.6
Ruby創始者でない私
Powered by Rabbit 2.1.6
言語デザイナー
Powered by Rabbit 2.1.6
3D XPoint
Powered by Rabbit 2.1.6
高速大容量不揮発性メモリ
Powered by Rabbit 2.1.6
DRAMの速度と耐久性
SSDの容量と不揮発性
Powered by Rabbit 2.1.6
CPU
↓
揮発性一次記憶
↓
不揮発性二次記憶
Powered by Rabbit 2.1.6
CPU
↓
不揮発性一次記憶
Powered by Rabbit 2.1.6
1TB不揮発性メインメモリ
Powered by Rabbit 2.1.6
どんな言語が必要か
Powered by Rabbit 2.1.6
Powered by Rabbit 2.1.6
と、思ったが
Powered by Rabbit 2.1.6
15分ぶんでネタ切れ
Powered by Rabbit 2.1.6
ごめんなさい
Powered by Rabbit 2.1.6
Powered by Rabbit 2.1.6
封印を解く
Powered by Rabbit 2.1.6
FAQ
Powered by Rabbit 2.1.6
今、新しい言語を設計したら
どんな言語にしますか?
Powered by Rabbit 2.1.6
Rubyの反省点
Powered by Rabbit 2.1.6
Rubyの悪口
Powered by Rabbit 2.1.6
Perlの影響
Powered by Rabbit 2.1.6
「$<変数>」
Powered by Rabbit 2.1.6
状態を避ける
Powered by Rabbit 2.1.6
「$=」
Powered by Rabbit 2.1.6
Lispの影響
Powered by Rabbit 2.1.6
Fixnum, Bignum
Powered by Rabbit 2.1.6
String, Symbol
Powered by Rabbit 2.1.6
Proc, Lambda
Powered by Rabbit 2.1.6
「使い分け」を避ける
Powered by Rabbit 2.1.6
20年前とのアーキテクチャの変化
Powered by Rabbit 2.1.6
マルチコア
Powered by Rabbit 2.1.6
スレッドセーフ性
Powered by Rabbit 2.1.6
イミュータブルデータ
Powered by Rabbit 2.1.6
GIL
Powered by Rabbit 2.1.6
スレッドセーフ
Powered by Rabbit 2.1.6
Cライブラリ
Powered by Rabbit 2.1.6
コンカレンシーモデル
Powered by Rabbit 2.1.6
アクター
Powered by Rabbit 2.1.6
シェア・ボロー・モデル
Powered by Rabbit 2.1.6
ストリーム
Powered by Rabbit 2.1.6
Ruby 3.0
Powered by Rabbit 2.1.6
「Rubyとは違う」言語
Powered by Rabbit 2.1.6
20年前とは違うアーキテクチャ
Powered by Rabbit 2.1.6
マルチコア
Powered by Rabbit 2.1.6
高レベル抽象 (DSL)
Powered by Rabbit 2.1.6
関数型言語の影響
Powered by Rabbit 2.1.6
温故知新
Powered by Rabbit 2.1.6
アーキテクチャの振り子
Powered by Rabbit 2.1.6
サーバー・クライアント
Powered by Rabbit 2.1.6
パフォーマンス・生産性
Powered by Rabbit 2.1.6
マルチコア時代のシェルスクリプト
Powered by Rabbit 2.1.6
データベース→データフロー
Powered by Rabbit 2.1.6
パイプライン→マルチコア
Powered by Rabbit 2.1.6
プロセス→スレッド
Powered by Rabbit 2.1.6
プログラミング言語としてのシェル
Powered by Rabbit 2.1.6
新言語の余地
Powered by Rabbit 2.1.6
Rubyに近いポリシー
Powered by Rabbit 2.1.6
Rubyの反省を活かす設計
Powered by Rabbit 2.1.6
Rubyと違う判断
Powered by Rabbit 2.1.6
Streem
Powered by Rabbit 2.1.6
Stream or Flow based language
Powered by Rabbit 2.1.6
1. パイプラインを組み立てる手続き
型プログラム
2. パイプラインをデータが流れるイ
ベントループ
Powered by Rabbit 2.1.6
stdin | stdout
cat pipeline
Powered by Rabbit 2.1.6
# simple echo server on port 8007
tcp_server(8007) | {s ->
s | s
}
simple echo server
Powered by Rabbit 2.1.6
# simple netcat on port 8007
s = tcp_socket("localhost", 8007)
stdin | s
s | stdout
simple netcat client
Powered by Rabbit 2.1.6
1. パイプラインを組み立てる手続き
型プログラム
2. パイプラインをデータが流れるイ
ベントループ
Powered by Rabbit 2.1.6
ピタゴラスイッチ・プログラミング
Rube Goldberg Programming
Powered by Rabbit 2.1.6
OK Go
Powered by Rabbit 2.1.6
Rubyと違う判断
Powered by Rabbit 2.1.6
ブレース
Powered by Rabbit 2.1.6
言語の区別
Powered by Rabbit 2.1.6
イミュータブルデータ
Powered by Rabbit 2.1.6
効率
Powered by Rabbit 2.1.6
エラー処理
Powered by Rabbit 2.1.6
明示的チェック(C, Go)
例外処理(Java, Ruby, etc)
Optional(Swift, OCaml, etc)
Powered by Rabbit 2.1.6
デフォルト無視
Powered by Rabbit 2.1.6
Rubyの反省を活かす設計
Powered by Rabbit 2.1.6
大クラス主義
Powered by Rabbit 2.1.6
「使い分け」を減らす
Powered by Rabbit 2.1.6
より少ないデータ構造
Powered by Rabbit 2.1.6
数値
文字列
配列
Powered by Rabbit 2.1.6
数値
整数
浮動小数点数
Powered by Rabbit 2.1.6
内部実装は切り替える
Powered by Rabbit 2.1.6
文字列
文字列
シンボル
Powered by Rabbit 2.1.6
「:foo」は文字列リテラル
Powered by Rabbit 2.1.6
配列
配列
ハッシュ
オブジェクト
Powered by Rabbit 2.1.6
[1, 2, 3]
Array expression
Powered by Rabbit 2.1.6
[a: 1, b: 2, c: 3]
Array elements can be labeled
Powered by Rabbit 2.1.6
[1, foo: 2, bar: 3]
Array can be partially labeled
Powered by Rabbit 2.1.6
はじまり
Powered by Rabbit 2.1.6
日経Linux
Powered by Rabbit 2.1.6
「作りながら学ぶプログラミング言
語」
Powered by Rabbit 2.1.6
2014年12月
Powered by Rabbit 2.1.6
github.com/matz/streem
Powered by Rabbit 2.1.6
200行のプロトタイプ
Powered by Rabbit 2.1.6
HackerNews/Redditのトレンドに
Powered by Rabbit 2.1.6
OSSの新たな知見
Powered by Rabbit 2.1.6
Matz伝説
Powered by Rabbit 2.1.6
現状
Powered by Rabbit 2.1.6
github.com/matz/streem
Powered by Rabbit 2.1.6
簡単なサンプルは動く
Powered by Rabbit 2.1.6
Thanks @mattn
Powered by Rabbit 2.1.6
パイプライン
イベントループ
基本的データ構造
Powered by Rabbit 2.1.6
ファイルI/O
ソケットI/O
CSVパース
Powered by Rabbit 2.1.6
関数定義なし
クラス定義なし
ライブラリなし
Powered by Rabbit 2.1.6
遠い実用
Powered by Rabbit 2.1.6
言語デザインの教材
Powered by Rabbit 2.1.6
将来への期待
Powered by Rabbit 2.1.6
未来
Powered by Rabbit 2.1.6
小規模データ分析
Powered by Rabbit 2.1.6
シンプルウェブサービス
Powered by Rabbit 2.1.6
意外と広い応用範囲
Powered by Rabbit 2.1.6
イベントドリブン
Powered by Rabbit 2.1.6
フローベースプログラミング
Powered by Rabbit 2.1.6
リアクティブプログラミング(もどき)
Powered by Rabbit 2.1.6
まとめ
Powered by Rabbit 2.1.6
新言語の余地はいつもある
Powered by Rabbit 2.1.6
環境の変化は新言語を生む
Powered by Rabbit 2.1.6
言語デザインは楽しい
Powered by Rabbit 2.1.6
Streem面白い
Powered by Rabbit 2.1.6
一緒に遊ぼうっ!
Powered by Rabbit 2.1.6