- Rust編程:入門、實戰與進階
- 朱春雷
- 2379字
- 2021-04-30 12:37:20
前言
為什么要寫這本書
雖然對Rust語言早有耳聞,但真正接觸Rust還緣于筆者在“一塊+”區塊鏈技術社區參加的陳錫亮老師主講的“Substrate快速入門與開發實戰”課程。Substrate是一個開源的區塊鏈開發框架,由Parity團隊使用Rust語言編寫。想學好Substrate,毋庸置疑得先學好Rust。因此筆者深入研讀了最權威的官方教程The Rust Programming Language、以代碼展示方式講解語法的Rust by Example以及深入底層系統介紹Rust設計哲學的《Rust編程之道》等著作。雖有10年以上編程經驗,熟悉Java、Python、Go等語言,但在學習Rust編程的過程中,筆者依然有嚴重的挫折感。挫折感的來源有以下三點。
一是初學者對Rust語言中一些特有的語法和符號需要一個適應過程。
二是Rust編譯器內建各種安全檢查規則,加上獨有的所有權系統,在編寫稍微復雜的程序時,幾乎難以做到一次編譯就成功通過,需要經歷反復的修改與編譯調試。
三是Rust編程中關于引用、智能指針的使用,以及在編寫Unsafe Rust過程中如何保證內存安全很復雜,對Java、Python、Go等語言的開發者也是較大的挑戰。
另外,縱觀市面上Rust圖書的共同點,大多側重于對Rust設計思想的介紹、對語法使用以及實現原理的詳細講解,缺乏有效的編程實戰教程。
因此,經過一段時間的深入思考,筆者決定撰寫本書,并嘗試將不限語言的數據結構和算法與Rust編程實戰進行結合,讓讀者可以憑借以往的編程基礎使用Rust語言進行實戰,在實戰中鞏固各知識點,提升Rust編程能力。學以致用是貫穿本書的理念。
讀者對象
本書內容由淺入深,即使沒有任何Rust編程經驗的開發者也可以學習參考。本書適用于以下幾類讀者。
- 有高級語言(如Java、Python、Go、C++等)編程經驗的開發者;
- 正在從事軟件開發工作的開發者;
- 計算機軟件及相關專業的學生;
- 其他有一定數據結構和算法經驗且對Rust感興趣的讀者。
本書特色
以往常聽一些朋友抱怨,且筆者在學習過程中也有類似感受:“學習一門新的語言,對入門書籍閱讀過半,還只會寫Hello World程序,繼續學習后面的章節卻已忘記了前面的內容。”之所以出現這種情況,主要是因為初學者很容易糾纏于語法細節的學習,鉆一些深奧復雜卻不常用的語法的“牛角尖”,導致“從入門到放棄”的情況時有發生。特別是Rust編程的初學者,如果一開始就囿于Rust語法細節,很容易因受挫而放棄。
筆者較為推崇的學習方式是,掌握一門語言最基礎的語法知識后就進行編程實戰訓練,實踐中遇到了問題再去探究深層原理和細節。這樣比一開始就進行“面面俱到、點點探究”的學習會更有收獲,理解也更為透徹。因此,本書將秉持學以致用的原則進行講解,不事無巨細地羅列一個個知識點,也不立刻探究背后的原理和細節,而是幫助讀者以最快的速度掌握Rust編程所需的基本概念和基礎語法,快速進入編程實戰訓練,以刻意練習的方式讓讀者掌握每個知識點。這里的刻意練習包含以下三個方面的要求。
一是在“學習區”學習。跳出學習的“舒適區”,選擇有難度、有挑戰的知識學習。數據結構和算法的優劣取決于開發者的技術功底,而開發者對數據結構和算法知識的掌握程序決定了他們在面對新問題時分析問題和解決問題的能力。因此,結合數據結構與算法的知識點進行編程訓練,能使讀者快速建立對Rust編程的認知,是挖掘自身成長潛能的重要手段和開發高性能程序的必備基礎。
二是大量重復練習。只有不斷地重復練習,才能真正掌握知識點。本書精選LeetCode平臺上與Rust語法知識點相關的一些高頻算法面試真題,在細致講解與代碼實現中,把重要的語法知識點通過題目復現,幫助讀者在重復練習中真正做到各個知識點的熟練掌握與融會貫通;同時,還會把初學者在練習中遇到的常見問題以及解決問題的過程展現出來,使讀者在逐步解決問題中鞏固知識點。
三是及時測評反饋。沒有及時反饋的練習往往是無效的。本書將協助讀者在LeetCode平臺上進行練習并及時獲得測評反饋,增加讀者的學習興趣。
如何閱讀本書
本書分為三篇,具體內容如下。
語言基礎篇(第1~11章):介紹Rust編程中必須掌握的基礎語法。
編程能力訓練篇(第12~13章):將數組、棧、隊列、哈希表、鏈表、樹等實用的數據結構和遞歸、分治、回溯、二分查找、排序、動態規劃等常用算法與Rust編程實戰結合進行講解,并精選了LeetCode上的一些高頻算法面試真題,使用Rust語言進行編程實戰。
綜合實戰篇(第14~15章):以排序算法為主題,圍繞功能拓展和性能拓展兩條主線,結合工程管理、泛型、trait系統、高階函數、閉包、迭代器、單元測試、多線程并發和異步并發等重要的語法知識點進行綜合實戰訓練。
如果你具備Rust基礎語法知識,可以直接從第2章或編程能力訓練篇開始閱讀。但如果你是一名初學者,建議按照本書的編排順序從第1章開始學習。
勘誤和支持
由于筆者的水平有限,加之時間倉促,疏忽和不足之處在所難免,懇請讀者批評指正。筆者在GitHub上創建了一個Resposity,讀者可以在這里找到書中的全部源代碼,同時可以將書中的錯誤(請標明具體的頁碼和錯誤信息)直接提交issues,筆者將會及時發布更新修訂。如果你有更多的寶貴意見,也歡迎提交issues。期待能得到你的支持與反饋。
此外,筆者會長期運營公眾號“沖鴨Rust和區塊鏈”,分享Rust、算法和區塊鏈開發的原創技術。考慮到本書定位于快速入門實戰,沒有涉及Rust宏和Unsafe編程,筆者后續計劃從Substrate和libp2p源碼解析的角度寫一些進階版實戰系列來講解這些知識點,并會分享在公眾號上供大家參考。
隨書源碼地址:https://github.com/inrust/Rust-Programming-in-Action。
致謝
首先要感謝Rust社區為全球開發者提供的高質量文檔和相關資料,感謝Gavin Wood博士為Rust貢獻了諸多優秀的開源代碼,感謝張漢東老師等國內Rust布道者,本書是站在巨人的肩膀上完成的。
其次要感謝機械工業出版社華章公司策劃編輯楊福川和責任編輯董惠芝在這近半年時間里始終支持我的寫作,你們的鼓勵和幫助使我得以順利完成全部書稿。
還要感謝Web 3基金會、“一塊+”區塊鏈技術社區的同人以及在寫書過程中給予指導的各位老師,你們的支持和推薦使得書稿最終順利完成。特別感謝同窗好友葉毓睿同學,你的引薦促成了這本書的出版。
最后要感謝我的家人,因為有了你們的信任和支持,我才能夠安心、堅持不懈地做自己想做的事。
- Java程序設計(慕課版)
- Visual Basic .NET程序設計(第3版)
- Progressive Web Apps with React
- JIRA 7 Administration Cookbook(Second Edition)
- Python Data Analysis(Second Edition)
- Monitoring Elasticsearch
- 實戰Java高并發程序設計(第3版)
- Java編程技術與項目實戰(第2版)
- Active Directory with PowerShell
- Android系統原理及開發要點詳解
- Access 2010中文版項目教程
- QGIS Python Programming Cookbook(Second Edition)
- Java Web開發實例大全(基礎卷) (軟件工程師開發大系)
- Vue.js光速入門及企業項目開發實戰
- 深入理解Kafka:核心設計與實踐原理