RubyKaigi 2017 参加記録(2日目)
RubyKaigi 2日目のメモです。
Keynote
Matz による基調講演。継承やmixinの歴史と、それらを元に作られた現在のRubyのModuleの様々な役割について。そしてコミュニティによる開発の話。
structual signatureは便利だと思うけど、一方でそろそろModuleの役割が多すぎる気がするようなそうでないような。
途中のCLOSとかの話は「言語のしくみ」を読んでいたおかげで「あれか!」とすんなり頭に入った。読んでてよかった。
An introduction and future of Ruby coverage library
一般的なカバレッジの定義とその付き合い方、そして現在Rubyで使われているカバレッジライブラリcoverage.soの最近の動向について。
coverage.so(とそれを使ってるSimpleCov)がとうとうbranch coverageにも対応してくれそうでなにより。
短かく書けると思って後置if
にした結果、line coverageの信用度が下がりました、とか見たことあるので結構嬉しい。
あとあの手のライブラリで後方互換製を保とうとすると、やっぱりキーワード引数経由の機能追加になるもんなんですね。
Improve extension API: C++ as better language for extension
Cの拡張APIだとちょっと辛いので、C++のあれこれを使れば既存C APIの上でもうちょっと書きやすいインタフェースが構築できるよ、という話。
C++11だと表現力も夢は広がりますね。特に変換系をフックできるのは落とし穴はあれど大分よさそう。
「便利だけど気を付けないと容易にメンテ不可になる」というのは、まあ「大いなる力には大いなる責任が伴う」的な……
Regular Expressions Inside Out
正規表現のちょっとした落とし穴と、正規表現によるUnicode正規化の実装、そしてUnicodeプロパティチェックの実装の解説。
Unicodeについての知識をなんとか頭の隅から引っ張り出しつつ聞いてたけど、実装の解説がとてもおもしろかった。スピーカーが大学の教授をなさっていることもあってなんだか講義を聞いている気分に。
Type Checking Ruby Programs with Annotations
Ruby に対して型推論……は厳しいので型注釈でがんばる機構を作ったという話。
まあきついですよね、型推論……
質疑で既存コードに対して型注釈を用意していく必要があることについての話があったけど、型注釈をコメント埋め込みではなく別ファイルに分離したことで後からでも用意できるのはいい気がした。(同時にメンテナンス問題も生まれるけど)
あと型注釈の実装をRuby DSLにしなかった理由が気になるけど、なにか問題があるんでしょうか。
Ruby Language Server
Microsoftが提案しているLanguage Server Protocolの紹介と、そのRuby向け実装であるlanguage_server
というgemの解説。
発表を聞いたらだいぶ興味が湧いてきたので、クライアント・サーバ両方の実装方法も含めて調べておきたい。
現時点だと、色んなツール対応するなら Language Server の実装もプラグイン的な機構を備えたほうがよさそう? というのとクライアントからはboot時にサーバで実装されている機能を選択する方法はあるの? というのが気になるところ。
Flor - hubristic interpreter
Ruby でワークフローエンジンを作った話。
インタラクティブシェルまで提供していてすごい。 だいぶ疲れていたところに英語発表でうまく聞き取れず……
LT
どれもこれも濃かったですが、やっぱり最後の @k0kubun さんの発表は凄まじかったなぁ、と。 普通にセッション発表で話して欲しい……
たぶん3日目に続きます。