2024年1月8日月曜日

プログラミング言語のRustはなにがそんなに良いんですか?

 

一年以上書いて思ったのは、RustはC++の速さとKotlinの安全性/表現力とGoのシンプルなビルドシステムを合わせ持ったものです。

  • C++と同じでGCを持たず、メモリを効率的に使用できて非常に高速。
  • Kotlinのようにnull安全でかつ非常によく設計されているTraitを用いてオブジェクト指向プログラミングを実践することができ、変数の不変性を担保できるうえにmap/filterなどのコレクション操作も充実していて関数型プログラミングも可能。
  • CargoによってGo言語のようにビルドシステムの構築が非常に簡単。アウトプットもシングルバイナリでデプロイが簡単。C++のCMakeやKotlinのGradleは複雑すぎ。(ただ、Goほどクロスコンパイルが簡単ではない。)

そしてさらにRustのみの特徴としてはMoveがデフォルトになっていて自然と無駄なメモリのコピーを排除できるようなプログラムに仕上がるのが素晴らしい。

杜 世橋
· 1年前
RustはC ++よりも高速ですか。その理由は?
おそらく極限まで最適化したらC++のほうが抽象化が少ない分速いかもしれませんし、マイクロベンチマークではそういう結果が多いです。 ただし、現実のプログラムを書く際にはRustのほうが速くなることが多いと私は思います。その理由はC++ではデフォルトではCopyセマンティクスなのに対しRustではデフォルトでMoveセマンティクスを採用しているからです。したがって複雑な構造のデータを扱うときに、特別な注意をせずにいた場合はRustのほうがメモリのコピー発生が少くなる可能性が高いです。 C++でもMoveを利用することは可能ですが、Moveになる条件を理解してそれを意識したコードを書く必要があります。 これが結構曲者で、ちゃんとmoveのコンストラクタや代入演算子は定義されているか、代入元は右辺値になっているかなどをチェックしないといけません。 Rustの場合はそういう難しいことを考えなくともデフォルトがMoveなので本当に楽です。そしてCopyをするためにはcloneメソッドを明示的に呼び出したりCopy Traitをつけたりする必要があって無駄なCopyが自動的に抑制されて可能な限りMoveになる言語仕様になっています。
大島 芳樹
· 1年前
Rust以外に変数操作においてCopyではなくMoveがデフォルトの動作になっている言語はありますか?
コンピューター言語の中には、「線形論理(linear logic)」に基づいたものがあります。この日本語のWikipediaのページには二つ目の文の中に既に「hypotheses

0 コメント:

コメントを投稿