RubyKaigi2019 1日目 Matz keynote メモ
せっかくRubyKaigiきたのでまっつさんの基調講演のメモを記事化することに
The Year of Concurrency
- ruby3の話
- 静的解析の話
- 検討中の各種機能の話
Ruby
Rubyは十分に早いと言えるのではないか
- Ruby1.9以降早くなってきた
- Ruby2以降も徐々にパフォーマンス改善
- Ruby3以降も改善していく
Static Typing(静的解析)
プロジェクトが大きくなるに従って
- テストが苦痛に
- テストが書きづらい
- テストに時間がかかる
Matz「テストきらい テストはDRYではない」
- でも人類はテストなしに正しくプログラムを書く方法を知らないのでテストが必要
モダンな言語はだいたい型の静的解析がついている
- 古い言語も型を取り入れている
- PHP: Type hinting
- JavaScript: TypeScript
- Rubyはどうするか?
- Type Annotation? → NO
- Matz「型宣言きらい DRYではない」
Static Type Checking
4つのモデルを取り込もうとしている
- Type Definition Syntax(.rbi) 型定義ファイル
- 引数の型
- 戻り値の型
- Class/Module
- Interface
- などを定義しておくファイル
- Type Definitions for Libraries
- Type Profiler
- Static Type Checker(静的型チェック)
rubyのプログラムをそのままに型チェックができるようになる。型宣言を書かなくても!
Performance
メモリだけがボトルネックじゃない
CPU
- JITコンパイラ
- マルチコア
- Webはマルチコアに向いてる
- Unicorn Multi-Process
- Puma MUlti-THread
- Falcon Multi-Fiber
- Thread / Fiber
- 課題があるのでよりよいモデルが必要
- そこでGuild!
- Object Space Isolation(ギルド間のオブジェクトスペースを分離し)
- Communication via Channnel(Guild間はチャンネルを使って通信する Immutableなもののみ受け渡し可能)
- Number
- Frozen Strings
- Symbols
- Deeply Frozen object
- Deeply Frozen Objects
- 参照しているオブジェクトがFrozenでない場合、そこを書き換えられると値が変わってしまう
- 再帰的に全ての要素がFrozenである場合にのみ、Deeply Frozen Objectとしてマークする
- Webはマルチコアに向いてる
I/O
- Concurrency is hard
- スレッドを入れたことに後悔している
- Guilds (Isolates)
AutoFiber (Async Whateverなにか...)
他言語の並行性(Concurrency)
- Go: goroutine
- ELixir: processes
RubyはできないのでAdd-Onとして提供する
我々に必要なのはよりよい名前
Ruby3.0
- パフォーマンス
- 並行性
- 互換性
- Guildという名前にゲーム業界から反発が出た
- 「俺たちこのクラスつかってる!」
- Guildという名前にゲーム業界から反発が出た
今後検討中の各機能
- Frozen String Literals
- 3.0では導入されない
- Obsolete
?
Literals - バッククォートで囲むとシェルで実行して返すやつ
- 3.0では死なない
- キーワード引数
- 整理しようという話になっている
- 唯一の大きな非互換
- Numbered block parameter
- [1,2,3].map{@1 *2}
- 紛糾
- [1,2,3].map{@1 *2}
- パターンマッチ
- 関数型言語に含まれているようなパターンマッチ
- 今日2019/04/18 セッションがある
- 昨日trunkにマージされた!
来年の12月にRuby3.0がでることを本当に期待している!!!
所感
- 毎回わかりやすくてエモい基調講演があるのでたすかる
- 型宣言を書かずに別ファイルに型情報をもたせる ということで進んでるっぽい
- 昔「Rubyに型を作ったとしてもサブセットにして、必須ではなくする」という話を聞いた記憶があるが、確かに型書かなくても動いてくれそう
- 他機能について
- 結局frozen_string_literalはいらんのかーい
- キーワード引数は非推奨な書き方されてたらレビューで蹴れるように勉強しよ まあ2.7で警告が出るようになるらしいけども…
- パターンマッチたのしそう(小並感)