Rustは、安全性と高速性の両立を目的にデザインされた言語[1]であり、近年では業務に採用されるプロフェッショナル言語としての、更なる飛躍が期待されています[3][8]。 ただし、2021年のアンケート結果[3]でも、仕事での利用率は前年の42%から59%に大きく向上している反面、業界での採用実績面の少なさが、Rustの将来性の最大の懸念(38%)に挙げられており、現時点では実績不足な面は否めません。 今回は、Rustの実用性を判断する上で、Rustでの実装を、C言語やGoなどの他プログラミング言語による同一仕様のアプリケーション実装と比較評価を試みました。対象となる評価アプリケーションは、Database(Redis)とIoT(ECHONET Lite)の2種類を準備し、実践的なRustの実装効率と性能を評価してみました。 評価① – Databaseアプリケーション (Redis) 本評価は、データベース分野のRedis[19]仕様を同一アプリケーションとして、C言語、Rust、Goによる実装を評価します。Redisの公式実装[19]はC言語であり、RustおよびGo実装は非公式なサブセット実装になります。 Rust実装はTokio[20]ライブラリの学習用として公開されたmini-redis[21]、Go実装は拙作のRedis互換データベース実装のgo-redis[23]のサンプル実装(go-redis-server)での評価となります。 なお、Redisの公式実装[19]と比較し、mini-redis[21]、go-redis[23]についてはサブセット実装となるためLOC(Lines of code)による実装効率は評価せずできず、性能評価のみとなります。 評価ベンチマーク 評価したベンチマークプログラムは、Redis公式ベンチマークツールである「redis-benchmark」で実施しました。実行するベンチマークはフルセットではなく、SET/GETコマンドのみに限定し、標準の50スレッドにて10,000回毎繰り返した結果を用いています。 基本的なSET/GETコマンドのみに限定されている理由は、mini-redis[21]がSET/GETコマンドなどの最小限のコマンド実装に留まっており、mini-redis[21]でのベンチマークパラメータ[22]を踏襲したためです。なお、mini-redis[21]は評価時の最新版、環境は「Mac mini (2018) + macOS 12.6」での評価となります。 実行性能評価 – C > Go > Rust 「redis-benchmark」によるSET/GETコマンドの実行結果を以下に示します。評価指標としてはデータベース運用上に指標に用いられる99パーセンタイル(p99(raito))の値を、C言語を基準とした性能比と共に右端に記載しています。 評価ベンチマークでは、公式な実装であるC言語のredis-server[19]、Goのgo-redis[23]、Rustのmini-redis[21]の順に高速な結果が得られました。C言語のredis-server[19]は最適化されたものであり、Go、Rustのサンプル実装と比較すると3倍程度高速な結果が得られました。…
Rustアプリケーションの実装効率と性能評価 – C言語・Go実装との比較
