介紹

ch00-00-introduction.md
commit 0aa307c7d79d2cbf83cdf5d47780b2904e9cb03f

注意:本書的版本與出版的 The Rust Programming Language 和電子版的 No Starch Press 一致

歡迎閱讀 “Rust 程式設計語言”,一本介紹 Rust 的書。Rust 程式設計語言能幫助你編寫更快、更可靠的軟體。在程式語言設計中,高層工程學和底層控制往往不能兼得;Rust 則試圖挑戰這一矛盾。透過權衡強大的技術能力與優秀的開發體驗,Rust 允許你控制底層細節(比如記憶體使用),並免受以往進行此類控制所經受的所有煩惱。

誰會使用 Rust

Rust 因多種原因適用於很多開發者。讓我們討論幾個最重要的群體。

開發者團隊

Rust 被證明是可用於大型的、擁有不同層次系統編程知識的開發者團隊間協作的高效工具。底層代碼中容易出現種種隱晦的 bug,在其他程式語言中,只能透過大量的測試和經驗豐富的開發者細心的代碼評審來捕獲它們。在 Rust 中,編譯器充當了守門員的角色,它拒絕編譯存在這些難以捕獲的 bug 的代碼,這其中包括並發 bug。通過與編譯器合作,團隊將更多的時間聚焦在程序邏輯上,而不是追蹤 bug。

Rust 也為系統編程世界帶來了現代化的開發工具:

  • Cargo,內建的依賴管理器和構建工具,它能輕鬆增加、編譯和管理依賴,並使其在 Rust 生態系統中保持一致。
  • Rustfmt 確保開發者遵循一致的代碼風格。
  • Rust Language Server 為集成開發環境(IDE)提供了強大的代碼補全和內聯錯誤訊息功能。

透過使用 Rust 生態系統中的這些和其他工具,開發者可以在編寫系統層面代碼時保持高生產力。

學生

Rust 適用於學生和有興趣學習系統概念的人。通過 Rust,很多人已經了解了操作系統開發等主題。社區非常歡迎和樂於解答學生們的問題。通過本書的努力,Rust 團隊希望系統概念能被更多人了解,特別是編程新手。

公司

數以百計的公司,無論規模大小,都在生產中使用Rust來完成各種任務。這些任務包括命令行工具、web 服務、DevOps 工具、嵌入式設備、影音分析與轉檔、加密貨幣(cryptocurrencies)、生物訊息學(bioinformatics)、搜尋引擎、物聯網(internet of things, IOT)程序、機器學習,甚至還包括 Firefox 瀏覽器的大部分內容。

開源開發者

Rust 適用於希望構建 Rust 程式語言、社區、開發工具和庫的開發者。我們很樂意您為 Rust 語言做貢獻。

重視速度和穩定性的開發者

Rust 適用於追求程式語言的速度與穩定性的開發者。所謂速度,是指你用 Rust 開發出的程序運行速度,以及 Rust 提供的程序開發速度。Rust 的編譯器檢查確保了增加功能和重構代碼時的穩定性。這與缺少這些檢查的語言形成鮮明對比,開發者通常害怕修改那些脆弱的遺留代碼。力求零開銷抽象(zero-cost abstractions),把高級的特性編譯成底層的代碼,這樣寫起來很快,運行起來也很快,Rust 致力於使安全的代碼也同樣快速。

Rust 語言也希望能支持很多其他用戶,這裡提及的只是最大的利益相關者。總的來講,Rust 最重要的目標是消除數十年來程式設計師不得不做的權衡:安全 生產力,速度 人機交互的順暢度(ergonomics)。請嘗試 Rust,看看這個選擇是否適合你。

本書是寫給誰的

本書假設你已經使用其他程式語言編寫過代碼,但並不假設你使用的是何種語言。我們嘗試使這些參考資料能廣泛的適用於來自很多不同編程背景的開發者。我們不會花費很多時間討論編程 什麼或者如何理解它。如果編程對於你來說是完全陌生的,你最好先閱讀專門介紹編程的書籍。

如何閱讀本書

總體來說,本書假設你會從頭到尾順序閱讀。稍後的章節建立在之前章節概念的基礎上,同時之前的章節可能不會深入討論某個主題的細節;通常稍後的章節會重新討論這些主題。

