IoTプラットフォーム開発におけるRustの活用
Rust.Tokyo 2023 (2023-10-21)
Takumi Shimada (@garasubo)
自己紹介
目次
2017年からIdein社内でどのようにRustが活用を紹介
Actcastの概要
Actcast
Actcastとは
アーキテクチャ概観
アーキテクチャ概観
Rustで書かれたclientプログラム
一部がRust製
Rustで書かれたAPI Server
Rustの変遷とプロダクトへの影響
Rust導入の経緯
デバイス側ファームウェアの実装言語としてRustを導入(2017年)
など
その後、APIサーバーなどのプラットフォーム側の実装でも利用
Rustの変遷
2017年から現在に至るまでRustとそのエコシステムは大きく変わった
async/awaitの導入
ファームウェアではネットワーク通信・OSコマンドの実行を並行して行うので非同期処理が必須
async/await対応の難しさ
もともとasync/awaitを使うことを前提に書かれていないコードが多いので対応が難しい
などなど
failureからanyhow/thiserrorに
failureからanyhow/thiserrorに
failureで定義した巨大なエラー型つくり広いコンポーネントで使っていた
サードパーティーライブラリの変遷
現実に起きた問題と対処方法
Rustでもメモリーリークはおきる
Rustにおけるメモリー安全性はメモリーリークは保証できていない
例:std::mem::forgetは明示的にメモリーリークを起こすがsafeである
例:std::rc::Rcで循環参照をつくると解放されない領域ができる
例:joinしないthreadは生き残り続けるかもしれない
リークが起きた例
対策
Rustはバグが少ないと言っても過信は禁物
他の言語でも有効な対策はRustでも大事
開発の工夫
まとめ
Rustを用いた開発の歴史と困難とそれに対する工夫を紹介