Rust能讓我寫出好的程式碼 - Reddit
Java是 "強型別 "的,但來自java這種督促並沒有讓我的程式碼結構變得更好。例如,Java能讓你使用UnsignedInteger型別,但人們通常不會使用它。相反,建立“類”的感覺是很麻煩的,有很多模板。
Rust的獨特之處在於它強迫你一次只能有一個可變的“引用”,但我懷疑僅憑這一點就能讓你構建出偉大的程式碼。反而那些透過缺少“引用”來避免這種情況的語言,並不能讓我寫出好的程式碼。
我確實注意到Rust是完全不含糊的,這有助於我思考某些最佳化問題。但是,這仍然不足以讓我寫出偉大的程式碼。
看起來,多種此類屬性的結合使Rust促使使用者寫出更好的程式碼。我已經意識到,在用其他語言編碼時,我有點像 "crack到它能用為止"。在執行時測試,沿途修復任何錯誤。Rust似乎給了我一個備選方案,以涵蓋各種邊緣情況,而不需要執行它們。
現在我已經達到了這樣的程度:當我在工作中得到一個任務時,我可以先用Rust寫出來,並確保編譯器滿意--我甚至不需要執行程式碼,只是編譯就夠了--然後把程式碼翻譯成我的目標語言。這樣一來,我就避免了 "crack它直到成功 "的環節,因為它就是成功的。
不知何故,在與 Rust 編譯器鬥爭時,“crack它直到它工作”變成了“重寫它直到它結構良好”。就像他們構建了你如何與編譯器對抗一樣,所以它不再是一個駭客。
這裡的關鍵見解是,嚴格控制記憶體所有權通常會產生更好的程式碼。目標不是強迫程式設計師編寫更好的程式碼,但更好的程式碼通常是記憶體安全的。具有相同目的的事物傾向於共享相同的生命週期、作用域等。
我發現非同步程式設計更是如此。如果您可以在函式呼叫和記憶體執行緒中保持安全,那麼您可以在併發和並行程式碼中保持安全。
我記得在 2010 年代,有多少 js 開發者抱怨“回撥地獄”之類的東西。事實是,如果您無法在非同步呼叫中推理記憶體安全性,在深度巢狀的閉包作用域內捕獲大量可變變數,那隻會是地獄般的。每個人都認為 Promises 拯救了它們,但如果舊程式碼庫讓所有東西預設不可變,它們的大部分問題可能會消失。
Rust透過使錯誤的事情變得更加困難來激勵做正確的事情。
很難確定究竟是什麼讓 Rust 在設計程式碼方面做得更好,但我想到了一個列表:
- 資料優先——Rust 有資料優先的方法,而其他程式語言有“類優先”或“函式優先”的方法。這可能會影響我們從一開始就進行程式碼設計的方式,併成為關注最重要的資料結構的強制因素。
- 缺乏繼承——起初這對我來說很難,但這是我們都需要洗的冷水澡。乾淨的結構和列舉/變體模型使事情變得更加直接和明確,簡化了未來的程式碼。有時它仍然感覺缺失,但它可能只是一個遺留的習慣。
- Orientation Dogma Free - 與 2 相關,但在拒絕 OOP 之後,Rust 甚至沒有嘗試跳入 FP 教條。我認為 FP 正在重複 OOP 所犯的許多錯誤。時間會證明一切,但我預測幾年(或更早)會出現 FP 疲勞。並不是說某些函式式正規化沒有前途,Rust 應該有更多,但教條式的做法適得其反。
- 匹配模式——整個匹配模式改變了我的程式設計風格,每個分支都是意圖驅動的,而不是一些語言強制分支的必要性。
- 模組系統- 模組的直觀資料夾結構,同時仍然允許完全的靈活性,並記住模組應該匯出多個結構,甚至允許重新匯出以隱藏下游佈局細節。這個模組系統有很多。
- 端到端工具鏈- 從單元測試(具有私有訪問許可權)、整合測試、示例、文件,甚至完全融入基準測試。這有助於我們做我們早就應該關心的事情。
Rust 並不一定會讓你寫出“更好”的程式碼。它促使您編寫更多面向編譯時的程式碼,而不是面向執行時的程式碼。這使得編寫面向執行時的程式碼變得困難,並且由於面向編譯時的程式碼更適合靜態分析,因此您可以更早地發現錯誤。
有許多軟體工程和演算法問題可能在面向編譯時的程式碼之外有最好的解決方案,但對於大多數人來說,大多數時候(在 leetcode 之外)大多數問題,他們最好編寫面向編譯時的解決方案。
相關文章
- Rust讓我上癮了 - RedditRust
- Rust是如何用Rust編寫的? - RedditRust
- IDEA 外掛推薦 —— 讓你寫出好程式碼的神器!Idea
- 為什麼我們程式設計師寫不出好程式碼?程式設計師
- 漫畫:如何寫出好程式碼?
- 寫讓別人能讀懂的程式碼
- 程式設計師如何寫出好程式碼?程式設計師
- 如何寫出好程式
- 每天寫出好程式碼的 5 個建議
- 不利於寫出好程式碼的15個職場因素
- Rust 程式碼質量和漏洞掃描工具 - RedditRust
- 編寫讓別人能夠讀懂的程式碼
- 我已經寫了48年程式碼了,我感覺我還能寫下去
- 當我寫程式碼時 我寫的是
- 讓程式碼寫程式碼,自主程式設計的 AI 離我們還有多遠?程式設計AI
- 我寫的jQuery程式碼jQuery
- 為了寫出好程式,有時需要先寫出爛程式
- 想要寫出好味道的程式碼,你需要養成這些好習慣!
- ekzhang/rustpad:使用Rust編寫的高效程式碼編輯器Rust
- 重寫Reddit
- Rust, Go與Hasekll比較 - RedditRustGo
- 能讓你少寫1000行程式碼的20個正規表示式行程
- 為了寫出好程式,有時候你需要先寫出爛程式
- 不給程式碼寫文件,讓程式碼文件化
- 寫程式碼的最高境界:能不寫則不寫、能少些則少些
- 在Reddit中程式碼部署的演進
- 我男友寫程式碼不接我電話
- 程式碼寫不好,卻能當領導!
- 多些時間能少寫些程式碼
- 老鳥能邦我看一下我的程式碼,很小不大
- 你真的會用搜尋引擎嗎?能寫出好論文、找到好工作的那種
- 如果讓莎士比亞、海明威編寫JavaScript程式碼JavaScript
- 用Rust編寫的快如閃電的程式碼編輯器:lapceRust
- 知道這20個正規表示式,能讓你少寫1,000行程式碼行程
- 老闆說laravel太慢讓我用rust寫web重構公司幾年前的專案怎麼辦?LaravelRustWeb
- 我是如何將業務程式碼寫優雅的
- 我寫的 Python 程式碼,同事都說好Python
- 如何寫出好的 JavaScript —— 淺談 API 設計JavaScriptAPI