Open6

nccc: Node.js以外のJavaScript処理系のFFIはどうなってんのか問題

okuokuokuoku

Node以外のJavaScript処理系にemscripten2nativeを移植するためには、それ用のFFI対応が必要になる。 ... N-APIに対応してたりはたぶんしないよね。。?

調査対象

emscripten2nativeとしては3つのポイントがある。

  1. どんな方法でも良いのでDLLをロードして最低1つのシグネチャで呼び出せる
  2. WebAssemblyが実行できると良い (が、emscripten2nativeがNCCC経由のbindingを用意するつもりなので無くても良い)
  3. デストラクタのコールバックかWeakMapが必要

最後の要求はWebGLの実装のため。

一旦WinterCG処理系に絞る。どれもパッケージマネージャとしてはnpmが使える。。と期待したい。

WinterCGの大きな互換表は https://runtime-compat.unjs.io/ にある。

WinterCGのリスト https://runtime-keys.proposal.wintercg.org/ だと他にはModdable https://github.com/Moddable-OpenSource/moddable かなぁ。。

libjsはいくつかのJS処理系(QuickJS、JSC、v8)のCバインディングを提供している https://github.com/holepunchto/libjs 。I/Oはlibuvに依存。

Javyの存在を忘れてた。。https://github.com/bytecodealliance/javy

okuokuokuoku

WinterJS

これはWASIX上で動作するWebAssembly。というわけでホストのDLLを読めない。無理。

okuokuokuoku

txiki.js

WebAssemblyはあまり真剣に実装されていない。この目的のためにはWASM3を内蔵している。

FFIモジュールは存在する https://bettercallsaghul.com/txiki.js/api/modules/tjs_ffi.html ため、専用のバインディングを用意すればncccモジュールを呼ぶことはできそうだ。中身はlibffi。

okuokuokuoku

LLRT

N-APIのサポートは無く、そもそもdlopenしていない。無理。

中身はかなり素直なQuickJSのRust拡張なので、実装すること自体は簡単だと思うが。。