ホームページ >ウェブフロントエンド >jsチュートリアル >Rust ですべてを書き換えてもすべての問題が解決しない理由

Rust ですべてを書き換えてもすべての問題が解決しない理由

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-29 10:05:10364ブラウズ

Why Rewriting Everything in Rust Won’t Solve All Your Problems

Rust は、テクノロジー業界において、スポーツが得意で、トップの成績を収め、ギターも弾ける新参者に相当します。安全かつ高速で、悪夢に悩まされている悪名高いメモリ バグをコードベースから取り除くことが約束されています。しかし、それはすべてのプロジェクトを Rust で書き直す必要があるという意味でしょうか?完全ではありません。 ?

Rust での書き換えは、特定のシナリオでは有効ですが、ソフトウェア開発のすべての問題を解決できる万能の解決策ではありません。いくつかのコード スニペットや例え話を交えながら、その理由を掘り下げてみましょう。途中で笑いも交えながら説明していきたいと思います。 ?


Rust の強み: なぜ誇大広告なのか?

Rust を批判する前に、正当な賞賛を送りましょう: ?

  1. メモリの安全性: Rust の借用チェッカーは、null ポインターの逆参照やデータ競合などのバグのクラス全体を排除します。すばらしい! ✅

  2. パフォーマンス: Rust は C または C とほぼ同じ速度で実行されますが、クラッシュははるかに少なくなります。高性能システムを構築している場合、Rust はあなたの友人です。 ?

  3. 最新のツール: Rust のパッケージ マネージャーおよびビルド ツールである Cargo を使用すると、依存関係の管理が他の言語 (JavaScript を見てください) と比べて簡単になります。 ?

Rust の信条は 安全性、スピード、安定性です。 それを望まない人はいないでしょうか?では、それが大槌を掴んで現在のコードベースを破壊する必要がない理由を見てみましょう。 ?️


1. 「書き換えの誤謬」

あなたが少し漏れのあるボートを所有していると想像してください。それを修正する代わりに、まったく新しいものを最初から構築することにしました。確かに、新しいボートはより頑丈になるかもしれませんが、プロセスには何か月もかかり、莫大な費用がかかり、まったく浮かなくなる可能性もあります。 ⛵

コードの書き換えも同様です。 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 ライブラリで最適化することもできたはずです。


2. 学習曲線: 誰もが Rustacean 語を話せるわけではありません

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 を使用すると、安全性を確保するために事前に懸命に作業することができます。これはシステム プログラミングにとっては素晴らしいことですが、小規模でエラーが発生しにくいプロジェクトにとっては過剰です。


3. すべてのコードに Rust の機能が必要なわけではありません

「Rust がクールだから」という理由で個人の ToDo リスト アプリを Rust で書き直すのは、工業用の鋼材の梁で巣箱を建てるようなものです。オーバーエンジニアリングは誰の役にも立ちません。

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 などの高レベル スクリプト言語の方が適しています。 ?


4. 開発者の生産性: トレードオフ

Rust を使用すると、他の言語と同じ結果を達成するためにより多くのコードを作成できます。このトレードオフは、安全性が重要なシステムにとっては価値がありますが、実行時のパフォーマンスよりも開発速度が重要な環境では速度が低下します。

起動速度とスケーラビリティ

MVP を構築している場合やプロトタイプを作成している場合は、迅速に反復できる言語を使用してください。アイデアを検証し、拡張する必要がある場合は、パフォーマンスが重要な部分を Rust で書き直すことを検討できます。 ?


5. 「完璧なツール」の誤謬

完璧な言語はありません。 Rust が輝くのは:

  • システム プログラミング (オペレーティング システム、ゲーム エンジンなど)。
  • パフォーマンスが重要なアプリケーション。
  • 安全性が重要なマルチスレッド プログラム。

しかし、次のような場合にはあまり理想的ではありません。

  • ラピッドプロトタイピング
  • スクリプトと自動化。
  • Rust の経験が限られているチーム。

結論: Rust は賢明に使用しましょう

Rust は画期的な機能を備えた驚異的な言語です。これは誇大宣伝に値しますが、採用するには多大な時間と労力も必要です。 Rust でプロジェクトを書き直すことは、あなたが探している奇跡的な解決策ではないかもしれません。

代わりに、重大なパフォーマンスのボトルネック、メモリセーフな API、または安定性が最優先される長期プロジェクトなど、合理的な場合には Rust を検討してください。それ以外のことについては、機能するものに固執してください。たとえそれがダクトテープでパッチされた水漏れのあるボートであっても、最良のツールは仕事を成し遂げるツールだということを忘れないでください。

したがって、Python、JavaScript、または Go のコードベースをまだゴミ箱に捨てないでください。 Rust はあなたに必要なヒーローかもしれませんが、すべての戦闘に必要なわけではありません。

以上がRust ですべてを書き換えてもすべての問題が解決しない理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。