expermimental 编译指示

experimental 编译指示用于启用实验性的语言特性。也就是说,具体到每个特性,有的过于不稳定,无法发布;有的前景不明朗(可能随时被删除)。详情参阅实验手册

示例:

  1. import std/threadpool
  2. {.experimental: "parallel".}
  3. proc threadedEcho(s: string, i: int) =
  4. echo(s, " ", $i)
  5. proc useParallel() =
  6. parallel:
  7. for i in 0..4:
  8. spawn threadedEcho("并行地使用 echo ", i)
  9. useParallel()

expermimental 编译指示是顶层语句,模块里出现了这个编译指示之后,它所启用的特性就一直有效。这会给宏和泛型实例的使用带来问题,因为它们可以跨越模块作用域。目前,必须在 .push/pop 环境中使用以避免问题:

  1. # client.nim
  2. proc useParallel*[T](unused: T) =
  3. # 这里使用泛型 T 演示问题.
  4. {.push experimental: "parallel".}
  5. parallel:
  6. for i in 0..4:
  7. echo "并行输出"
  8. {.pop.}
  1. import client
  2. useParallel(1)