Rust.Tokyo 2019 に行ってきた

f:id:hioki-daichi:20191026222054p:plain

いやー熱かった!!

『つよつよな人たちばかりなんだろうな・・他に知り合いもいないし・・場違いかな・・』

と当日まで弱気だったけれど、結果ものすごく楽しかった。昼は勇気が出ず一人でラーメンを食べたけど・・。(ラーメンの完成度がすごく高かった。さすが東京。)

行ってみてわかったのは、やっぱりみんな lifetime につまづくよねということ。自分だけじゃなかった。

『Lifetimes: A Survival Guide』の回では Eric Findlay さんが lifetime について熱く語っていた。質疑応答も白熱していた。懇親会でも lifetime の話は盛り上がった。ちなみに自分も過去つまづいて以下の記事を書いたりした。

qiita.com

ライフタイム熟知したい。。

オープニングトークではエラーの変遷の歴史などが語られていた。

標準の error → error-chain → failure という流れだったが、標準の error が使いにくいのはどうなの?となり https://github.com/rust-lang/rfcs/blob/master/text/2504-fix-error.md で直していくぞ!となりつつも failure 側も 1.0 にしていくぞ!というような流れだったとか。(間違っているかも)

自分は最初から failure を使っていて error と error-chain の存在を知らなかったためなるほどと思った。

qnighy さんの発表でも Error について言及されていて、

speakerdeck.com

何やら Trait 派や private enum 派、public enum 派がいるらしい。

あとは https://github.com/gothinkster/realworld などが紹介されていたり、( Rocket のサンプルを見つけた: https://github.com/TatriX/realworld-rust-rocket )

Rust Async + Romio + juliex の組み合わせ、公式チームなる存在を知ったり、

gRPC 実装として https://github.com/hyperium/tonic が紹介されていたり、(懇親会では https://github.com/tower-rs/tower-grpc を使っているという方がいた。) GraphQL 実装として https://github.com/graphql-rust/juniper が紹介されていたり。

Rust で安全に実装するための心得

speakerdeck.com

パフォーマンス向上のためにリソースの開放を遅らせることがあるとのことで、もしかしたら秘密鍵とかパスワードとか乱数などのセンシティブなデータがメモリ上に残っているかも知れない、Heartbleed 怖い、防ぎたい、そんな時には Zeroize があるよ。というような話だったり、

Timing leaks という応答時間の差でパスワードを探っていくやつには https://github.com/dalek-cryptography/subtle で対策できるという話だったり、

Integer Overflow に関しては普通に $ cargo run すると検知してくれるが、--release で実行した時には検知しないので wrapping_* 系など使いましょう(そんなことは言っていなかったかも)という話だったり、

Fuzzing の話だったり。https://github.com/rust-fuzz/cargo-fuzzhttps://github.com/rust-fuzz/honggfuzz-rs が紹介されていた。cargo-fuzz がよく使われているとのこと。そういえば LT で Linda_pp さんが fuzzing を実演していた。(ご本人を初めて拝見した。ひょっとしたら本当に犬かもしれないと思っていた。v への alias に親近感を感じた。)

あとは https://github.com/rust-lang/rust-clippy では warning を出してくれたり、 https://github.com/RustSec/cargo-audit では Cargo.lock のチェックをしてくれるらしい。RustSec のデータベースを参照しているとか。 https://github.com/crev-dev/cargo-crev/ なども紹介されていた。

Web-based Data Visualization with Rust and WebAssembly

speakerdeck.com

wasm については最近 yewstack/yew を触っていて『なんだかよくわからないけど $ cargo web start すると wasm というやつが動くぞ』程度の認識だったけれど wasm32-unknown-unknown や wasm-bindgen, https://github.com/rustwasm/create-wasm-apphttps://github.com/rustwasm/wasm-pack など wasm 周辺のツールが紹介されていて非常にためになった。

wasm の良い点やいまいちな点も大変参考になった。Rust と JS との間の行き来が頻繁になると Rust のメモリにのっける手間の分いまいちというお話だったり、良い点として SIMD を挙げていたり。昨今 CPU の FLOPS は伸びていて JS だと CPU パワーのごく一部しか使えないけれど wasm なら 128bit の SIMD をサポートしていたり Intel の良いやつの 512 bit も将来的にサポートするだとかで (SIMD がいまいち何だかわかっていないですが..) 明るい未来が待っていそうな感じ。

まとめ

スタッフ、スピーカー、参加者のみなさま、こんなに楽しい機会をどうもありがとうございました。Rust がますます好きになりました。本当におつかれさまでした。