Background
@Alan 和我最近嘗試在 FunC 中實現多型,使用三元運算符來決定執行哪個函數。然而,我們遇到了一個奇怪的問題:儘管我們將 sum()
和 mul()
都標記為 impure,但如果函數的返回值未被使用,函數內的任何錯誤卻未按照預期拋出。
這很奇怪,因為按照 impure 修飾符的邏輯,即使返回值未被使用,函數也應該拋出錯誤。
Description
下圖為我們使用的範例 functions:
In the main program:
當返回值被使用時(如在 op::with_dump
的情況下),錯誤會正確地被拋出。然而,在 op::without_dump
的情況下,由於返回值未被使用,即使函數已標記為 impure,錯誤卻未被拋出。您可以參考此測試案例,理論上它應該拋出錯誤,但其狀態卻顯示為成功。
這種行為令人困惑,因為理論上 impure 函數應該無論返回值是否被使用都會觸發錯誤。我們還進行了額外的測試,例如直接調用函數而不使用返回值,在這些情況下,錯誤能夠成功地被拋出。您可以參考下方的圖片,當直接調用 sum()
和 mul()
時,無論是否使用返回值,錯誤都能成功被拋出。
Test Result
你可以在此 repo 看到完整的測試
Official Confirmation
經過官方查驗後,確認有這個 bug 並且修復後已經 merged 了