Closed13

AWSのRust推し記事に対するRuss Coxによる反駁

yukiyuki

先日AWSが声明を出していた。たぶん、昨年の AWS Summit で発表していたキーノートが元ネタだったと思う。
https://aws.amazon.com/blogs/opensource/sustainability-with-rust/

実は Discord 周りの評価が誤っているのではないかという Go ユーザーによる反論がいくつか Twitter で見られており、なおかつ自分もあまりその点については納得していなかったので、今回の記事はシェアしなかった。ならびに、数年前の論文を元に Rust のエネルギー効率の良さを主張していたが、数年前(2017年)の成果だったから、今は状況が違うというのもあるだろうし、少し納得していなかった。

後日、日本語による解説記事が出されている。
https://japan.zdnet.com/article/35183866/

この原文の記事に対して Russ Cox が Twitter で反駁を行っていた。続くスレッドにて解説があり、そのとおりだと思うのでまとめたいと思う。
https://twitter.com/_rsc/status/1496352325157457922?s=20&t=bIgnef5ap6b33wi5XQmNhw

簡単に内容をまとめると、

  • 「Rust は省エネ」の引用元の論文の結果、本当に大丈夫?ちょっと怪しそうだけど。
  • AWS は Discord の元記事を誤読している。
  • それにより Go の結果が不当に解釈されている。
  • 数年前の Go を今持ち出されてもなあ…Go も相当改善してるよ。
  • Go か Rust か、みたいなゼロサムゲームの解説記事を読むんじゃなくて、Go と Rust をどう組み合わせたら現実のソフトウェアに上手にいかしていけるかを考えたほうがいいのでは?

といったところだろうか。

翻訳は筆者の手によるものです。だいたいの意味と当人のテンションを担保してある状態にしてあります。

yukiyuki

その上、「とてもおもしろい研究結果」では Computer Language Benchmarks Game を比較対象のソースとして仮定しているが、もしあなたがそのサイトを知っているならご存知のとおり、実際の姿からは程遠い。
https://twitter.com/_rsc/status/1496352329209110529?s=20&t=bIgnef5ap6b33wi5XQmNhw

注: この論文は、「Benchmarks Game のコードを使用してエネルギー使用量、実行時間そしてメモリ使用量を比較する」みたいな趣旨だったと思うが、Benchmarks Game のコード自体ならびにその結果と、現実のコンピュータ上でのアプリケーションによる計算とでは結構乖離があり、ちょっと現実離れしている。したがって比較対象に適さないのでは?という話はよくあがる。そのことを言っている気がする。

yukiyuki

研究結果がもし C++ が C より34%多くのエネルギー、56%の多くの時間そして14%多くのメモリを使用すると主張しているなら、想定を再検討する必要がある。ほぼすべての C プログラムは正当な C++ プログラムだから、C++ が負けることはないはずだ。とくに、こんなにも結果がひどくなるはずがない。
https://twitter.com/_rsc/status/1496352332556161024?s=20&t=bIgnef5ap6b33wi5XQmNhw

yukiyuki

もともとの Discord の記事は、Go のサーバーとそれを置き換えた Rust のサーバーの両方のプロットを1つのグラフ上に描いていた。Rust の線はより予測可能なパフォーマンスを示しており、Go の線におけるレイテンシーのスパイクを防いでいたが、Go と Rust のグラフの線はほぼ同等だった。
https://twitter.com/_rsc/status/1496352338356883459?s=20&t=bIgnef5ap6b33wi5XQmNhw

補足: 紫が Go の線で、水色が Rust の線。たしかにスパイクする時間帯は確かめられるが、それ以外の時間帯は Go も Rust もそんなに変わらないのでは、ということを言いたいのではないかと思う。

yukiyuki

でも、AWS の記事は、新しいデータ構造とより多くの RAM を使用するために大幅に書き直したあとの Rust のサーバーのグラフと Go のグラフの結果を示し、「ms」vs「μs」のタイムスケールを丸で囲んでいた。このことは、Discord の記事を完全に誤解しているか見え透いたごまかしかのどちらかだ。
https://twitter.com/_rsc/status/1496352342136004612?s=20&t=bIgnef5ap6b33wi5XQmNhw

yukiyuki

一応補足だが、Discord の記事はフェアだ。記事では Go のサーバーと Rust の同等の実装のサーバーの同一条件での比較を示した。この記事のもっとあとに、データ構造と追加の RAM の使用の書き直しを含む Rust サーバー単体でのグラフを示した。AWS の記事はそのことを間違えて説明しているのだ。
https://twitter.com/_rsc/status/1496352348599468036?s=20&t=CDQOXNK4rF90lXoDWmQ4WA

yukiyuki

とはいえ、Discord の記事は Go 1.10 についての記述だ。Go 1.18 がもうすぐリリースされるのに、だ。この8つのバージョンのリリースの中にはたくさんの改善が含まれており、とくに非常に大きなヒープと非常に多くの goroutine を使用したプログラムにおける GC ポーズの削減なんかも含まれる(Discord サーバーは両方が該当した)。
https://twitter.com/_rsc/status/1496352349937442819?s=20&t=CDQOXNK4rF90lXoDWmQ4WA

このスクラップは2022/05/05にクローズされました