• GC安全

    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堆内存。