學習Rust的心智模型 - kerkour
我們不拐彎抹角:Rust確實 不容易學習。
我想我花了將近1年的時間全職用Rust程式設計,才變得熟練,不再需要每5行程式碼就看一次文件。這是一個漫長的旅程,但絕對值得。
它要求你重新思考你在使用其他程式語言時學到的所有心理模型。
這就是為什麼我認為分享一下這些年來我在使用Rust時是如何調整我的程式設計習慣的,可能會很有趣。
擁抱編譯器
編譯器會讓你在開始使用Rust時遇到困難。你會討厭它。你會發誓。你會希望禁用它,把它送進地獄。不要這樣做。
編譯器應該被看作是一個始終可用的、友好的程式碼審查器。所以,它不是阻止你的程式碼編譯的東西。相反,它是一個朋友,告訴你你的程式碼有缺陷,甚至提供如何修復它的建議。
多年來,我見證了編譯器所顯示的資訊的巨大改進,我毫不懷疑,如果今天編譯器對一個邊緣案例產生了一個晦澀的資訊,它將在未來得到改進。
及時學習
Rust是一門龐大的語言,你不可能在幾周內掌握。而這完全沒有問題。你不需要什麼都知道就可以開始學習。
在寫第一個程式之前,我已經花了很多時間閱讀Rust背後的所有電腦科學。這是一個錯誤的方法。關於Rust的所有特性,有太多的東西需要閱讀,而且你肯定不會全部使用它們(你也不應該!)。例如,請永遠不要使用non_ascii_idents,它只會帶來混亂和痛苦!)。所有這些東西真的很有趣,而且是由非常聰明的人制作的,但它妨礙你完成事情。
相反,擁抱未知,做你的第一個程式。失敗。學習。重複。
保持簡單
不要試圖變得太聰明!。如果你在與語言的侷限性作鬥爭(這已經很龐大了),這可能意味著你做錯了什麼。停止你正在做的事情,休息一下,想想你如何能以不同的方式做事。這幾乎每天都發生在我身上。
另外,請記住,你越是在玩弄型別系統的限制,你的程式碼就越會產生難以被編譯器理解的錯誤。所以,讓你和你的同事們幫個忙吧。KISS(Keep It Simple, Stupid)。
傾向於把事情做完,而不是永遠不發貨的完美設計。重做一個不完美的解決方案要比永遠不出貨的完美系統好得多。
你會預先支付了成本
用Rust程式設計有時可能會顯得比Python、Java或Go慢一些。這是因為,為了進行編譯,Rust編譯器要求的正確性水平遠遠高於其他語言。因此,在一個專案的整個生命週期中,Rust將為你節省大量的時間。你在Rust中製作一個正確的程式所花費的精力,是你省下的時間(以及金錢和精神健康!)的1倍-10倍,因為你不必花數小時來除錯奇怪的錯誤。
我在生產中交付的第一個程式是用TypeScript(Node.js)和Go。由於這些語言的編譯器和型別系統比較寬鬆,你必須在程式碼和外部服務中新增複雜的儀器,以便在執行時檢測錯誤。在Rust中,我從來沒有用過這個。
簡單的日誌記錄就是我追蹤程式中錯誤的全部需要。
除此之外,在我的記憶中,我從未在Rust的生產系統中遇到過崩潰。
這是因為Rust迫使你 "預先支付成本":你必須處理每一個錯誤,並對你正在做的事情非常用心。
函數語言程式設計
Rust是(在我看來)在命令式和函式式語言之間的完美結合,以完成工作。這意味著,如果你來自一個純粹的指令式程式設計語言,你將不得不放棄一些東西,接受函式式正規化。
喜歡迭代器(第3章)而不是for迴圈。贊成不可變的資料而不是可變的引用,別擔心,編譯器會對你的程式碼進行很好的最佳化。
還有幾個提示
使用自動化工具來協助你維護你的專案:rustfmt, clippy, cargo update, cargo outdated 和cargo-audit.。
相關文章
- Rust中的後臺作業 - kerkourRust
- 心智閱讀系列 :組隊學習
- 什麼情況下不要用Rust語言? - kerkourRust
- 心智閱讀系列:如何主動學習
- 2022年選擇哪個Rust Web框架 - kerkourRustWeb框架
- 心智模型:做出明智決策的最佳方式 - Farnam模型
- Rust編譯器比其他語言更能捕獲隱藏的錯誤 - kerkourRust編譯
- 學習Rust 函式Rust函式
- 學習Rust 迴圈Rust
- Rust 學習筆記Rust筆記
- yangwenmai/learning-rust: Rust 學習之路AIRust
- 學習Rust 物件導向Rust物件
- 學習Rust 集合與字串Rust字串
- 學習Rust 結構體Rust結構體
- rust 學習記錄(一)Rust
- Rust 語言學習之旅Rust
- 一起學習RustRust
- rust學習七、列舉Rust
- 深度學習的Attention模型深度學習模型
- Rust 程式設計,Option 學習Rust程式設計
- 為什麼要學習 RustRust
- 學習Rust 檔案與 IORust
- 學習Rust泛型與特性Rust泛型
- 學習Rust 基礎語法Rust
- 學習Rust 條件語句Rust
- 學習Rust:派生derive屬性Rust
- Rust 語言學習之旅(6)Rust
- Rust 語言學習之旅(3)Rust
- Rust 語言學習之旅(2)Rust
- Rust 語言學習之旅(7)Rust
- 學習Rust 錯誤處理Rust
- rust學習三、基本型別Rust型別
- rust學習四、控制語句Rust
- rust學習八、包和模組Rust
- 深度學習模型深度學習模型
- rust學習六、簡單的struct結構RustStruct
- 深度學習中的Normalization模型深度學習ORM模型
- Rust build.rs進階學習RustUI