RustのLT会 Shinjuku.rs #13 の参加メモ

FORCIAさん主催のオンライン勉強会 RustのLT会 Shinjuku.rs #13 に参加してきました。オンライン開催です。

forcia.connpass.com

LT#1: RustでPostgresの拡張を書く ( @matsu7875 さん)

発表資料は https://speakerdeck.com/matsu7874/write-postgres-extensions-with-rust です。

タイトルの通り、Rustでユーザ定義関数を実装する、という内容の発表でした。

私を含め、そもそも拡張できるんだ!と驚かれた方も多かったと思います (PostgreSQLのドキュメント) 。 このユーザ定義関数をC言語 (またはCと互換する言語) で記述し、動的ロード可能なオブジェクト (共有ライブラリ) として提供することで、PostgreSQLから実行できるそうです。

発表では、Rustで実装するときに使えるフレームワークとしてzombodb/pgxを紹介されていました。詳細はスライド参照なのですが、名前や型変換のルールなどは熟知する必要があるのですが、C言語実装と比較して機能差があるわけではなさそうなので、保守しやすい言語・環境で実装できるメリットは大きい、と思いました。

こちらのブログエントリ RustでPostgreSQLのユーザー定義関数を書く│FORCIA CUBE│フォルシア株式会社 では速度についても簡単に比較されており、C言語実装と差はない (Rustのほうがやや速い) ようでした。

www.forcia.com

LT#2: RustでKeyValueStoreをつくる ( @ymgyt さん)

発表資料は https://docs.google.com/presentation/d/12TdMPOAOoVOZugjdTA7O_Y630YHK-wtMmXmw0sn7_Ys/edit です。

KvsdというKVSを開発されています。今回の発表ではTokioを使った client / server システムの実装やテストがメインテーマでした。

github.com

通信部分は、Tokioのサンプルプロジェクトである mini-redis を参考に、TCP上で自前のプロトコルを実装されています。開発時に役立つtipsをいくつも紹介されてました。

  • tokio::sync::Semaphoreを使ったコネクション数制限や、シグナルハンドリングの実装
  • tokio::io::duplexでコネクションの両端を作ることで、TCP listnerを作らずにテストできる
  • TokioでTLSを使うためのラッパとしてtokio_rustlsが便利

ymgytさんのブログエントリで更に詳しい解説がありますのでぜひご覧ください。

blog.ymgyt.io