ブログ枠で RustのLT会 Shinjuku.rs #6 @FORCIA に来ています。ブログ枠が何をすればいいのかあまりわかってませんが、とりあえずブログにメモを残しておきます。
開会
- 会場、懇親会はフォルシア株式会社さんが提供(ありがとうございます!)
- 次回 11/19 で一周年
Rust初心者がRay Tracer書いてみた / keisukefukudaさん
- 前回も初心者、相変わらず初心者
- Ray Tracer は楽しいので、新しい言語を練習するときに良い
- Ray Tracing とは?
- なぜ Ray Tracing ?
- 最初のプログラムが複雑だと無理
- 数値をはけばいいだけ
- こり始めるといくらでもこれる
- 絵が出るので楽しい
- Ray Tracing in One Weekend
- ハマりどころ
- 今後の展望
- 特殊な Ray Tracer 、 SIMD 化、 WASM で動かす
ネタが無いので盛り上がるプログラムを作った / てくのたのしーさん
- タイトルを100倍にすると盛り上がる
- Filmarks さんから映画タイトルをスクレイピング
scraper
reqwest
クレートを利用- 8万5千タイトル
- うち、数字っぽいもの 6500タイトル
- 漢数字は未対応
- 第5位「Tokyo 200100/1000/2100 2200:3200-2200:4100」
- 第4位「貞子300D 200」次元の暴力
- 次元系は他にたくさんある
- 第3位「青鬼 ver.200.0」
- 第2位「裁判長!ここは懲役400年でどうすか」
- 第1位「永遠の0」 0には何をかけても0でした
- まとめ
- 6,000 タイトルに目を通すのは大変
- ネタがないのにLTに申し込んではいけない
- 番外編: マイナス2100度、5200Hzのラヴソング
- Q). このプログラムはどこかに公開されますか
- A). PR投げつけられそうで怖いが、公開します
最近お仕事で使ったcrateの話 / yukiさん
- crateとは?
- rustは標準ライブラリが少なめで、それを補完するもの
- Rust をどこで使った? → ツール
ansi_term
- 修飾付きの文字を表示できるクレート
- 斜体、256色
itertools
scraper
reqwest
reqwest
で HTML を拾って、scraper
で解析
chrono
- 10/26 Rust Tokyo があるので来てね
- Q).
itertools
は並列実行は?- A). ぱっと見なさそうだったが、あるかも
- Q).
Jst
は自分で定義しないと駄目?- A).
FixedOffset
でおーけー
- A).
- Q). 誰かがメンテしているタイムゾーンは?
- A). なさそう
- Q). タイムゾーンは相互変換できるから木にしなくていいのでは?
- A). はい
- Q).
DateTime<Local>
とDateTime<Jst>
の相互変換は?- A). 無理
- Q). クレートはどう探しますか?
- A). Awesome Rust を探す。更新が1年以内ならO.K.
Rustで10日でwebサービスつくった話 / ryusukefudaさん
- 開発合宿で、未使用の技術でプロダクトを作っている
- 去年は Go + Vue.js → プロダクトをリリース
- 今年は Rust + web component を 4 名で
- フレームワーク選定
- actix-web VS rocket
- HTTP2 のためにactix-web
- DB選定
- 使えるもの。MySQL
- フロントバックエンドの通信
- gRPCはRust非対応
- REST API
- 他、 マイグレーションに diesel 、パッケージ管理に cargo
- 選択肢がない
- KVSはRedis
- docker-compose で環境構築
- 辛かったこと
actix-cors
actix-session
actix-redis
などを利用- 良かったこと
- フロントの担当者は、WYSIWYG部分を作っていた
- 予告: 次回はデプロイ編
- デプロイに 50 分かかっている。ビルドが時間かかりすぎ
- Cargo.toml をいじると時間がかかる
- Q). 10日でfutureまで理解できるもの??
- A). 人間にはちょっと早い。コンパイルを通す作戦に出た。途中から理解を辞めた
- Q). デプロイ時間がGoだと?
- A). 5分か10分。Rustはキャッシュ使っても35分。安いプランなので。
- ローカルの Docker for Mac で
--release
ビルドで6分くらい
- ローカルの Docker for Mac で
- A). 5分か10分。Rustはキャッシュ使っても35分。安いプランなので。
What is std::sync::atomicについて / matsu7874
- シングルスレッドではデータの更新は問題がない
- マルチスレッドでは、書いている途中に読まれると、何が読まれるのか不明
- 不可分にする、または、操作する数を 1 つにする
- Atomic とは?
- 書き込み途中に読まれない、読み込み途中に書かれない
std::sync::atomic
Atomic型を提供する- Sync トレイトが実装されており、スレッド間共有が可能
Arc
でラップして使う
- Atomic 以外の方法
- Mutex、 RWLock
- 速度は "perormace comparison of mutex rwlock and atomic types in rust" というスライドを参照
- Atomic が爆速
- AtomicUsize 同士の比較をしたい
std::cmp::PartialEq
トレイトをimpl
する必要がある- 自分で定義したトレイトまたは型しか
impl
できない
- newtype パターンを使えば良い
struct Bar(Foo)
- まとめ
- スレッドでデータ共有するのであれば、専用の型が必要
- Atomic が高速
- new type パターンは便利
WebSocketで人生アガります / 宇宙ツイッタラーXさん
- 最終的にはビットコインで人生がアガる予定(ライブコーディング)
main
関数を作る- bitFlyer API に rust サンプルがあるが、コンパイル通らない
struct Client
ws
クレートのHandler
トレイトを実装on_open
on_message
を実装connect
関数を利用。Client
型でSender
型を受け取って利用- 取引情報が欲しいので、 bord というチャネルを使う
on_open
で"lightning_board_BTC_JPY"
チャネルを"subscribe"
するメッセージをsend
するon_message
はMessage::Text
を受け取った場合のみ定義する- JSON で来る
- 「皆さん、日常的にデシリアライズくらい毎日やってるわって感じでしょう」
serde::Deserialize
で JSON をパース- JSONからコードを自動生成するサイトがあるらしい
- 変なJSONも来ていてエラー
- 「怒りの
unwrap
をしていたけど辞めましょう」 - デシリアライズに成功したときのみ表示 → 成功
- 「怒りの
- まとめ
- リアルタイム取引は早いのがいい、 C++ は無理でしょう、 rust は適している