副作用
noSideEffect 编译指示用于标记过程和迭代器,说明它们只能通过参数产生副作用。这意味着这个过程或迭代器只能修改参数所涉及的地址,而且返回值只依赖于参数。假如该过程或迭代器的参数中都不是 var、ref、 ptr、 cstring 或 proc 类型,则不会修改外部内容。
换句话说,如果一个例程既不访问本地线程变量或全局变量,也不调用其他带副作用的例程,则该例程是无副作用的。
如果给予一个过程或迭代器无副作用标记,而编译器却无法验证,将引发静态错误。
作为一个特殊的语义规则,内置的debugEcho忽略副作用,这样它就可以用于调试标记为 noSideEffect 的例程。
func 是无副作用过程的语法糖:
func `+` (x, y: int): int
{.cast(noSideEffect).} 编译指示可覆盖编译器的副作用分析:
func f() =
{.cast(noSideEffect).}:
echo "test"
副作用通常可被推断出来,与异常追踪的推断类似。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .