「The Rust Programming Language」でRustを学ぶ その02 所有権(4章まで)

2025-08-22 23:03:44

The Rust Programming Language 日本語版 - The Rust Programming Language 日本語版

の、今回は4章「所有権」

ソースは下記のownershipディレクトリ
ryotakato/rust_the_book_src

Rustというと一番に話題になる所有権の話。
前から少しは知っていたので、そんなに違和感はなく読めた。

が、読めるのと書けるのは違う。。。
ので、今後色々とぶつかる問題なんだろうなと思う。

それで、この中の章で、文字のスライスの話が出てきたので、
ふっと、Rustで文字列結合はどういう書き方が早いのかなって気になった。
(よく他の言語でも話題になるよね)

Rustという文字を10万回、100万回結合してみる。
Rustで文字列イテレータを連結するときに便利な itertools::join は結構遅い #ベンチマーク - Qiita
とかを見ながら、
push_str使う方法、+演算子、+=演算子、format!で文字列作り直す方法、一度vectorにしてからjoinする方法の5つ。
実装の詳細はソースをみてほしい。

10万回の結果

# 10万回
push_str: 2.5595ms
+: 2.727666ms
+=: 2.480708ms
format!: 483.425208ms
join: 20.613542ms

最初の3つはそこまで変わらなくて、joinが次に続き、format!がかなり遅い。
なお、最初100回とかで試していたときは、format!も全然早かったけどね。

では、100万回だとどうなるか?

# 100万回
push_str: 13.588042ms
+: 14.85825ms
+=: 9.794208ms
format!: 198.9418705s
join: 217.509333ms

単位をよくみてほしい。
format!は、秒だ。つまり3分超えているってこと。

最初3は10msとか15msで終わっているわけだから、いかに遅いかが分かると思う。
これがやっぱりスタックに乗っているメモリなのか、ヒープなのかってことの違いかな?
でもjoinでも使っている気がするんだけどなー。
ここらへんまだ理解できていない。
下記とかも参考になるかも。
【Rust】なぜformat!は遅いのか? #Rust - Qiita

とりあえず、今日はそんなところ。




Comments

There are currently no comments on this article, be the first to add one below

Add a Comment

Note that I may remove comments for any reason, so try to be civil. If you are looking for a response to your comment, either leave your email address or check back on this page periodically.