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
- IDEA 外掛推薦 —— 讓你寫出好程式碼的神器!Idea
- Rust是如何用Rust編寫的? - RedditRust
- 程式設計師如何寫出好程式碼?程式設計師
- 如何寫出好程式
- Rust 程式碼質量和漏洞掃描工具 - RedditRust
- 想要寫出好味道的程式碼,你需要養成這些好習慣!
- Rust, Go與Hasekll比較 - RedditRustGo
- 如何寫出好的單元測試
- ekzhang/rustpad:使用Rust編寫的高效程式碼編輯器Rust
- 我寫的 Python 程式碼,同事都說好Python
- 程式碼寫不好,卻能當領導!
- 用Rust編寫的快如閃電的程式碼編輯器:lapceRust
- 七個不一樣的Python程式碼寫法,讓你寫出一手漂亮的程式碼Python
- 你真的會用搜尋引擎嗎?能寫出好論文、找到好工作的那種
- 如何寫出讓同事無法維護的程式碼?
- 我是如何將業務程式碼寫優雅的
- 面試官:如何寫出讓 CPU 跑得更快的程式碼?面試
- 我讓 ChatGPT 寫了個 ChatGPTChatGPT
- 老闆說laravel太慢讓我用rust寫web重構公司幾年前的專案怎麼辦?LaravelRustWeb
- Android編譯期插樁,讓程式自己寫程式碼(二)Android編譯
- Android編譯期插樁,讓程式自己寫程式碼(一)Android編譯
- 如何讓Java編譯器幫你寫程式碼Java編譯
- Rust語言最獨特的特點是什麼? - RedditRust
- 3年程式設計師寫的程式碼被應屆生懟:我能三行搞定!也配叫程式設計師?程式設計師
- 思考:如何寫出讓同事難以維護的程式碼?doge
- 還在寫那些讓人頭皮發麻的程式碼嗎?
- 我在阿里寫程式碼學會的六件事阿里
- GitHub 新出的功能!可以幫我們自動寫程式碼Github
- 畢業前寫了20萬行程式碼,讓我從成為同學眼裡的麵霸!行程
- 我的原始碼讓貓給吃了原始碼
- CSS 程式碼線上生成工具,讓你少寫幾百行程式碼~CSS行程
- 怎麼寫出好的敏捷測試(Agile Tesing)策略文件敏捷測試
- 我們為什麼設計不出好的遊戲?遊戲
- 封裝DataBinding讓你少寫萬行程式碼封裝行程
- 對不起,我錯了,這程式碼不好寫
- 我們應該如何編寫高質量的前端程式碼前端
- 讓我們來用php編寫一個搶購商品指令碼PHP指令碼