2017-06-08 3 views
2

ich verstehen wollen, was ein Rust Programm tatsächlich exportiert, wenn es um eine wasm Datei kompiliert wird, so kann ich eine gültige importObject zum instantiate Funktion bieten:Beziehen Sie JavaScript Import Objekteinträge aus einem Webassembly .wasm Modul

WebAssembly.instantiate(bufferSource, importObject); 

Soweit ich weiß, ist der einzige Weg, dies zu tun, durch den Export einer s-Syntax wie Datei des kompilierten Codes. Ich kann nicht finden, wie man das in ihren Dokumenten oder durch Websuchen macht.

Antwort

3

Sie können ein Werkzeug wie wabt 's wasm2wast verwenden, um eine .wasm Datei in das Äquivalent .wast zu übersetzen. Das würde tun, was du verlangst.

Sie müssen dies jedoch nicht unbedingt tun! Das JavaScript-API gibt Ihnen meist von dem, was Sie wollen:

let arrayBuffer = ...; // Somehow get your .wasm file into an ArrayBuffer. XHR, from a string, or what have you. 
let module = WebAssembly.Module(arrayBuffer); // This is the synchronous API! Only use it for testing/offline things. 

let importObject = {}; 
for (let imp of WebAssembly.Module.imports(module)) { 
    if (typeof importObject[imp.module] === "undefined") 
     importObject[imp.module] = {}; 
    switch (imp.kind) { 
    case "function": importObject[imp.module][imp.name] =() => {}; break; 
    case "table": importObject[imp.module][imp.name] = new WebAssembly.Table({ initial: ???, maximum: ???, element: "anyfunc" }); break; 
    case "memory": importObject[imp.module][imp.name] = new WebAssembly.Memory({ initial: ??? }); break; 
    case "global": importObject[imp.module][imp.name] = 0; break; 
    } 
} 

Beachten Sie, dass Tabelle und Speicheranfang/Maximum liegt noch Vermutungen! Ich schlage vor, dass wir add the missing information to the JS API. Ich denke, beim nächsten WebAssembly-Treffen könnte es ein guter Zeitpunkt sein, über eine solche Ergänzung zu sprechen.

+1

netter Ansatz. Ich dachte nicht, dass du das kannst. Vielen Dank! –

+0

Wie der Bug, den ich eingereicht habe, sagt, es ist ein bisschen Mangel noch immer! Wenn jemand in der JavaScript-API zusätzliche Dinge findet, die nicht in der JavaScript-API enthalten sind, dann reichen Sie bitte Programmfehler ein, die Usecase dokumentieren, und wenn Sie kreativ sind, schlagen Sie eine API vor, um zu beheben, was Sie versuchen zu tun. Wenn Leute anfangen, WebAssembly zu verwenden, wird erwartet, dass sie Dinge finden, die wir später übersehen oder mit denen wir konfrontiert werden. –

Verwandte Themen