noSideEffect编译指示

noSideEffect 编译指示用于标记proc / iterator没有副作用。 这意味着proc / iterator仅更改可从其参数访问的位置,并且返回值仅取决于参数。 如果它的参数都没有类型var Tref Tptr T,这意味着没有修改位置。 如果编译器无法验证,则将proc / iterator标记为无副作用是一个静态错误。

作为一种特殊的语义规则,内置的 system.html#debugEcho,varargs[typed,] 假装没有副作用, 这样它就可以用来调试标记为 noSideEffect 的例程了。

func 是没有副作用的proc语法糖。

  1. func `+` (x, y: int): int

要覆盖编译器的副作用分析,可以使用 {.noSideEffect.} 编译指示块:

  1. func f() =
  2. {.noSideEffect.}:
  3. echo "test"