首頁 > web前端 > js教程 > 為什麼用 Rust 重寫一切並不能解決你所有的問題

為什麼用 Rust 重寫一切並不能解決你所有的問題

Mary-Kate Olsen
發布: 2024-12-29 10:05:10
原創
329 人瀏覽過

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

Rust 相當於科技界的新來的孩子,他擅長運動、取得高分,甚至會彈吉他。它安全、快速,並且有望消除您的程式碼庫中困擾您噩夢的臭名昭著的記憶體錯誤。但這是否意味著您應該用 Rust 重寫所有項目?不完全是。 ?

用 Rust 重寫對於某些場景非常有用,但它並不是解決所有軟體開發問題的萬用藥。讓我們透過一些程式碼片段、類比來深入探討原因,並希望一路上能帶來一些笑聲。 ?


Rust 的優點:為何大肆宣傳?

在我們批評 Rust 之前,讓我們先給予它應有的讚揚:?

  1. 記憶體安全:Rust 的借用檢查器消除了整類錯誤,例如空指標取消引用和資料競爭。驚人的! ✅

  2. 效能:Rust 的運行速度幾乎與 C 或 C 一樣快,但崩潰次數要少得多。如果您正在建立高效能係統,Rust 是您的朋友。 ?

  3. 現代工具:使用 Cargo(Rust 的套件管理器和建置工具),與其他一些語言(看看你,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 重寫你的個人待辦事項清單應用程序,因為「Rust 很酷」就像用工業級鋼樑建造一個鳥舍。過度設計對任何人都沒有幫助。

當 Rust 殺傷力過大時

假設您正在編寫一個腳本來重新命名一些檔案:

Python:

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 的解決方案更加健壯,但是如果您的腳本只運行一次,那麼額外的複雜性值得嗎?對於快速、一次性的任務,Python 等高階腳本語言通常是更好的選擇。 ?


4. 開發人員生產力:權衡

Rust 讓你寫更多的程式碼來達到與其他語言相同的結果。對於安全關鍵型系統來說,這種權衡是值得的,但在開發速度比運行時效能更重要的環境中,這種權衡會降低您的速度。

啟動速度與可擴充性

如果您正在建立 MVP 或原型設計,請使用可讓您快速迭代的語言。一旦你驗證了你的想法並需要擴展,你就可以考慮用 Rust 重寫效能關鍵部分。 ?


5. 「完美工具」謬論

沒有一種語言是完美的。鐵鏽閃耀的原因:

  • 系統程式設計(例如作業系統、遊戲引擎)。
  • 效能關鍵型應用程式。
  • 安全至關重要的多執行緒程式。

但它不太理想:

  • 快速原型製作。
  • 腳本和自動化。
  • Rust 經驗有限的團隊。

結論:使用 Rust,但要明智地使用它

Rust 是一種具有開創性功能的非凡語言。它值得大肆宣傳,但也需要大量的時間和精力來採用。用 Rust 重寫你的專案可能不是你正在尋找的奇蹟解決方案。

相反,請在有意義的地方考慮 Rust:關鍵效能瓶頸、記憶體安全 API 或穩定性至關重要的長期專案。對於其他一切,堅持有效的做法。請記住,最好的工具是能夠完成工作的工具,即使它是一艘用膠帶修補的漏水船。

所以,暫時不要將你的 Python、JavaScript 或 Go 程式碼庫丟進垃圾桶。 Rust 可能是您需要的英雄,但並非適合每場戰鬥。

以上是為什麼用 Rust 重寫一切並不能解決你所有的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板