Analog3 ミッションコントロールを Rust に移植

Analog3 プロジェクトでもう一つ障壁になっていた問題が、システムの統括をするモジュールのコーディングが大変に複雑だという点です。今まで何度か C++ で書いていたのですが、C++ はどうも言語仕様が煩雑なのとメモリ管理と例外処理がかなり危なっかしいのとで、開発の速度がなかなか上がらないのです。Analog3 を仕切りなおしている今、統括モジュールも前回の Master of Modules を捨てて新しく Mission Control というのを作り始めました。そしてまた懲りずに C++ です。また泥沼にはまるのかなあ?

そんなこんなで、メモリ管理やエラー処理が良い感じにできていそうな Rust 言語にずいぶん前から注目していたのですが、周りに「rust やるよ」と語りだして早6-7年、ひどいやるやる詐欺ですがまだ Rust で本格的なアプリを書いたことがありません。ですが、新規に書き始めた Mission Control、まだ 300行いってません。今ならまだ Rust に切り替えられるんじゃないの?

ということで移植作業やりました。

主に CAN コントローラライブラリの再利用のところが難しくて思ったより10倍大変でしたが所詮数百行程度のもの、無事に移植完了しました。ただ、何をどうしたかブログに書くのは無理じゃないかな、というほど試行錯誤しました。AI の助けもかなりあり。AI がなかったら一日では終わらなかったな。悔しいけど。

まだ README もないプロジェクトですけどこちら。

https://github.com/naokiiwakami/analog3.mission-control

Rust を書き始めた感想、は、まだ述べるには早すぎるほど初心者ですけど、噂通りメモリの扱いが秀逸です。C++ も Rust をまねたのかメモリの所有者の移動みたいな概念を導入しましたが、このせいで C++ の言語は複雑怪奇になりコードを書くのが3倍大変になりました。でも Rust はその辺は初めから言語仕様に織り込み済みなのでもっとすんなりしていて、慣れたらサクサクかけるでしょう。

あと、メモリの扱いの制約が異様に厳しくて危ないコードを書くとコンパイラが許してくれません。覚えるまで大変ですけど、慣れたら心強いのではないかと思います。このアプリには CAN 接続の C ライブラリをつなげる必要があるのでそのあたりのメモリ周りが当然危なっかしくなります。そしてコンパイラに弾かれまくって全然ビルドできず。四苦八苦してやっとコンパイラが通るようになって気づいたら、危ない部分は全部一ファイルの中に納まって外からは見えないようになっていました。よくできています。ちょっとびっくりしました。

エラー処理の部分はまだ書いていませんが統一感があって面白そうです。例外は昔からあまり好きではないのですが Rust では例外とはちょっと違うアプローチをとっているようです。楽しみです。

シンタックスは独特でなかなか慣れませんが C と Python を混ぜたような感じ。まあ書いているうちに慣れてくるでしょう。

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.