はじめに
見ていただいて、ありがとうございます。
とある大学生のn0taです。
初めてのqiita投稿なので、優しい目で見ていただけると嬉しいです。
また、プログラミングについても知識不足のため、間違っている点などがございましたら、教えていただけると幸いです。
今回は、Rustの文字連結方法をベンチマークしてみました。
なぜ行ったのか?
今回、私がなぜベンチマークを行ったのかというと、文字連結を大量に行うコードを書く機会があり、どの書き方が一番速くなるのかが気になったからです。
皆さんも今回のベンチマークを参考にしてみてください。
文字連結方法
下記の3つで試みてみました。
- Stringにstrを追加する
- Stringとstrを連結させ、新しいStringを作成する
- Sringとstrをformatマクロに入れる
関数紹介
関数の内容は下記の通りです。
// Stringにstrを追加する関数
pub fn string_push_str() -> String {
let mut s1: String = String::from("Hello");
let slice: &str = ", World!";
s1.push_str(slice);
s1
}
// Stringとstrを連結させ、新しいStringを作成する関数
pub fn string_concat_str() -> String {
let s1: String = String::from("Hello");
let slice: &str = ", World!";
let s2: String = s1 + slice;
s2
}
// Sringとstrをformatマクロに入れ、新しいStringを作成する関数
pub fn string_format_str() -> String {
let s1: String = String::from("Hello");
let slice: &str = ", World!";
let s2 = format!("{}{}", s1, slice);
s2
}
実行環境
- rustc 1.71.0-nightly
実行コマンド
# bash or terminal
# cargoのbenchコマンドがnightlyのみ対応しているので、変更しています。
$ rustup default nightly
$ cargo bench
結論
下記の結果となりました。
running 3 tests
test bench_string_concat_str ... bench: 36 ns/iter (+/- 0)
test bench_string_format_str ... bench: 99 ns/iter (+/- 4)
test bench_string_push_str ... bench: 36 ns/iter (+/- 0)
test result: ok. 0 passed; 0 failed; 0 ignored; 3 measured; 0 filtered out; finished in 0.94s
formatマクロを使った場合、著しく速度がかかりました。(約3倍ほど…)
マクロは汎用的に使えるため、非常に便利なのですが、今回は単純な処理だったので、帰って遅くなってしまったのではないでしょうか?
使用したソースコード
感想
今回はRustの文字連結方法をベンチマークしてみました。
Rustは非常に安全性の高い言語であり、今後もさらに繁栄していくと思うので、これからも挑戦していきたいです。