asm.js 에 대한 이해가 잘못되었다고 생각합니다 .
먼저 FAQ에서
Q. asm.js는 새로운 언어입니까?
A. 아니요. 단지 JavaScript의 일부입니다.
그리고 당신은 설명을 추가 물었다 :
그러나 C ++로 하나의 [asm.js 애플리케이션]을 작성하는 것이 어떻게 가능합니까
"asm.js 애플리케이션"을 작성하지 않고 asm.js는 C ++ 코드를 컴파일하기 위한 대상 1 입니다.
John Resig 의이 기사 는 asm.js가 어떻게 사용되는지 더 잘 설명 할 수있는 많은 세부 사항을 제공합니다.
이 이미지로 시작 :
asm.js가 emscripten의 번역 대상임을 알 수 있습니다. Emscripten은 LLVM 바이트 코드를 JavaScript로 변환하는 작업을 처리 하며 asm.js는 JavaScript의 하위 집합입니다. asm.js의 제한된 JavaScript 하위 세트 내에 머무르면 코드를 최적화하고 더 빠르게 실행할 수 있습니다.
당신은 또한 물었다 :
그리고 C ++로 코드를 작성하면 js API를 사용하는 방법
다시 말하지만, 당신은 요점을 놓치고 있습니다. Asm.js를 사용하면 기존 C / C ++ 응용 프로그램을 JavaScript로 이식하여 브라우저 내에서 실행할 수 있습니다. 일반적으로 C / C ++ 코드 내에서 JS API를 사용할 수 없으며이를 허용하는 asm.js에 대한 마법은 없습니다.
JS API가 필요한 새 애플리케이션을 작성하는 경우 JS로 애플리케이션을 작성하고 C ++로 작성하고 JavaScript로 포팅하려고 시도하면 안됩니다.
그리고 Resig의 기사로 돌아가서 질문에 대한 두 가지 핵심 인용문이 있습니다.
가까운 장래에 Asm.js를 대상으로 할 응용 프로그램의 종류는 브라우저에서 실행하는 이식성의 이점은 있지만 JavaScript 로의 직접 포트를 실행할 수없는 수준의 복잡성을 갖는 응용 프로그램입니다.
과
위의 코드에서 볼 수 있듯이 Asm.js는 직접 작성하도록 설계되지 않았습니다. ... Asm.js의 가장 일반적인 사용 사례는 C / C ++에서 JavaScript로 호환되는 응용 프로그램입니다. 이러한 응용 프로그램은 WebGL 등을 사용하는 것 외에 의미있는 방식으로 DOM과 상호 작용하지 않습니다.
대신 고려해야 할 것은 필요한 JS API를 호출하는 JavaScript 프로그램과 함께 JavaScript로 컴파일 한 C ++를 호출하는 것입니다. 한 번 봐 가지고 이 emscripten 튜토리얼 자바 스크립트에서 C ++ 코드를 호출하는 방법을 볼 수 있습니다.
추가 연구를 위해 emscripten에는 C ++ 코드를 가져오고 LLVM을 통해 코드를 실행 한 다음 asm.js를 대상으로하는 방법을 이해하는 데 도움 이되는 자습서 가 있습니다.
1 엄밀히 말하면, 사실이 아닙니다. C / C ++ 코드는 컴파일 될 내용을 인식하지 못하므로 실제로 asm.js를 대상으로 호출 할 수 없습니다. 다른 도구 (emscripten)는 LLVM 출력을 가져와 asm.js 호환 JavaScript로 변환합니다. 하지만 이해하기 쉽기 때문에 대상이라고하겠습니다.