#錯誤處理 — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #錯誤處理, aggregated by home.social.
-
Matt Godbolt sold me on Rust by showing me C++ | Hacker News
Link
Matt Godbolt 以 C++ 示範說服我學 Rust
https://collabora.com/news-and-blog/blog/matt-godbolt-sold-me-on-rust-by-showing-me-cplusplus.html
📌 Summary:
文章從 Matt Godbolt 在 Compiler Explorer 的知名度談起,介紹他在演講「Correct by Construction: APIs That Are Easy to Use and Hard to Misuse」中提到 C++ 中常見的錯誤及其防範困難,並以送出股票訂單函式為範例,深入探討 C++ 中因型別不夠嚴謹導致的混淆與錯誤問題,包含參數位置錯誤、隱式類型轉換及負數不當使用等。作者示範如何用 C++ 類別與模板嘗試限制錯誤使用,但仍面臨程式碼複雜度高與執行期錯誤風險。相較之下,Rust 透過強型別系統、明確的型別轉換、編譯期錯誤訊息與 Result 型別強制錯誤處理,大幅減少這些問題。Rust 不只專注於記憶體安全,更在設計層面降低簡單錯誤發生,讓開發者不需過度思考保護措施,進而提升可靠度與維護性。最後討論 Rust 仍有學習曲線和借用檢查器限制,但其嚴謹的型別系統與錯誤處理設計在實務應用上提供明顯優勢,並激勵讀者關注 Matt Godbolt 的相關內容與工具。
🎯 Key Points:
★ C++ 範例展示問題
→ 以 sendOrder 函式作為例子,使用基本型別(double、int)易因隱式類型轉換導致參數錯置,不會在編譯期被警告。
→ 嘗試用 typedef 與類別包裝,如 Price、Quantity,搭配 explicit 建構子與 unsigned 型別提升型別安全度,但仍無法避免使用者透過字串轉換插入錯誤數值(如負數)且無法於編譯期偵測。
★ Rust 在防範錯誤上的優勢
→ Rust 函式在參數型別不匹配時直接編譯失敗,且會提供明確錯誤訊息建議。
→ 可用 struct 封裝型別,無法將錯誤數值(如負數對 unsigned)編譯通過。
→ 用 Result 和 .parse() 函式將轉換錯誤回報為編譯期錯誤,迫使使用者明確處理錯誤,避免潛藏的執行期錯誤。
→ Rust 的錯誤處理有一套統一機制(Result)且搭配 ? 運算子,使錯誤傳播及處理變得簡潔且安全。
★ 語言設計的啟發
→ Rust 除了眾所皆知的記憶體安全,還能在日常型別使用與 API 設計層面大幅降低簡單但致命的錯誤。
→ 使用 Rust 可省去許多保護性思考,讓開發者能專注於邏輯實作,減少隱藏型錯誤的風險。
→ 學習曲線如借用檢查器初期不易,但熟悉後可大幅提升程式健全性。
→ 建議關注 Matt Godbolt 的線上資源與 Compiler Explorer 工具,深入瞭解此類設計思維。
🔖 Keywords:
#Rust #C++ #型別安全 #錯誤處理 #Matt_Godbolt -
Oh Shit, Git!?!
Link
📌 Summary: 在使用 Git 時,即使一個小錯誤也可能造成困擾,解決問題往往需要深入瞭解。本文整理了幾個常見的錯誤操作及其解決方法,包括如何利用 git reflog 回到先前狀態、修改最近的提交、變更提交訊息、從錯誤分支回到正確分支等。這些技巧若能熟練運用,能有效減少在版本控制過程中的挫折感。
🎯 Key Points:
- 使用 git reflog 恢復到先前狀態,無論是找回誤刪檔案或修復錯誤合併。
- 可以利用 git commit --amend 快速修改最後的提交,但注意不應該修改已推送的提交。
- 若誤將提交放在錯誤分支,可透過 git reset 和 git stash 將變更轉移到正確分支上。
- 回溯早前的提交可使用 git revert,這樣不需手動復原檔案內容。
- 當整個 repo 混亂時,可以透過 git fetch、git reset 和 git clean 重置至遠端狀態,注意這是無法恢復的行為。
🔖 Keywords: #Git #版本控制 #錯誤處理 #提交修正 #分支管理 -
My negative views on Rust
Link
📌 Summary: 本文概述了作者對Rust程式語言的負面看法,探討了語言的優缺點。作者喜歡Rust的宏、類型系統和標準庫,但對其不安全性及錯誤處理機制表示擔憂。同時指出Rust的複雜性和對記憶體效率的過於追求可能令新手感到困惑。此外,作者認為Rust社群友好卻隨著使用者增多逐漸變得競爭。同時,Rust缺乏內建的異步運行時也導致問題,最後對Rust作為通用語言的功能性表示失望。
🎯 Key Points:
- 優點:包括優秀的宏、類型系統、記錄處理及UTF-8字串支持。
- 不安性與錯誤處理:使用不安全代碼之風及不同的錯誤處理機制令人困惑。
- 語言複雜性:隨著語言特性的增加,新手需要學習的知識日益繁多。
- 社群變遷:起初友好的社群隨著使用者的增多面臨更激烈的競爭與意見分歧。
- 缺乏異步運行時:導致開發者在實現異步處理時的困難。
🔖 Keywords: #Rust #程式語言 #複雜性 #社群 #錯誤處理