2017-12-31 16 views
1

WebAssembly의 속도를 높이려고합니다. 대부분 WebAssembly developer's guide이고 최근은 JSConf talk입니다. 토큰 hello world 프로그램을 컴파일 할 수 있으며 생성 된 HTML 페이지를보고 결과를 볼 수 있습니다. 여태까지는 그런대로 잘됐다.WebAssembly : TypeError : WebAssembly 인스턴스화 : Imports 인수가 있어야합니다.

문제 : 18:22의 JSConf 토크는 wasm 파일을 가져올 수 있으며 응답에서 배열 버퍼를 가져온 다음 버퍼에서 인스턴스화하고 다시 약속을 받아야한다고 제안합니다. 하지만 최신 크롬 안정 버전이든, 크롬 카나리아 또는 최신 Firefox이든간에 나는 그 대신에 type error을 얻습니다.

MDN documentation에이 인수가 선택되어 있다고해도 오류 메시지에 "importObject"인수가 필요하다는 것 같습니다. 더 나쁜 것은 MDN 페이지가 importObject의 구조와 내용에 대해 거의 이야기하지 않는다는 것입니다. 나는 블로그와 github 문제에 대한 인터넷 검색에서 몇 가지 아이디어를 함께 긁어 낼 수있었습니다. "env"키와 WebAssembly 메모리 객체가 필요할 것 같습니다.

그래서 ... 가져 오기 개체가 선택 사항 인 것으로 문서화되어 있어도 왜 필요합니까? 가져 오기 개체에 대한 자세한 설명서는 어디에서 찾을 수 있습니까? JSConf 토크에서 왜 작동합니까? 아닙니다.

+0

왜 가져 오기 개체가 필요한지 힌트 :이 경우 console.log에서 printf가 stdout으로 어떻게 인쇄 할 수 있는지 생각해보십시오. wasm 런타임은 브라우저에서 이미 사용 가능한 것을 다시 구현하지 않습니다. emscripten으로 컴파일 할 때 필요한 가져 오기를 자동으로 추가합니다. 대부분 "emscripten 글루 코드"라고 불립니다. 이 문제를 이해하려면 WASM SIDE_MODULE을 더 잘 살펴보십시오. 독립형 : https://github.com/kripken/emscripten/wiki/WebAssembly-Standalone 수입 : http://webassembly.org/docs/modules/#imports – Karl2011

+0

https://stackoverflow.com/questions/45295339/ 어쨌든 - 빌드 - webassembly - 코드 -없이 - emscripten - 접착제 – Karl2011

답변

2

인스턴스화하는 모듈에서 아무 것도 가져 오지 않는 경우에만 가져 오기 개체를 생략 할 수 있습니다. 그렇지 않으면 필요한 모든 가져 오기가 포함 된 개체를 제공해야합니다. 예를 들어, 모듈은

(import "a" "f" (func ...)) 
(import "a" "g" (func ...)) 
(import "b" "m" (memory 0)) 

는 다음 물론

{ 
    a: {f: function (...) { ... }, g: function (...) {...}}, 
    b: {m: new WebAssembly.Memory(...)} 
} 

같은 가져 오기 객체를 제공하기 위해, 실제 수입 값도 더 흥미롭게 다른 Wasm에서 수출 미리 정의 된 개체, 또는 수를 필요 않는 경우 예.