태그 보관물: compiler

compiler

ASM.js 란 무엇이며 모든 사람에게 어떤 의미가 있습니까? 현재 그들의 웹 사이트는

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

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

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



답변

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

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 컴파일러가 자동으로 생성되는 경우에만 가능합니다.

답변

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

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


답변