backend/js チュートリアル
この短いチュートリアルでは、JavaScript バックエンドのパッケージが今何を提供しているか、そしてそれに備えたコードをどう書くかを示します。パッケージは JavaScript ターゲットを示し、モジュールのほかの部分はすでに JavaScript のポリシーとケイパビリティを記述できますが、JavaScript で実行されるものはまだありません。
クイックスタート
パッケージをインポートします。すべてのターゲットでビルドできます。
import {
"Luna-Flow/luna_thread/backend/js",
}
test "js quick start" {
inspect(@shared.backend_label(@js.backend_target()), content="javascript")
}
日常的なタスク
ターゲットでバックエンドを選ぶ
実行時にバックエンドを選ぶコードは、各バックエンドパッケージの backend_target を使えます。
fn backend_for(prefer_js : Bool) -> @shared.BackendTarget {
if prefer_js {
@js.backend_target()
} else {
@shared.native_target()
}
}
test "select" {
inspect(@shared.backend_label(backend_for(true)), content="javascript")
}
JavaScript バックエンドが何を受け付けるか確かめる
検証により v1 が JavaScript バックエンドを拒否することがわかるので、ネイティブバックエンドに切り替えられます。
test "rejected" {
let result = @shared.make_execution_policy(backend=@js.backend_target())
assert_true(result is Err({ issue: UnsupportedBackendForV1(JavaScript) }))
let graph = @workflow.Workflow::new("one").add_node(
@workflow.spawn_node(1, "spawn"),
)
inspect(
@workflow.submit(graph, backend=@js.backend_target()).accepted(),
content="false",
)
}
さらに進んで
仕様は、型付き配列のバッファを Node.js アドオンに渡す JavaScript の実現を記述しています。js/ のアドオンは make js-install と make js-build でビルドし、現在は runtimeName しかエクスポートしません。詳しくはアーキテクチャガイドを参照してください。
よくある落とし穴
@shared.javascript_policy()を呼ばないでください。v1 では中断します。RuntimeCapabilities::for_backend(JavaScript)は、まだ存在しない非同期とゼロコピーのサポートを宣言しています。
次のステップ
backend/js API に 3 つの関数が載っており、backend/js の設計では、バックエンドより先にパッケージが存在する理由を説明しています。