Rust.Tokyo 2019参加レポート
Rustのone-day conferenceに参加した時の情報をお送りします。ここに書いているのは私個人のメモレベルなので、詳細は講演者の方々が公開して下さっているスライドなどをご参照ください。
Rust.Tokyo 2019
追記 2019/10/31
公式サイトのほうで発表資料を公開できるよう準備してくださっているようです。すでにアクセスできる資料を探すには下記のTogetterが役立つかもしれません。
https://togetter.com/li/1422930
開催のきっかけ
2018/11/26に@dorayaki_kunさんがTwitterでつぶやいたことがきっかけとなり、その約1年後に開催にいたった。中心メンバーは先のつぶやきにすぐに賛同した@chikoskiさん、@T5ku5shiさん、@helloyuki_さんの4人だったそうです。
RustのTechカンファ、日本で開きたいですよね!と言われて確かに〜となった— どらやき (@dorayaki_kun) November 26, 2018
Conferenceの目的
-
- もっとRustを盛り上げたい
- Rustを好きな人をつなげたい
日時/場所
-
- 開催日時: 2019年10月26日 10:00~18:00
- 場所: グラントウキョウサウスタワー41F
要約
Rustはゼロコストの抽象化を実現するシステム用の言語であり、言語の仕様レベルでマルチスレッドの安全性が保障されています。その応用範囲は非常に広く、組込みからWebフロントエンドにおいて活用され始めています。
このone-day Cunferenceでは、組み込みの画像認識に関するシステム開発や数値計算での採用事例や、WebAssemblyへのコンパイルを通したWeb appにおける開発のティップスなどが紹介されていました。講演資料を公開してくれている方が多くいらっしゃいましたので、興味のあるテーマがありましたらぜひそちらをご参照ください。
目次
-
- Seminor 1 : Visualization of mechanical CAD drawings using WebAssembly and WebGL
-
- Seminor 2 : エッジMLシステムをC/C++からRustへ移行した事例
-
- Seminor 3 : Rustによる数値計算の現状と課題
-
- Seminor 4 : Web-based Data Visualization with Rust and WebAssembly
-
- Seminor 5 : Porting Rust libstd to NuttX/Cortex-M4F and prototyping a simple web server
- Seminor 6 : Webフレームワークを作成してみた話
Seminor 1 : Visualization of mechanical CAD drawings using WebAssembly and WebGL
発表者
-
- 小橋 昭文さん
- CADDi (Gold Sponsor) CTO
CADソフトの開発にWebAssemblyとWebGL使った事例紹介
Webアプリの可能性に挑戦している印象でした。
WebAssemblyへの注目
Webアプリのフロントエンドの役割が年々大きくなる中で、より小さく高速な実行環境が必要とされてきた。そのような背景の下で誕生したのがWebAssemblyである。
WebAssemblyの採用例としては次のようなものがある。
Figma
WebAssembly cut Figma’s load time by 3x
Unity
WebAssembly is here!
ebay
WebAssembly at eBay: A Real-World Use Case
[1Password]
1Password X: May 2019 update
WebAssemblyでの開発にRustを使うメリット
-
- Rustそのものが持つメモリ等の安全性と、WebAssemblyへのコンパイルの容易さを享受できる
-
- RustとJavaScriptの相互呼び出しが用意
wasm-bindgen
WebGLの利用のしやすさ
kiss3d
DXF等のCADファイルへの対応
dfx
Seminor 2 : エッジMLシステムをC/C++からRustへ移行した事例
-
- 加藤 倫弘さん
-
- DeNA
-
- 講演資料
https://docs.google.com/presentation/d/1HOL9jheJnKkh2q7w3hU_px-je1qL7lxrSXV-0P1hces/edit#slide=id.p1
ドライブレコーダにDeep Learningを用いたコンピュータビジョン技術を実装するためにRustを利用。もともとC/C++を利用していたが、次のような課題を抱えていた。
-
- R&DではPythonで作ってそれを組み込みに移植に時間がかかる
-
- 高速な行列演算を作りこむのに時間がかかる
- 仕様変更や追加開発に対応するための大規模な修正が難しい
Rustへの移行の決め手
-
- C/C++と同等の性能を示すベンチマーク
-
- クロスコンパイルのサポート
標準ライブラリ(std)が使える
発表者はターゲットの名言を避けたが、おそらくRust Platform SupportのTier2レベルのどれかかと思われる。
テストやビルド、ドキュメントなどのシステムが言語として十分にサポートされている
開発チームごとのオレオレフレームワークが生じにくい
Pythonのパッケージとしてビルドすることも容易
PyO3
Seminor 3 : Rustによる数値計算の現状と課題
-
- Toshiki Teramuraさん
-
- 株式会社科学総合研究所
-
- 講演資料
https://docs.google.com/presentation/d/1iujcfg2y3CMMgEO8BvX2__w_dbl4zQWQrK3ULaStD4E/edit#slide=id.p
数値計算とRustの言語仕様
-
- LLVMを通した最適化でCと同程度に高速化できる
-
- Traitを用いた抽象化が可能
同様のことはC++のconceptでも実現できるが、C++20への対応が必須となる
参考: Constraints and Concepts
数値計算に便利なcrateの例
rayon
work stealingによるデータ並列ライブラリ
num-traits
ndarray
NumPyに似た行列演算をRustで同じように利用できる
Seminor 4 : Web-based Data Visualization with Rust and WebAssembly
-
- 尾上洋介さん
-
- 日本大学文理学部情報科学科准教授
-
- 講演資料
データの可視化をもっと手軽に
Seminort 1でもあったが、専用のアプリとしてではなく、ブラウザがあればどこでもデータを可視化できるツールを作りたいのが動機。
wasm-packのティップス
-
- wasm-packでのビルド
wasm-pack build
npmパッケージとして公開
wasm-pack publish
Google Chromeを実行環境としたテストの実行
wasm-pack test –chrome
wasmの今後
wasmのパフォーマンスを向上させるために、今後も下記のような機能が追加されていくらしい。
-
- pthread likeなスレッドのサポート
- SIMDのサポート
Seminor 5 : Porting Rust libstd to NuttX/Cortex-M4F and prototyping a simple web server
-
- Yoshinori Suginoさん
- Sony Home Entertainment & Sound Products Inc.
Posix対応のreal-time OSであるNuttXをターゲットにRustを使ってどうにかこうにかクロスコンパイルした経験談。
Seminor 6 : Webフレームワークを作成してみた話
-
- 原 将己さん
- WANTEDLY
Rust 1.39でasync/awaitの安定化が予定されているが、それに伴ってWebのバックエンドとしても使いやすくなることが期待されている。講演者それを勝機と狙ってRustの機能を利用しながら、RustらしいWebフレームワークの構築(nails)に取り組んだ事例の紹介でした。
その他(資料のみ)
-
- Secure Coding Practice in Rust
-
- Rust製テキストエディタでFuzzingする話
- kenkooooさんのRust製ウェブアプリ kenkoooo/AtCoderProblems