Programming

Rust導入ガイド – 効率的な学習方法から導入まで

Rust導入ガイド – 効率的な学習方法から導入まで

以前[4]、同一アプリケーションをGo、Rust、C言語で実装し、各言語による実装効率と速度を評価しました。今回は、その経験をもとにRustの効率的な学習方法と導入についての見解をまとめてみます。 Rustの学習方法 Rustは生産性を実感するまでに学習期間が必要な言語とされています[5]。初期学習段階での離脱者が50%以上にのぼり、その多くが1ヶ月以内に挫折しているという統計[6]もあるため、まずは、効果的な初期学習が特に重要です。 STEP1: 学習準備期の克服 Rustコンパイラには(解決方法が明示されない)難解な解釈も多々あります[11]が、まずはRustコンパイラのエラー内容を理解し、対話できるまでの基礎力を身につけましょう。 Rustは初級者向けの書籍や資料は溢れている[5]ものの、実践的な中級以上を対象とした資料に乏しい状況[5]は、なかなか改善されていません。結論としては、闇雲にコンパイラとの格闘するのではなく、まずは以下に示す一次資料である良質な学習教材での基礎力アップが、Rust習得の近道となるでしょう[7][8]。 [1] The Rust Programming Language [2] Programming Rust 第2版 また、C/C++の熟練者の習得は容易である意見も散逸される[7][9][10]ので、Rustの有用性を深める意味でも、C/C++言語への理解を深めるのも、Rust習得の近道かもしれません。 STEP2: 実践的なプロジェクトへの挑戦 「Rustを学ぶ」のが目的であれば、この段階で目的は達成できているでしょう。ただし、Rustの難しさは、学習曲線の準備期を克服した後の、実践の難しさにあります[5][11][12][15]。結論から言えば、何かしらの実践的なプロジェクトに着手してみるのが、Rust学習としては効率的なようです[13][14]。 Rustのセマンティクスに沿わない場合、他のプログラミング言語でのデザインパターン(経験)を直接的には持ち込めず[16]、試行錯誤が必要となります。既存言語との比較面では、以下のチュートリアルが参考になるでしょうか。 [15] Learning Rust With Entirely Too Many Linked Lists…

Read more

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