noSideEffect编译指示
noSideEffect 编译指示用于标记proc / iterator没有副作用。 这意味着proc / iterator仅更改可从其参数访问的位置,并且返回值仅取决于参数。 如果它的参数都没有类型var T
或ref T
或ptr T
,这意味着没有修改位置。 如果编译器无法验证,则将proc / iterator标记为无副作用是一个静态错误。
作为一种特殊的语义规则,内置的 system.html#debugEcho,varargs[typed,] 假装没有副作用, 这样它就可以用来调试标记为 noSideEffect 的例程了。
func 是没有副作用的proc语法糖。
- func `+` (x, y: int): int
要覆盖编译器的副作用分析,可以使用 {.noSideEffect.} 编译指示块:
- func f() =
- {.noSideEffect.}:
- echo "test"