Rust を始めました
Rust を始めました
C++ 好きとしては外せない? Rust の学習を始めてみました。
Rust とは
特徴
Rust については調べたらいろいろわかるのですが、3 大特徴を挙げておきます。
- 処理速度が速い
- 極めて高い安全性(メモリ、型、スレッドの各安全性)
- 効率的な並行処理が可能
標準で単体テストが揃ってたりするところもいいですね。
C/C++ の代替として利用が広がる
- Rustの採用が進んだ「Android 13」、メモリ破壊バグは減少、脆弱性の深刻度も低下傾向
- Rust言語で開発したWindowsカーネル、Canaryチャネルで展開開始
- 「Chromium」へのRust言語採用はサードパーティライブラリから ~Googleが解説
性能が要求される OS カーネルとかゲームエンジンあたりへの採用が進んでいきそうです。
人気
Stack overflow 2022年 の調査より
- 最も利用されている言語 :14 位(← 16 位 ← 19 位)
- 最も愛されている言語 : 1 位(7 年連続)
- 使用していないが学びたい言語 : 1 位(← 5 位 ← 5 位)
※()内は過去年度からの推移。すべて上昇傾向にあるのがわかります。
Rust と LLVM
Rust は LLVM の上に構築されているとのことで、イメージとしては以下のような感じっぽい。

つまり、LLVM の最適化の恩恵が受けられるということ!
使ってみよう
学習の手始めの題材としては、C/C++ との速度比較でもしてみよう。
学習したてだとロクにまともな Rust も書けないので、いろんな記事も参考に。
ということで、Spigot アルゴリズムを用いた円周率 2,400 桁(小数点以下 2,399 桁)を計算させてみました。
作ったもの
- 円周率を 4 桁ずつ計算して Console 画面に出力。(計:2,400 桁)
- x64 Console Application
結果
計測は両方とも release 版(C/C++ は速度最適化)。
5 回計測し、平均をとる。
| 処理時間 | |
|---|---|
| C/C++ | 45 ms |
| Rust | 21 ms |
おや? Rust 速くない?
4 桁ずつの結果表示も処理時間に含むので、表示処理を無くしてみよう。
| 処理時間 | |
|---|---|
| C/C++ | 0 ms(1 ms 未満) |
| Rust | 25 ms |
えっ? Rust 増えてる。意味不明(→ 測定誤差の範囲です)。
所感
- たかだか 2,400 桁程度の計算では時間が短すぎて比較には不適切だった。てか、実は書く前からうすうすわかってたんですが。
- C/C++ は計算処理よりも Console 出力のほうが桁違いに処理時間がかかることも改めて自覚。
- もうちゃんとした計測はされていて、Rust が C/C++ 並みに速いこともわかってますよね。少なくとも C# や Java とかよりずっと速いです。
- でも、自分でやってみたかったんです。
- まぁ Rust が充分速いことだけは実体験として理解できました。(ここが一番重要!)
もう少し深堀
Rust のほうがバイナリサイズが大きい
| サイズ | |
|---|---|
| C/C++ | 13 KB |
| Rust | 167 KB |
ほぼ同じコードなのに 10 倍以上大きい。
おそらくこれは以下のようになっているため。
C/C++ バイナリ
├ C ランタイム DLL
└ C++ ランタイム DLL
Rust バイナリ
└ C ランタイム DLL
つまり、Rust の 標準 API コードはバイナリ本体に静的にバインドするためかと。
Rust バイナリも C ランタイムに依存しているの?
C/C++ バイナリが C ランタイムおよび C++ ランタイムに依存しているのは当たり前。
でも、Rust バイナリも C ランタイムに依存していた!
Windows 環境だと、Rust の開発には Visual Studio もしくは Microsoft C++ Build Tools が必要です。Linux などでも Rust 開発環境には gcc が必要なので、てっきり Rust のビルドシステムが C/C++ のツールを必要とするのかと思っていたので、これは新しい発見。
Rust バイナリは C ランタイムの何を使っているのか?
ほほぅ。メモリ関数とな。

付録
作った環境
- Windows 11 Pro 22H2
- 第 8 世代 Intel Core i7 CPU 機(2018年製 PC)
- Visual Studio 2022 Community version 17.7.4
- rustc 1.72.1
ソースコード
同じ計算結果が出ることは確認しています。
Discussion