你會在本書中發現兩類章節:概念章節和項目章節。在概念章節中,我們學習 Rust 的某個方面。在項目章節中,我們應用目前所學的知識一同構建小的程序。第二、十二和二十章是項目章節;其餘都是概念章節。

第一章介紹如何安裝 Rust,如何編寫 “Hello, world!” 程序,以及如何使用 Rust 的包管理器和構建工具 Cargo。第二章是 Rust 語言的實戰介紹。我們會站在較高的層次介紹一些概念,而將詳細的介紹放在稍後的章節中。如果你希望立刻就動手實踐一下,第二章正好適合你。開始閱讀時,你甚至可能希望略過第三章,它介紹了 Rust 中類似其他程式語言中的功能,並直接閱讀第四章學習 Rust 的所有權系統。然而,如果你是特別重視細節的學習者,並傾向於在繼續之前學習每一個細節,你可能希望略過第二章並直接閱讀第三章,並在想要構建項目來實踐這些細節時再回來閱讀第二章。

第五章討論結構體和方法,第六章介紹枚舉、match 表達式和 if let 控制流結構。在 Rust 中,你將使用結構體和枚舉創建自訂類型。

第七章你會學習 Rust 的模組系統和私有性規則來組織代碼和公有應用程式介面(Application Programming Interface, API)。第八章討論了一些標準庫提供的常見集合數據結構,比如 可變長數組(vector)、字串和哈希 map。第九章探索了 Rust 的錯誤處理哲學和技術。

第十章深入介紹泛型、trait 和生命週期,他們提供了定義出適用於多種類型的代碼的能力。第十一章全部關於測試,即使 Rust 有安全保證,也需要測試確保程序邏輯正確。第十二章,我們構建了屬於自己的在文件中搜尋文本的命令行工具 grep 的子集功能實現。為此會利用之前章節討論的很多概念。

第十三章探索了閉包和疊代器:Rust 中來自函數式程式語言的功能。第十四章會更深層次的理解 Cargo 並討論向他人分享庫的最佳實踐。第十五章討論標準庫提供的智慧指針以及啟用這些功能的 trait。

第十六章會學習不同的並發編程模型,並討論 Rust 如何助你無畏的編寫多執行緒程序。第十七章著眼於比較 Rust 風格與你可能熟悉的面向對象編程原則。

第十八章是關於模式和模式匹配的參考章節,它是在Rust程序中表達思想的有效方式。第十九章是一個高級主題大雜燴,包括 unsafe Rust、宏和更多關於生命週期、 trait、類型、函數和閉包的內容。

第二十章將會完成一個項目,我們會實現一個底層的、多執行緒的 web server!

最後是一些附錄,包含了一些關於語言的參考風格格式的實用訊息。附錄 A 介紹了 Rust 的關鍵字。附錄 B 介紹 Rust 的運算符和符號。附錄 C 介紹標準庫提供的派生 trait。附錄 D 涉及了一些有用的開發工具,附錄 E 介紹了 Rust 的不同版本。

怎樣閱讀本書都不會有任何問題:如果你希望略過一些內容,請繼續!如果你發現疑惑可能會再跳回之前的章節。請隨意閱讀。

學習 Rust 的過程中一個重要的部分是學習如何閱讀編譯器提供的錯誤訊息:它們會指導你編寫出能工作的代碼。為此,我們會提供很多不能編譯的範例代碼,以及各個情況下編譯器會展示的錯誤訊息。請注意如果隨便輸入並運行隨機的範例代碼,它們可能無法編譯!請確保閱讀任何你嘗試運行的範例周圍的內容,檢視他們是否有意寫錯。Ferris 也會幫助你區別那些有意無法工作的代碼:

Ferris意義
這些程式碼不能編譯!
這些程式碼會 panic!
這些程式碼塊包含不安全(unsafe)代碼。
這些程式碼不會產生期望的行為。

在大部分情況,我們會指引你將任何不能編譯的代碼糾正為正確版本。

原始碼

生成本書的原始碼可以在 GitHub 上找到。

譯者註:本譯本的 GitHub 倉庫,歡迎 Issue 和 PR :)