ASM.js 란 무엇이며 모든 사람에게 어떤 의미가 있습니까?


27

이 프로젝트에 대한 ASM.js 라는 소리가 들리기 시작했습니다 . 현재 그들의 웹 사이트는 끔찍하고 혼란 스럽다. 웹에서 내가 연구 한 결과는 다음과 같습니다.

  • 고도로 최적화 될 수있는 JavaScript의 하위 집합입니다. 언어의 역동적 인 부분을 피하기 때문에 추측하고 있습니다.
  • ASM.js로 컴파일 된 코드의 성능은 C 속도의 약 절반 (빛이 아님)으로 실행됩니다.
  • 의도는 컴파일러가 대상 언어를 ASM.js로 만드는 것입니다.
  • 파이어 폭스는 ASM.js 최적화가 적용된 상태로 출시 될 예정이다.
  • 모질라와 언리얼 팀은 이식 웹에 언리얼 엔진을 그것 과의 빌드에서의 실행 파이어 폭스 네이티브에 가까운 속도로.

이 정말 무엇인지에 대한 웹에 어떤 구체적인 정보가있을하지 않는 것 입니다 또는 유용성 또는 궁극적 인 목적. 그렇지 않으면 서버 측 코드베이스를 컴파일하고 브라우저에서 기본 속도에 가깝게 실행할 수 있습니까? 개발자에게 어떤 영향이 있습니까?

답변:


21

당신은 이미 무엇을 설명 입니다 . 모든 브라우저에서 작동하는 저급 언어이므로 대부분 매우 빠르며 일부는 빠릅니다. 당신이 만드는 것은 다른 프로그래밍 언어로하는 것만 큼 개방적입니다.

Mozilla가 가장 열심 인 유스 케이스는 다음과 같습니다. Emscripten을 통해 LLVM 백엔드 (대부분 C 및 C ++)를 사용하여 JavaScript로 언어를 컴파일하는 방법이 이미 있습니다. asm.js는 Emscripten이 이미 방출 한 것에 매우 가깝기 때문에 Emscripten 코드 (오늘날 JavaScript JIT 컴파일러에서 인상적으로 빠름)가 훨씬 빨라져 기존 코드 기반을 웹으로 포팅하는 목표를 더욱 발전시킬 수 있습니다. 다시, 당신이 이것을 정확하게 사용하는 것은 당신의 결정입니다. 포팅 게임은 하나의 유스 케이스 (모질라가 적극적으로 참여하고 있음)이지만 C 및 C ++로 작성된 수많은 것들이 있으며, 그중 일부는 누군가의 웹 사이트에 유용 할 수 있습니다. 타당성에 대해 보장하지 않고 내가 본 것 중 일부는 내 자신의 고안 물과 함께 뛰어 들었다.

  • 범용 웹 알고리즘 (예 : zlib, libjpeg, openssl, FFT 구현)을 포팅하여 새로운 웹 표준을 만들지 않고 개별 브라우저에 따라 JavaScript / 웹 사이트에서 더 많은 작업을 수행 할 수 있도록합니다.
  • 인터프리터를 포팅하여 JavaScript 이외의 언어가 오버 헤드를 줄이고 포팅 작업을 최소화하면서 브라우저에서 실행할 수 있습니다.
  • 더 많은 컴파일러, 특히 JavaScript에 잘 매핑되지 않고 대부분의 기능과 오버 헤드가 필요하지 않은 컴파일러의 백엔드로 asm.js를 사용합니다. 메모리 할당없이 빠른 숫자 작업을 위해 설계된 언어를 예로들 수 있습니다.
  • JavaScript 에서 asm.js를 사용하여 JIT 작성 ActionScript 와 같은 모든 언어를 구현할 수 있습니다 .
  • 같은 맥락에서 기존 JIT 컴파일러를 브라우저에서 실행하도록 포팅 (JS보다 효과적으로 오버 헤드가없는 포팅 인터프리터 참조). 이것은 PyPy와 같이 JIT 컴파일러가 자동으로 생성되는 경우에만 가능합니다.

2
여기에 또 다른 좋은 설명이 있습니다 : ejohn.org/blog/asmjs-javascript-compile-target
Jarrod Nettles

1
다음 은 JIT를 asm.js로 포팅하기위한 개념 증명입니다. 독창적 인 판매 포인트이며 가장 최신 플랫폼은 JIT 친화적이지 않습니다.
Tobu

asm.js가 JIT 컴파일을 지원하는 방법에 대한 설명이 있습니까? 그것에 대한 정보를 찾을 수 없습니다. 보안 영향을 처리하는 방법에 가장 관심이 있습니다.
Roman Starkov

@romkyns 브라우저에서 기계 코드 asm.js의 JIT 컴파일 또는 JavaScript 프로그램 으로 asm.js로 JIT 컴파일 ? 전자의 경우 최소한 Firefox에서는 pure-JS JIT 컴파일러의 기계 코드 생성 기능이 재사용됩니다. asm.js는 JS 만 호출하고, 산술을 수행하고, 범위 내 인덱스 검사를 사용하여 힙 배열을 읽고 쓸 수 있으므로 JS 실행의 보안 수준만큼이나 보안이 좋습니다. 후자의 경우, 당신은 asm.js 소스 코드를 생성하고 브라우저가 그것을 실행하게하고, 앞에서 언급 한 것 외에 추가적인 보안 영향은 없습니다.

물론 나는 후자를 의미했다. 어떻게 든 JIT 컴파일러가 네이티브 머신 코드를 방출한다고 상상했습니다. 설명 주셔서 감사합니다!
Roman Starkov

4

ASM.js를 프롤로그 지시문으로 시작하는 힙 및 일련의 JavaScript 모듈이라고하는 큰 이진 ArrayBuffer로 상상해보십시오 "use asm";. 어셈블리 언어와 유사한 원시 이진 데이터에 대해 빠른 저수준 작업을 수행합니다. 이러한 모듈은 직접 작성하거나 Emscripten과 같은 스크립트를 사용하여 LLVM 코드에서 더 잘 컴파일 할 수 있습니다. Mozilla OdinMonkey 엔진 덕분에 성능이 향상 될 수 있지만 대부분의 최신 ECMAScript 인터프리터와 호환됩니다.

ASM.js 게임에 한정되지 않고, 심지어 Qt는이 같은 브라우저에서 애플 리케이션 전체 실행 !

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.