1

Node.js 自体は、ワーカー スレッドと子プロセスの作成をサポートしています。Node.js を使用したことがある方は、Async.js や Step などのフロー制御ライブラリに精通しているかもしれません。

Opa は Node.js スタックで実行されるため、Async.js ライブラリを JavaScript モジュールとして使用する方法はありますか?

スレッド化またはある種の非同期フロー制御を可能にする Opa 言語のバインディングはありますか? 私はそうではないと思いますが、 Opa でスレッド化または非同期フロー制御を実装するための可能なオプションは何ですか?

*これで、自分の作業を Opa 以外の言語の別のスクリプトにシェルアウトして渡すことができることがわかりましたが、それが唯一の選択肢でしょうか?

私は Opa を初めて使用し、その機能を理解しようとしているので、事前に感謝します!

4

2 に答える 2

5

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

于 2012-10-01T09:19:31.323 に答える
2

Opa には、非同期サーバー呼び出しのサポートが組み込まれています。残念ながら、現時点では十分に文書化されていません。ただし、次のことを考慮してください。

@async server function my_async_function() {
  Scheduler.wait(2000);
  #done = "async function done!"
}

function clicked() {
  my_async_function();
  #clicked = "you clicked me!"
}

function go() {
  Resource.page("hello", (
    <>
     <p>click this button:</p>
     <button onclick={function(_) { clicked() }}>
      clickme</button>
     <div id=#clicked/>
     <div id=#done/>
    </>
  ))
}

Uri.relative -> resource function start(uri) {
  match (uri.path) {
    | _ : go()
  }
}

Server.start(Server.http,
  { dispatch: start }
)

(これは、このメーリング リスト スレッドの例に似ていますが、現在のデフォルトの Opa 構文に合わせて少し簡略化および更新されています。)

于 2012-09-30T19:39:00.330 に答える