Rust newtype 讓錯誤狀態在編譯期就無法被表示,而且完全免費
一個單欄位的 wrapper struct 就能在不增加任何位元組開銷的情況下,抓出單位混淆與型別錯用的 bug。
把 的使用者 ID 傳給一個預期接收訂單 ID 的函式,Rust 不會抱怨。兩者都是 。編譯器看到的是完全相同的型別,所以幫不上忙。你會在執行期才發現,通常是在正式環境,通常是在一次你以為安全的重構之後。 這正是 newtype 存在要消滅的 bug 類別。 newtype 是一個單欄位的 tuple…
2 posts
一個單欄位的 wrapper struct 就能在不增加任何位元組開銷的情況下,抓出單位混淆與型別錯用的 bug。
把 的使用者 ID 傳給一個預期接收訂單 ID 的函式,Rust 不會抱怨。兩者都是 。編譯器看到的是完全相同的型別,所以幫不上忙。你會在執行期才發現,通常是在正式環境,通常是在一次你以為安全的重構之後。 這正是 newtype 存在要消滅的 bug 類別。 newtype 是一個單欄位的 tuple…
該傳秒數的地方傳了毫秒,這種 bug 能通過所有測試。以下介紹如何將單位直接編碼進 TypeScript 的型別系統,讓混用在編譯階段就失敗,且執行期零成本。
某個函式要求以毫秒為單位的超時時間。你傳入 。稍後,另一個函式要求以秒為單位的超時時間。你傳入 。在這之間的某處,你呼叫了 ,結果整整一小時又二十三分鐘什麼事都沒發生。 TypeScript 在這裡幫不上忙。 和 都是…