Programming

Rustアプリケーションの実装効率と性能評価 – C言語・Go実装との比較

Rustアプリケーションの実装効率と性能評価 – C言語・Go実装との比較

Rustは、安全性と高速性の両立を目的にデザインされた言語[1]であり、近年では業務に採用されるプロフェッショナル言語としての、更なる飛躍が期待されています[3][8]。 ただし、2021年のアンケート結果[3]でも、仕事での利用率は前年の42%から59%に大きく向上している反面、業界での採用実績面の少なさが、Rustの将来性の最大の懸念(38%)に挙げられており、現時点では実績不足な面は否めません。 今回は、Rustの実用性を判断するために、データベース(Redis)とIoT(ECHONET Lite)の2つ分野の同一アプリケーション実装を評価対象とし、Go言語やCなど他プログラミング言語での実装と比較することで、Rust実装の効率と性能評価を試みました。 結論としては、Better Cの観点からはGoがCの後継として最適と考えています。Rustは安全性とスピードを提供しますが、生産性、相互運用性、プログラミングの柔軟性に限界があります。反面、Goは実装の効率性と安定した性能で際立っており、汎用的なアプリケーションに安心して使える選択肢と判断しています。 評価① – 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…

Read more