なぜ Zig の採用を検討しているのか

そもそもの目的

自分の会社では Erlang VM を利用した製品をメインに利用しています。ただ Erlang VM 遅いんです。少なくとも暗号処理であれば Rust の方が 2 倍ほど速いです。Erlang VM 自体 JIT を採用したり、いろいろ頑張ってくれているのですが劇的な高速化というのは今すぐには難しいのが現実です。

Erlang NIFs に Rust を検討していた

最初の候補は Rust を NIFs として扱う Rustler というのがあり、これと Quiche を組み合わせ作り込んでいく予定でした。

Zigler を見つける

すでに Erlang VM + Zig を試している人が居たのが大きいです。

暗号ライブラリ

Zig はなんと std.crypto で暗号ライブラリがとても充実しています。これも決め手の一つです。暗号ライブラリの作者が libsodium の作者というのもぐっときます。

async/await と multithread

マルチスレッドもサクッといけそうです。非同期処理周りはまだまだ課題はありますが、epoll / kqueue さえ動けば不満はないです。io_uring はまだ先かと思っています。

Wasm / WASI 対応

Zig は今時の言語っぽく最初から Wasm や WASI への出力に対応しています。今は、ブラウザで音声や映像を処理する場合は Wasm がほぼ必須となってきています。

Zig には性能と書きやすさを期待

すくなくとも Erlang VM よりは早いですし、自分にとっては書きやすいと感じています。

  • std ライブラリ以外は利用する予定がないのでパッケージマネージャーは不要
  • build.zig はよくできている
  • コードがとにかく読みやすいので困ったらコードを読むが苦じゃない
  • メモリ管理を独立させるという考え方がとても良い
  • 今後もシンプルさを維持してくれそう

今後

まずは学生に QUIC と TLS 1.3 の実装を進めて貰いつつ、自分たちも一緒に学んでいこうと思います。開発課程は https://discord.gg/shiguredo で公開して進めていくので興味ある人は見てみてください。

Rust じゃダメなんですか?

ダメじゃないです。むしろプロトコル界隈は Rust が多いです。Cloudflare と AWS は Rust で QUIC を実装しています。最近では Google も Android 向けの DoH over HTTP/3 は Rust (Cloudflare の Quiche) を利用しています。

--

--

Erlang/OTP / 時雨堂 / WebRTC / E2EE / WebTransport

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
V

V

Erlang/OTP / 時雨堂 / WebRTC / E2EE / WebTransport