GC安全

当过程不通过调用GC不安全的过程直接或间接访问任何含有GC内存的全局变量(string, seq, ref 或闭包)时,我们称过程 pGC安全 。

gcsafe 可用于将proc标记为gcsafe,否则此属性由编译器推断。 请注意, noSideEffect 意味着 gcsafe 。创建线程的唯一方法是通过 spawncreateThread 。 被调用的proc不能使用 var 参数,也不能使用任何参数包含 refclosure 类型。 这会强制执行 无堆共享限制

从C导入的例程总是被假定为 gcsafe 。 要禁用GC安全检查,可以使用 —threadAnalysis:off 命令行开关。 这是一种临时解决方法,可以简化从旧代码到新线程模型的移植工作。

要覆盖编译器的gcsafety分析,可以使用 {.gcsafe.} 编译指示:

  1. var
  2. someGlobal: string = "some string here"
  3. perThread {.threadvar.}: string
  4.  
  5. proc setPerThread() =
  6. {.gcsafe.}:
  7. deepCopy(perThread, someGlobal)

未来的方向:

  • 可能会提供一个共享的GC堆内存。