Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

RustConfメモ

さすがに時差の関係で全部は見られませんでしたが、出席していたのとアーカイブが残っていたので、いくつか気になったものを見てみました。ただ、家事などの合間に聞き流ししていた内容を思い出して書いているので、記憶が曖昧なところがあります。ご了承ください。すべてのセッションの動画リストはこちらにあります。

字幕はいくつか見てみましたが、自動生成でしょうか。second が segment 、toml が thermal になっていたりと少し間違っている箇所はありました。ただ、だいたいあってるので大丈夫そうです。もしよかったら、動画も見てみてください。

Whoops! I Rewrote It in Rust by Brian Martin

Twitter 社の方が Rust について語っているセッションでした。Pelikan という Twitter のキャッシングフレームワークに関する話をしています。元が C 実装だったコンポーネントを、Rust で書き直してみたというセッションです。個人的には1番おもしろくて、こういう仕事したいなと思うセッションでした。

github.com

特徴としては下記でしょうか。

  • Memcached コンパチ
  • tokio をネットワーキングに使用
  • C のストレージライブラリを使用

C をもともと使用していたようですが、Rust で書き直した際に 10%-15% のスループットの低下が観測されました。また、レイテンシーも C と比べると少し劣るというベンチマーク結果が出たようです。キャッシュ機構でのパフォーマンスの低下は、そのまま必要なクラスタの追加が必要ということにつながってくるため、そう簡単には許容できません。

C 実装では epoll を使用していたので mio を使用して epoll を使い C 側と揃えるようにし、C 実装と同じように簡潔なイベントループにしました。C のコンポーネントを Rust でほぼ書き直すなどの対応を取りました。要するに C 側の実装に揃うように Rust 側のコードを書き直したのです。すると、C と Rust のスループットレイテンシーはほとんど同じになりました。

その他、Rust で書き直した際に感じたよさに関して、いくつか語られていました。

最終的には Memcached よりもレイテンシの低いキャッシュサーバーが作れてしまったとのこと。これはテンション上がりますね。

Supercharging Your Code With Five Little-Known Attributes by Jackson Lewis

Rust のコードを眺めていると登場するアトリビュートについて、とくに便利なものを紹介しています。紹介されていたものは下記でしょうか。

個人的には readonly というアトリビュートは今すぐ使ってみようと思いました。

Fuzz Driven Development

略して FDD 。Fuzzing を使った開発の進め方について紹介しているセッションです。JSON パーサーを例にどのように Fuzzing 駆動開発を進めていくかについて解説されています。

最初の方に FDD の流れが説明されます。下記のような手順で FDD を行うことができます。

  1. Invariant: 不変条件を決定すること。
  2. Fuzzing Target: Fuzzing するターゲットを決定すること。
  3. Run until failure: 失敗するまで Fuzzing テストを実行すること。
  4. Reflect: なぜ失敗したか考えること。
  5. Develop/Unit tests: ユニットテストを書き、コードを追加して失敗したケースを通るようにすること。
  6. Iterate: 2に戻って、以下繰り返し。

JSON パーサーを例に取ると、

  1. パニックしないケースを考える。
  2. Fuzzer を使ってパーサーに値を入れられるコードを書く。
  3. Fuzzing Target を実行する。
  4. 結果を振り返る。
  5. 落ちたケースに関してユニットテストを書いて、対応する実装を追加する。
  6. 書いたケースが落ちないかの確認と、また別のケースでパニックするまで実行する。

といった流れになるようです。

実際に FDD をしながら開発を進めていく様子が話されていました。加えて、Rust のファジングについては Rust Fuzz Book が詳しいです。

Project Update: Libs Team by Mara Bos

Rust にコントリビューションしているとよく見る方ですね。

Mutex をめぐって、 Rust の標準ライブラリに parking_lot を入れるかどうか検討され、結果300以上のコメントがついたが力尽きてしまったという話が紹介されていました。議論が紛糾したのは非常に大きなインパクトを多方面に与える変更だったからです。

github.com

詳細は追いきれていませんが、Mara さんがその後いくつか修正を加えてこの修正を前に進めました。そのときの経験談について語られています。

こんなことがあったんだなあ、を知ることができたのでおもしろかったです。あと futex というシステムコールを知りました。

手元のアイスティー?がほとんどないのにまだ飲むか!みたいなツッコミを画面の前で入れてしまいました。

Hacking rustc: Contributing to the Compiler by Esteban Kuber

この方も Rust にコントリビューションしているとよく見る方ですね。

rustc へのコントリビューションを開始する人向けに、どうやってコントリビューションをしていくか、流れなどを説明してくれています。x.py などのツールから、Rust Compiler Dev Guide、RFC に関する話など網羅的に話してくれています。

Identifying Pokémon Cards by Hugo Peixoto

自分のポケモンカードのコレクションの整理に Rust を使ったという話。どのようにカードを画像認識させ、どのような Rust のクレートを使ったのかを説明しています。ホログラムの入ったカードの認識は難しいみたいです。