RubyKaigi 2019 参加記録(3日目)

RubyKaigi 2019 3日目のメモです。

1日目

autopp-tech.hatenablog.com

2日目

autopp-tech.hatenablog.com

Ruby Committers vs the World

CRuby コミッタ陣が Rubistからの質問に答えたり、公開開発者会議が行われたりする特別セッション。

ドキュメントの貢献が欲しいとのことで何かできないかなー、と思ったり。

Numbered Parameters に関しては「どうせ引数1つの時しかユースケースないでしょ」という意見があったが、個人的には sort_by などにも使いたいと思っていたので困る……だからといって Scalaプレースホルダほど複雑ではなくてもいいと思うが……

Cleaning up a huge ruby application

Cookpad の巨大レポジトリでどうやって不要コードの削除を行っているのかの話。不要コードを判断するテクニックとしては「アプリケーションのリクエスト/実行履歴からの類推」「ISeq の lazy load をフックしたロギング」「oneshot coverage」の3本立て。

上の記事で紹介されている oneshot coverage が無事に本番投入され、大きなオーバーヘッドもなく動いているとのこと。めでたい。

しかしフルタイムコミッタが問題解決に力を貸してくれるというのは本当に強い……

Best practices in web API client development

API のクライアントライブラリを作る際のベストプラクティスについて。ライブラリの責務ややるべきこととやらないほうがいいこと、そして tips や good pattern など。

自分も API クライアントをちょいちょい作ることがあるので大変身になる話だった。そして他言語の API クライアントを作るのにも適用できそう。

curl 共通言語だよね。

Performance Optimization Techniques of MessagePack-Ruby

MessagePack の基本と Ruby, Java, C# 用ライブラリでの高速化手法の解説。

Rubyインタプリタ側が提供している copy-on-write な API を利用したり、Java で継承によるオーバーヘッドを回避するために動的クラスロードを駆使するなど、勉強になるテクニックが多かった。

しかし C# 版が Protocol Buffer や ZeroFormatter に勝っていたのは何事……?

Ruby on Timezones

Ruby 2.6 で入った Timezone サポートがどんな経緯で入ったのかの説明。

Time.at のキーワード引数 in: などに Timezone オブジェクトなるものが渡せるようになったが、組み込みで Timezone クラスを提供するわけではなく、あくまで tzinfo や timezone gem が満たしている規定のインタフェースをもったオブジェクトを受けとるとのこと。そもそもタイムゾーン指定の既存仕様がないので、うかつな実装は避けたかったとのこと。なるほど。

The send-pop optimisation

CRuby においいて呼び出したメソッドの戻り値を使わない、sendpop のような冗長な命令実行を最適化する話。

理屈は聞いたらわかるけど、スタックの整合性(特にブロックからの return)を呼び出し側/呼び出された側で帳尻をあわせるというのは大変な話……

おまけとして末尾呼び出し最適化をやってみたら分岐コストが高くてあまり効果がなかったという話が少し気になった。確か Lua とかでは末尾呼出しを専用の命令にしていたと思うが、Ruby では難しいのだろうか?

Keynote: Optimization Techniques Used by the Benchmark

Sequel, Roda などの作者による高速化テクニック。

「処理を遅延する」「Object allocation を減らす」「キャッシュできるものはキャッシュする」「インスタンス変数よりローカル変数」など、1つ1つはそうですねという感じで同意できるが、それら全てを Sequel のようなライブラリで徹底してやり切っているというところに凄まじい情熱を感じる。まるで RTA のような。

ライブラリ側でここまでやりきってくれているからこそ、我々が書くアプリケーションコードで楽ができていることを考えると頭が上がらない。


今年も濃厚で刺激的な3日間を堪能できました。懇親会や各種サービスを提供してくださったスポンサーの方々、そしてスタッフ・スピーカーの皆様、ありがとうございました。