學習Rust的心智模型 - kerkour

banq發表於2022-03-03

我們不拐彎抹角: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.。
 

相關文章