push 和 pop 编译指示

push/pop 编译指示也是用来控制编译选项的,不过是用于临时性地修改设置然后还原。例子:

  1. {.push checks: off.}
  2. # 由于这一段代码对于执行速度非常关键,所以不做运行时检查
  3. # ... 一些代码 ...
  4. {.pop.} # 恢复原来旧的编译设置

push/pop 能够开关一些来自标准库的编译指示,例如:

  1. {.push inline.}
  2. proc thisIsInlined(): int = 42
  3. func willBeInlined(): float = 42.0
  4. {.pop.}
  5. proc notInlined(): int = 9
  6. {.push discardable, boundChecks: off, compileTime, noSideEffect, experimental.}
  7. template example(): string = "https://nim-lang.org"
  8. {.pop.}
  9. {.push deprecated, used, stackTrace: off.}
  10. proc sample(): bool = true
  11. {.pop.}

对于来自第三方的编译指示,push/pop 是否有效与第三方的实现有关,但是无论如何使用的语法是相同的。