儘管你加上了 impure,FunC 一樣不理你?!

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 了

如果有任何問題歡迎來我的 X 或是 Telegram 討論