• noSideEffect编译指示

    noSideEffect编译指示

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

    作为一种特殊的语义规则,内置的 debugEcho 没有副作用,因此它可以用于调试标记为 noSideEffect 的例程。

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

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

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

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