ホームページ >ウェブフロントエンド >jsチュートリアル >Rust ですべてを書き換えてもすべての問題が解決しない理由
Rust は、テクノロジー業界において、スポーツが得意で、トップの成績を収め、ギターも弾ける新参者に相当します。安全かつ高速で、悪夢に悩まされている悪名高いメモリ バグをコードベースから取り除くことが約束されています。しかし、それはすべてのプロジェクトを Rust で書き直す必要があるという意味でしょうか?完全ではありません。 ?
Rust での書き換えは、特定のシナリオでは有効ですが、ソフトウェア開発のすべての問題を解決できる万能の解決策ではありません。いくつかのコード スニペットや例え話を交えながら、その理由を掘り下げてみましょう。途中で笑いも交えながら説明していきたいと思います。 ?
Rust を批判する前に、正当な賞賛を送りましょう: ?
メモリの安全性: Rust の借用チェッカーは、null ポインターの逆参照やデータ競合などのバグのクラス全体を排除します。すばらしい! ✅
パフォーマンス: Rust は C または C とほぼ同じ速度で実行されますが、クラッシュははるかに少なくなります。高性能システムを構築している場合、Rust はあなたの友人です。 ?
最新のツール: Rust のパッケージ マネージャーおよびビルド ツールである Cargo を使用すると、依存関係の管理が他の言語 (JavaScript を見てください) と比べて簡単になります。 ?
Rust の信条は 安全性、スピード、安定性です。 それを望まない人はいないでしょうか?では、それが大槌を掴んで現在のコードベースを破壊する必要がない理由を見てみましょう。 ?️
あなたが少し漏れのあるボートを所有していると想像してください。それを修正する代わりに、まったく新しいものを最初から構築することにしました。確かに、新しいボートはより頑丈になるかもしれませんが、プロセスには何か月もかかり、莫大な費用がかかり、まったく浮かなくなる可能性もあります。 ⛵
コードの書き換えも同様です。 Joel Spolsky の古典的なブログ投稿 「絶対にやってはいけないこと」 は、動作するコードを破棄することに対して警告しています。なぜ?書き直すとバグが発生し、長年のデバッグ知識が無駄になり、進歩が遅くなるからです。 Rust の学習曲線は急勾配であるため、Rust で書き直すとこれらのリスクが増幅されます。
次の Python 関数があるとします。
# Python: Calculate factorial def factorial(n): if n == 0: return 1 return n * factorial(n - 1)
シンプルですよね?しかし、Rust のスピードと安全性も必要です。次のようになります:
// Rust: Calculate factorial fn factorial(n: u64) -> u64 { match n { 0 => 1, _ => n * factorial(n - 1), } }
素晴らしいですが、書き直す価値はありましたか?このような小さな断片では、おそらくそうではありません。 Python コードは正常に動作し、新しい開発者にとっては読みやすく、保守しやすいです。パフォーマンスが問題になる場合は、すべてを書き直すのではなく、PyO3 などのツールを使用して、この特定の関数だけを Rust ライブラリで最適化することもできたはずです。
Rust の構文は、より伝統的な言語に慣れている開発者にとっては異質に感じるかもしれません。借金、生涯、所有権などの概念は強力ですが、恐ろしいものでもあります。チームがまだ Rust に慣れていない場合は、遅延や混乱が予想されます。
Rust でベクターを変更するという単純なタスクについて考えてみましょう。
# Python: Calculate factorial def factorial(n): if n == 0: return 1 return n * factorial(n - 1)
問題ないようですが、&mut を使用したり、* で逆参照したりするのを忘れると、借用チェッカーに叱られます。たとえば、JavaScript や Python から来た開発者は、自分たちが霞んでいるように感じるかもしれません。
一方、Python での同等のコードは次のとおりです。
// Rust: Calculate factorial fn factorial(n: u64) -> u64 { match n { 0 => 1, _ => n * factorial(n - 1), } }
もっと簡単ですよね? Rust を使用すると、安全性を確保するために事前に懸命に作業することができます。これはシステム プログラミングにとっては素晴らしいことですが、小規模でエラーが発生しにくいプロジェクトにとっては過剰です。
「Rust がクールだから」という理由で個人の ToDo リスト アプリを Rust で書き直すのは、工業用の鋼材の梁で巣箱を建てるようなものです。オーバーエンジニアリングは誰の役にも立ちません。
いくつかのファイルの名前を変更するスクリプトを書いているとしましょう:
fn main() { let mut numbers = vec![1, 2, 3]; for num in &mut numbers { *num += 1; } println!("{:?}", numbers); }
numbers = [1, 2, 3] for i in range(len(numbers)): numbers[i] += 1 print(numbers)
Rust のソリューションはより堅牢ですが、スクリプトが 1 回しか実行されない場合、余分に複雑にする価値はありますか?迅速な 1 回限りのタスクには、多くの場合、Python などの高レベル スクリプト言語の方が適しています。 ?
Rust を使用すると、他の言語と同じ結果を達成するためにより多くのコードを作成できます。このトレードオフは、安全性が重要なシステムにとっては価値がありますが、実行時のパフォーマンスよりも開発速度が重要な環境では速度が低下します。
MVP を構築している場合やプロトタイプを作成している場合は、迅速に反復できる言語を使用してください。アイデアを検証し、拡張する必要がある場合は、パフォーマンスが重要な部分を Rust で書き直すことを検討できます。 ?
完璧な言語はありません。 Rust が輝くのは:
しかし、次のような場合にはあまり理想的ではありません。
Rust は画期的な機能を備えた驚異的な言語です。これは誇大宣伝に値しますが、採用するには多大な時間と労力も必要です。 Rust でプロジェクトを書き直すことは、あなたが探している奇跡的な解決策ではないかもしれません。
代わりに、重大なパフォーマンスのボトルネック、メモリセーフな API、または安定性が最優先される長期プロジェクトなど、合理的な場合には Rust を検討してください。それ以外のことについては、機能するものに固執してください。たとえそれがダクトテープでパッチされた水漏れのあるボートであっても、最良のツールは仕事を成し遂げるツールだということを忘れないでください。
したがって、Python、JavaScript、または Go のコードベースをまだゴミ箱に捨てないでください。 Rust はあなたに必要なヒーローかもしれませんが、すべての戦闘に必要なわけではありません。
以上がRust ですべてを書き換えてもすべての問題が解決しない理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。