- はじめに
- タイムテーブル
- この会について
- 自己紹介
- 「並行・並列ライブラリの紹介」
- 「Python から Rust へ置き換えてみている際の知見」
- 最近のRust関連の活動
- Rustの評価順序について
- 自由議論
- おわりに
タイムテーブル
時刻 | 内容 | 発表者(敬称略) |
---|---|---|
13:30 | 開場 | |
14:00 | 開始 | |
14:00〜14:05 | この会について | 加藤 勇也(主催進行ありがとうございます。) |
14:05〜14:15 | それぞれ自己紹介 | |
14:15〜 | 「並行・並列ライブラリの紹介」 | Yoshi |
14:30〜 | 「Python から Rust へ置き換えてみている際の知見」 | kirin |
15:15〜 | 最近のRust関連の活動 | hhatto |
15:35〜 | Rustの評価順序について | べにじゃけ |
16:00〜 | ざっくばらんに議論 | |
17:00 | 撤収 |
この会について
Sansanさんにて開催。場所提供ありがとうございます。オシャレ空間でございました。
jp.corp-sansan.com
自己紹介
幅広い人達が参加されていたように感じます。Web開発、データ解析、ゲーム開発、DL開発など。あとは、プログラミング言語そのものが好きな人たちという印象。
「並行・並列ライブラリの紹介」
「Introduction to Rayon」 #rust_kansai pic.twitter.com/rdzTuoqHmp
— べにじゃけ (@ben1jake) 2019年12月1日
Web開発。趣味がコーディング、動物鑑賞など多趣味。
Rayonライブラリ:データ並列処理ライブラリ。
iter()→par_iter()で並列処理できるようになる。
Rustなインターフェース。
並列処理の方が処理時間が大分早く、安定している。
Q&A
1. 標準ライブラリと似て簡単に使えそう。似ていないところはある?
標準に実装されていない、低レイヤなところは独自。
2. 内部的にスレッドプールを利用している?
YES
3. SIMD命令入ってくる?
そこまで見れていない。標準のコンパイラでもSIMDは入らない。
「Python から Rust へ置き換えてみている際の知見」
「PythonistaがRustを使ってハマった点」 #rust_kansai pic.twitter.com/1fdjMTcWWh
— べにじゃけ (@ben1jake) 2019年12月1日
PythonistaがRustを使ってハマった点
自営業プログラマ。Python、C/C++、Rubyなどを経験。Osaka Python User Group in English.をやります。
プログラミングRust 電子書籍 in Englishで勉強していたが、復習が難しい。自転車本購入。
借用*1
オブジェクト指向な思想では実装できない。
参照だけなら問題ないが、借用が入ると話がかわる。
self、selfしてmultiple borrowしてエラー。
直接フィールドのみを受けるようにする。
スタティックメソッドにしてしまう。
→これがベストプラクティスではないのでは?
Vecの一部が欲しい→分割統治とかに落とし込めるとRayonなど使えたりできないか。
Rust実装時に根本見直しが必要になる場合もしばしばある。
iter(イテレ←会の中での呼び方)
iterを処理しないと中身へアクセスできない。
一回中身を受けないといけない。
iterなので開放されてしまう
設計を考える上での学びが多い
最近のRust関連の活動
パフォーマンスチューニングが好き。コンパイラに任せてバグをつぶせることに魅力。
Rustを使って様々な開発されている(10個くらい)。
cargo-strictとか GitHub - hhatto/cargo-strict: avoid unwrap() method
Rustの評価順序について
評価順序によって結果が変わるような実装をした場合。
Rustは左から右に評価されるようだが、ドキュメントに明記されていない。
まだオープンのissueもある。
自由議論
テスト関連の話が多かった。経験不足で、理解追いついておりません。
おわりに
今回も刺激的な時間を過ごさせてもらいました。参加枠が20名弱に設定されており、全員で議論できるような環境になっているのがこの会の魅力と感じます。そして、加藤さんの進行が巧すぎる。
自由議論でテストに関して盛り上がったので、そこらへん自分でも触っていこうという気持ちになりました。ありがとうございました。
*1:変数に対して、1つの借用しか作れない。参照もできないし元の変数も変更できない。