Opa 编译器自动将您的代码重写为异步 Javascript 代码。
这是 Opa 的特性之一,你不应该关心线程管理,它默认由编译器处理。
此外,Opa 提供了一些并发原语来访问其控制流。
@callcc : continuation('a) -> 'a
@spawn : 'a -> Cps.future('a)
@wait : Cps.future('a) -> 'a
Where@callcc
允许访问当前的延续。这是一个使用示例,从异步函数构建了一个同步函数:
function ('a -> 'b) to_sync(('a, ('b -> void) -> void) fasync){
function (a){
@callcc(function(k){
fasync(a, Continuation.return(k, _))
})
}
}
并@spawn
在另一个“线程”上启动一个值的计算。并@wait
用于获取生成的值。作为伪示例:
function example(){
future = @spawn(
x = fibo(30);
jlog("End of spawn computation {x}");
{result : x}
)
// ...
jlog("do something before wait")
result = @wait(future).result
jlog("the result is [resulr}")
}
//Output of example is :
// do something before wait
// the result is 832040
您还可以使用模块访问调度原语Scheduler