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
© Copyright 2024 ExpyDoc