2013-05-06 1 views
3

asm.js에는 매우 흥미로운 점이 있으며 매우 무거운 응용 프로그램을 실행할 수있는 방법이 있습니다. 그러나 C++ 코드로 컴파일됩니다. C++ 또는 다른 저수준 언어를 모른 채 현재 개선 사항의 혜택을 누릴 수 있습니까?asm.js 용으로 최적화 된 JS 작성하기

생각해 보았습니다. Js에서 코드를 작성하고 최적화를 위해 asm.js 용으로 다시 컴파일 할 수 있습니까?

+0

나는이 질문을 내가 할 수있는만큼 다듬었지만 아직도 묻고있는 것을 아는만큼 충분한 asm.js를 모른다. – djechlin

+0

컴퓨터 과학 프런트 엔드 개발자가 아닌 컨텍스트를 떠난다면 좋았을 것입니다. C++을 배우지 않고도 슈퍼 패스트 j를 작성할 수 있다면 얼마나 좋을까요? 이 편집은 모든 상황을 슬프게 제거했습니다. – Kayote

답변

5

그러나 C++ 코드로 컴파일됩니다.

아니요. 그것은 언어입니다. 모든 프로그램에서 asm.js 코드가 포함 된 텍스트 파일을 내보낼 수 있습니다. Emscripten은 LLVM IR을 asm.js로 컴파일하고 C 및 C++에서 LLVM IR까지의 컴파일러가 있지만 이것은 asm.js 코드를 가져 오는 한 가지 가능한 방법 일뿐입니다. 시피, 현재 가장 성숙하고 실용적이며 대중적인 방법이지만, 다른 언어 용 asm.js 컴파일러가 앞으로 얼마 동안 팝업되면 놀라지 않을 것입니다.

C++ 또는 다른 저수준 언어를 모른 채 현재 개선 사항의 이점을 얻을 수 있습니까?

음, 이론 효율적으로 asm.js를 사용하여 효율적으로 구현하고이 다소 높은 수준의 것들 (예를 들어, 하스켈)을 포함 할 수 있습니다 앞서-의 시간 기계 코드로 컴파일 할 수있는 모든 언어를한다. 하지만 현재, 아무도 작동하는 구현이 없으며, 나는 이것이 매우 인기가있을 것으로 기대하지 않습니다. 지금 asm.js 성능을 원하면 C 또는 C++ 코드를 작성하여 asm.js로 컴파일하십시오.

asm.js 코드가 수정되지 않은 브라우저에서 실행된다는 점에서 asm.js 코드는 자바 스크립트의 하위 집합이라는 점에서 편리하지만 asm.js는 누구에게나 쓸모가 없다는 점에서 (많은 다른 것들 중에서) Javascript는 제외됩니다. 자바 스크립트. asm.js는 기본적으로 보안 및 JS 상호 운용성을 위해 기계 코드 위에 얇은 레이어로 구성되어 있습니다. JS를 asm.js로 컴파일하는 것은 컴퓨터 코드로 컴파일하는 것만큼이나 어렵습니다. 성능에 신경 쓰지 않는다면 (인터프리터처럼 항상 박스형 동적 유형 값을 사용하고 런타임 라이브러리 함수에 대한 호출을 내 보냅니다) 힘들 때.

는 사실, 주제에 대한 연구의 수십 년 후, 여전히 기계 코드 시간와 영리한 통역보다 훨씬 빠른 실행의 미리 컴파일 된 자바 스크립트, 루비 나 파이썬 같은 매우 동적 언어의 어떤 예를 없다. 반면에 Just-In-Time 컴파일은 매우 실용적입니다. 그러나 주요 JS 엔진은 asm.js로 컴파일하는 것보다 덜 둥근 방법으로 이미이를 수행 한 다음 다시 파싱하고 코드를 컴파일하여 컴파일합니다.

+0

Delnan에게 감사 드려요. 아마도 누군가 js 코드를 asm.js 코드로 컴파일하는 js 프레임 워크를 작성할 것입니다. 이는 Less.js 및 다른 CSS 프레임 워크의 작동 방식과 같습니다. – Kayote

3

Asm.js은 별도의 언어는 아니지만 Javascript의 하위 집합입니다. 성능면에서 많은 부분을 제외하고는 자바 스크립트 일뿐입니다. 이것은 다른 언어를 배울 필요가 없음을 의미합니다.이 경우 C/C++을 이해하는 것이 유용 할 수 있습니다.

6

매우 계산량이 많은 작은 함수 (DOM 조작보다는 숫자를 계산하는 것)를 사용하면 직접 asm.js 스타일로 직접 다시 작성할 수 있습니다. 가능할 수도 있지만 (I've done it) 지루합니다.

다른 asm.js 컴파일러가 있습니다. LLJS 대신 C++를 사용할 수 있습니다.

그러나 asm.js는 마법이 아닙니다. JS보다 사전 최적화에 더 적합한 언어를 사용할 때만 성능 이점을 얻을 수 있습니다.ZIP 파일을 압축하여 만들 수 없듯이 JS VM을 기반으로 JS VM을 실행하여 완전한 기능을 갖춘 JS를 빠르게 만들 수는 없습니다.

+0

훌륭한 답변, LLjs 레퍼런스에 대한 감사. – Kayote

0

Asm.js는 JavaScript의 매우 엄격한 하위 집합이며 C/C++에서 JavaScript로 컴파일 할 때 상대적으로 쉽게 생성 할 수 있습니다. Asm.js 코드는 일반적인 JavaScript 코드보다 기계 코드에 훨씬 가깝기 때문에 브라우저는 asm.js로 작성된 모든 코드를 크게 최적화 할 수있었습니다. 이러한 최적화를 구현 한 브라우저에서 코드는 일반적으로 기계 코드로 컴파일 된 C/C++ 프로그램의 속도의 약 50 %를 실행합니다. 속도가 느린 것처럼 보일 수 있지만 일반 JavaScript보다 훨씬 빠릅니다 !

인간이 아닌 기계에 맞게 최적화 되었기 때문에 asm.js는 인간 개발사가 손으로 코드를 작성하는 것이 거의 불가능합니다 ... 의 경우에만 JavaScript입니다. 기술적 인 측면에서 볼 때, 적어도 일반적인 자바 스크립트의 일부를 asm.js와 같은 것으로 변환하는 것은 쉬운 일이 아니며, 이러한 변환은 쉬운 작업이 아니며이를 달성하기위한 시도가 아직 없었습니다.

누군가가 위와 같은 작업을 수행 할 때까지 asm.js 코드를 만드는 가장 좋은 방법은 C/C++로 코드를 작성한 다음 JavaScript로 변환하는 것입니다.

asm.js에 대한 자세한 내용은 예 : John Resig's article from 2013 또는 official specs

관련 문제