Swift 與 Rust:兩種記憶模型哲學的交會點

本篇文章更新時間:2026/02/01
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


Swift 與 Rust:兩種語言的設計哲學如何交會,又如何分歧?

副標題:一篇來自原文 Swift is a more convenient Rust 的深度閱讀筆記

編輯前言:這篇文章非常適合那些同時寫過 Swift 與 Rust、卻隱隱覺得兩者「理念相似但體驗迥異」的開發者。原文作者從記憶模型、語法設計、錯誤處理到跨平台發展,提出了很多值得反思的觀察。

核心觀點 (Key Takeaways)

  • Swift 與 Rust 在語言功能上高度重疊,但出發點完全相反:Rust 從低階往高階爬;Swift 從高階往低階走。
  • Swift 在語法上刻意包裝、降低心智負擔,例如用 switch 模擬 match、用可選型別包裝 Option。
  • Rust 讓你 "fast by default";Swift 讓你 "easy by default",兩者取捨清晰、定位明確。

深入解析

原文核心思想是:Swift 與 Rust 看似不同世界,但其實共享大量概念,只是設計哲學完全相反。以下我把文章拆成幾個最有啟發性的主題來談。

Swift 與 Rust:自底向上 vs 自頂向下

作者提出一句非常直觀的比喻:

Rust 是自底向上(bottom‑up)的語言,而 Swift 是自頂向下(top‑down)的語言。

這點直接反映在記憶模型上:

  • Rust 的預設是所有權(ownership)和借用(borrowing)。你想偷懶時才用 Rc、Arc、Cow。
  • Swift 則反過來:預設是 Copy‑on‑Write,你想更快才 opt-in ownership(Swift 5.9 推出的 move-only types 就是例子)。

兩者做的事很像,但預設值造成完全不同的學習體驗:

  • Rust:理解成本高,但效能最佳
  • Swift:使用成本低,但效能不是預設目標

Swift 的語法像 C,但其實偷偷塞了函數語言概念

這章是我最有共鳴的一段。作者用 match/switch 為例:

Rust:

match coin { ... }

Swift:

switch coin { ... }

表面上 Swift 讓 C 家族的開發者很安心,但:

Swift 的 switch 其實就是 match,只是換了長得比較友善的外皮。

這也說明了 Swift 設計團隊一貫的策略:用熟悉的外表包裝陌生的強大概念,降低工程師的戒心。

Optional、Error Handling:Swift 對 Rust 的友善版本

作者指出:

  • Swift 的 T? = Rust 的 Option
  • Swift 的 nil = Rust 的 None

但 Swift 多了糖衣語法:

if let val { ... }

或是讓 T 自動提升為 T?,省去 Rust 的 Some(...) 包裝。錯誤處理也是同理:Swift 用 try / do-catch 包住 Rust style 的 Result 機制。

這些語法糖其實都是為了讓寫 iOS 的人,不必被「純函數語言的觀念」嚇跑。

Rust 讓你面對問題;Swift 幫你處理問題

這段用 recursive enum 當例子非常典型:

Rust 強迫你顯式寫 Box<>

Branch(Vec>>)

Swift 則用一個關鍵字搞定:

indirect enum TreeNode { ... }

Swift 這種「你告訴我方向,我負責處理細節」的語言哲學,在原文中被描述得很精準。

Swift 不純粹,但它非常務實

Swift 的目標是取代 Objective‑C,因此不得不支援

  • class / inheritance
  • actor、async/await
  • property wrappers
  • result builders
  • async sequences

這些讓 Swift 看起來比 Rust「庞大」得多。但它的理念是 progressive disclosure:用越久,語言就越深。

作者點得很好:Swift 不是純語言,而是務實語言。

筆者心得與啟發

讀完原文我最大的感觸是:Swift 與 Rust 都代表了現代語言設計的兩種極端哲學,但它們其實正在彼此靠近。

  • Swift 正在把 ownership 引入語言核心
  • Rust 也越來越想降低學習曲線(例如 async, ? 推廣)

我也認同原文最後的觀點:

  • Rust 適合系統層、編譯器、嵌入式等高性能應用
  • Swift 適合 UI、server-side、工具、跨平台應用

但特別值得注意的是,作者對 Swift「跨平台」的觀察:這已不是未來,而是當下。Swift WASM、Swift on Windows、Embedded Swift 都使 Swift 正在變成「一種更輕鬆的 Rust」。

對我而言,這篇文章的價值是讓我重新理解 Swift——不是只有 Apple 的語言,而是一門在設計理念上與 Rust 相互呼應的現代語言。如果你原本對 Swift 的印象還停在「做 iOS App 的語言」,那大概是時候更新你的觀念了。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon