Rust.Tokyo 2019 に行ってきた
いやー熱かった!!
『つよつよな人たちばかりなんだろうな・・他に知り合いもいないし・・場違いかな・・』
と当日まで弱気だったけれど、結果ものすごく楽しかった。昼は勇気が出ず一人でラーメンを食べたけど・・。(ラーメンの完成度がすごく高かった。さすが東京。)
行ってみてわかったのは、やっぱりみんな lifetime につまづくよねということ。自分だけじゃなかった。
『Lifetimes: A Survival Guide』の回では Eric Findlay さんが lifetime について熱く語っていた。質疑応答も白熱していた。懇親会でも lifetime の話は盛り上がった。ちなみに自分も過去つまづいて以下の記事を書いたりした。
ライフタイム熟知したい。。
オープニングトークではエラーの変遷の歴史などが語られていた。
標準の 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 について言及されていて、
何やら 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 で安全に実装するための心得
パフォーマンス向上のためにリソースの開放を遅らせることがあるとのことで、もしかしたら秘密鍵とかパスワードとか乱数などのセンシティブなデータがメモリ上に残っているかも知れない、Heartbleed 怖い、防ぎたい、そんな時には Zeroize があるよ。というような話だったり、
Timing leaks という応答時間の差でパスワードを探っていくやつには https://github.com/dalek-cryptography/subtle で対策できるという話だったり、
Integer Overflow に関しては普通に $ cargo run
すると検知してくれるが、--release
で実行した時には検知しないので wrapping_*
系など使いましょう(そんなことは言っていなかったかも)という話だったり、
Fuzzing の話だったり。https://github.com/rust-fuzz/cargo-fuzz や https://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
wasm については最近 yewstack/yew を触っていて『なんだかよくわからないけど $ cargo web start
すると wasm というやつが動くぞ』程度の認識だったけれど wasm32-unknown-unknown や wasm-bindgen, https://github.com/rustwasm/create-wasm-app や https://github.com/rustwasm/wasm-pack など wasm 周辺のツールが紹介されていて非常にためになった。
wasm の良い点やいまいちな点も大変参考になった。Rust と JS との間の行き来が頻繁になると Rust のメモリにのっける手間の分いまいちというお話だったり、良い点として SIMD を挙げていたり。昨今 CPU の FLOPS は伸びていて JS だと CPU パワーのごく一部しか使えないけれど wasm なら 128bit の SIMD をサポートしていたり Intel の良いやつの 512 bit も将来的にサポートするだとかで (SIMD がいまいち何だかわかっていないですが..) 明るい未来が待っていそうな感じ。
まとめ
スタッフ、スピーカー、参加者のみなさま、こんなに楽しい機会をどうもありがとうございました。Rust がますます好きになりました。本当におつかれさまでした。