blog top

卒論でRustを書いた話

学部の卒業研究でどうしてもRustを使いたかった人の話です。

何でRust?

研究内容がコンピュータ上でのシミュレーションだったのですが、大量のデータを成形・解析する必要がありました。研究を快適に行うため、高速に動作するRustを選びました。

というのは建前で、ほとんどロマンのためにやりました。楽しかったです。

開発環境・ビルド環境

コードの開発自体はローカルPC (M1 Mac) で行いました。

しかしながらシミュレーションは研究室のサーバー (CentOS) で行っていたので、クロスコンパイルする必要がありました。

できるだけ脳みそを使わずにコンパイル用の環境を整えたかったので、

というシンプル脳筋構成にしました。ビルド環境の準備はこんな感じです↓

docker run --platform=linux/x86_64 -it -v $(pwd)/src:/src --name my-centos-container centos:7 /bin/bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
yum install -y gcc

docker start -i my-centos-container

Dockerfileも用意していないですが、ちゃんと動くのでヨシ。

Rustを使う上で意識したこと

ロマンを追い求めてRustを使ったわけですが、いくつか注意した点があるので書いていきます。

これらはRustに限った話ではなくて、書籍『プリンシプル オブ プログラミング』に影響を受けた気がします。

① 日々のタスクはスクリプト言語で書く

ディレクトリを作ったり、一連のコマンドを呼び出したりといった細かいタスクは、Pythonやシェルスクリプトが得意とするところです。

パラメータが少し変わるごとにコンパイルするのは面倒だし、そもそも大体のタスクのボトルネックは自分のPC操作なので、パフォーマンスが気にならない部分は心を鬼にしてRustを封じました。

② CLIの出力は可読性の高いテキスト形式にする

Rustで作ったコマンド(CLI)は一つではなくて、複数のコマンドをまとめて扱っていました。

このとき各コマンドは必ず空白区切りの数値データを返すようにしており、これにより

といったメリットが得られました。

③ 最適化はしない

最適化は(なるべく)しません。

最適化と称してバグを混入させる自信があったし、だいたいO(N)くらいの処理しかないのでRustの処理速度なら気にならなかったです。

最適化を避けた結果、この研究期間中に一度もバグを発生させず運用する事ができたので良かったと思います。

Rustでよかったこと

予想通り良かったのは、

逆に意外と良かったのは、

Rustで苦労したこと

あまり無いですが、強いて言うならライブラリ(クレート)のメジャーバージョンがだいたい0なので、使えそうなものを探すのに神経を使いました。

まとめ

もし研究でRustを使いたい変人が他にいるなら、ぜひ背中を押したいと思います!

近くに人間の仲間はいないかもしれませんが、Rust自体が懇切丁寧に教えてくれるのと、今どきAIに聞いたらだいたい答えてくれます。

デメリットを大きく上回るメリットとロマンが手に入るので、気軽にチャレンジしてみてください!