GMO ペパボさんに行ってきました。
Ruby コアコミッターの笹田耕一さんがいらっしゃいまして、Ruby 3x3 や今後の Ruby について話していただきました。笹田さんの Fukuoka.rb の参加は #2 依頼だそうです(nagachika 調べ)。
今日やったこと
- RubyKaigi のあれこれ
- 笹田さんの話を聞いてワイワイしたり
笹田さんの話を聞いてワイワイしていた
今日の #fukuokarb は笹田さんをお招きして、Ruby3のお話や質問会をしています! pic.twitter.com/negSZ7j7x9
— Uchio KONDO 🔫 (@udzura) 2019年2月8日
会議室で円卓を囲む感じかと思っていたら、まさかのスライドを用意されていました。
議事録をとるつもりでいたのですが、すっかり忘れて話を聞き入ってしまいました。
覚えている限りの話を何となく書きます。
Ruby の今後について
Ruby 3 には 3 つの目標がある
- JIT
- Concurrent/Parallel execution
- Static checking
「Ruby 3 に入れたいな」と思って議論していること
- キーワード引数
- パターンマッチ
思い出せないm(_ _)m
この話だ。 https://t.co/1Ifq6n6xnI
— 甚六 (@jimlock) 2019年2月9日
Ruby 3 でやらないと決めたこと
思い出せないm(_ _)mFrozen String- autoload の削除
その他ワイワイしたこと
bootstrap
あと、ファイルロード高速化も…
— Uchio KONDO 🔫 (@udzura) 2019年2月9日
いまISeqをダンプできるようになったので、それを直接読めば高速(実際bootsnapがやってる)にはなるんですがもっといい実装ができそう、みたいな話をされた記憶です。
— Uchio KONDO 🔫 (@udzura) 2019年2月9日
- 思い出せないm(_ _)m
エンジニア募集中
JIT
RubyConf 2018 のプレゼン資料をもとに解説してもらった。
昨年の RubyKaigi で話されたことからの進展としては
というもの。何を以って速くなったかというとこの資料では数値演算処理が速くなったことをしてしている。ベンチマークには optcarrot を使っていたり使っていなかったり。
Concurrent/Parallel execution
おなじみ Guild。
www.slideshare.net
昨年の RubyKaigi のやつ。
http://www.atdot.net/~ko1/activities/2018_rubyconf2018.pdf
昨年の RubyConf のやつ。
俺が理解している Guild は、
Process
└ Guild
└ Thread
└ Fiber
という感じ。ただ、今日の話では Guild の立ち位置が上記のものではない案があったりする模様*1。
Thread プログラミングを少しでも触ったことがある人なら Thread プログラミングの難しさは知っていると思う。ユーザースレッドではなくネイティブスレッドを使っている場合、気軽にスレッド間転送をやるわけにはいかずかなり悩まれているようだった。
Static checking
型推論と呼んでいたものは、今は静的解析と呼ぶようになった。
Sorbet / Steep について。Steep は昨年の RubyKaigi で松本宗太郎さんが話されていた。
昨年の RubyKaigi では単なるライブラリの紹介程度にしか思っていなかったが、今日の話で大分誤解していたことが分かった。
「Ruby に型を実装する予定はない」と Matz が言っていたが、型がないことによる自由度の引き換えに人為的なミスを誘発する機会が増える。
それを防ぐために静的解析がある。ただし、Sorbet や Steep は静的解析のために型のテンプレートのようなもの*2を先に用意しておく必要がある。しかし、そのテンプレートのようなものを Ruby 内部に組み込むことはやりたくない*3。
そこで mametter さんが考案した Type Profile というアプローチがある。
www.slideshare.net
昨年の mametter さんのセッションを聞いてもよく理解できていなかったが、今日の話で何となく雰囲気は掴めた。
ただもう一度話を聞きたいところ。というか mametter さんに解説してもらいたいところ。
キーワード引数
最近の Ruby 界隈で一番ホットだと個人的に思っているもの。
```
def foo(*args, ex: false) {
}
```
というメソッドがあった場合、
- foo(1, 2, 3)
- foo(k: 42)
と実行するとそれぞれどうなるか?後者がエラーになるのが問題視されている。
この問題は 10 年くらい議論されているが、いい解決案が出てこないらしい。
個人的にはオーバーロードを実装して欲しいが、それをやるには型が必要なのでダメだな。
眠いのでここまで
現在 2019-02-09 03:51
おやすみなさい
追記
2019/02/09 18:43 思い出したことを追記。
2019/02/14 12:28 思い出したことを追記。