Opa コンパイラは、コードを非同期 Javascript コードに自動的に書き換えます。
これは、スレッド管理を処理する必要のない Opa の機能の 1 つであり、コンパイラによってデフォルトで処理されます。
さらに、Opa はその制御フローにアクセスするためのいくつかの同時実行プリミティブを提供します。
@callcc : continuation('a) -> 'a
@spawn : 'a -> Cps.future('a)
@wait : Cps.future('a) -> 'a
@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