JAC中spawn here与spawn -->两种walker启动方式的差异问询
JAC中
spawn here与spawn -->的区别解析 核心差异
spawn here walker::walker_name;(同步启动)
这种写法会让当前walker暂停执行,等待被启动的walker完全运行结束后才继续往下走。如果被启动的walker没有明确返回值,赋值结果就是NULL——这就是你代码里test1返回NULL的原因。spawn --> walker::walker_name;(异步启动)
这种写法不会阻塞当前walker的执行,被启动的walker会在后台并行运行。它的返回值是一个walker句柄列表,用来跟踪所有异步启动的walker实例。如果没有需要跟踪的有效句柄(比如你的mytest没有产生可返回的句柄内容),就会返回空列表[],对应你代码里test2的结果。
结合你的代码验证
看你提供的测试代码:
walker mytest { std.out("hello world"); } walker init{ root { test1 = spawn here walker::mytest; test2 = spawn --> walker::mytest; std.out(test1); std.out(test2); } }
- 执行
spawn here时,mytest的std.out("hello world")会先跑完,才会给test1赋值NULL,再执行后续的打印。 - 执行
spawn -->时,mytest会被立刻调度启动,但当前initwalker不会等它跑完,直接生成空句柄列表赋值给test2,然后执行打印——甚至有可能test2的打印会比mytest的hello world先输出,具体取决于JAC的调度机制。
内容的提问来源于stack exchange,提问作者Roland Daynauth
相关产品推荐
相关产品推荐

