웹어셈블리

웹어셈블리(WebAssembly, 간단히 Wasm)는 실행 프로그램 및 그와 일치하는 텍스트 어셈블리어, 그리고 이러한 프로그램과 호스트 환경 간 통신을 용이케하는 인터페이스를 위한 이식 가능한 이진 코드 포맷을 정의하는 개방형 표준이다. 웹어셈블리의 주 목적은 웹 페이지에서 고성능의 애플리케이션을 가능케 하는 것이지만 포맷은 다른 환경에서도 실행 및 연동되도록 설계되어 있다. Wasm은 자바스크립트를 대체하지는 않는다. 브라우저에서 Wasm을 사용하려면 사용자는 Emscripten SDK를 사용하여 C++(또는 D 또는 러스트 등의 기타 LLVM 지원 언어) 소스 코드를 이진 파일로 컴파일한 다음 동일한 샌드박스에서 일반 자바스크립트 코드로 실행할 수 있다. Emscripten은 WebGL 등 흔히 사용되는 여러 환경 인터페이스들의 바인딩을 제공한다. 확장 가능한 메모리와 수많은 스케일러 값에만 접근이 가능하다. 문서 객체 모델(DOM) 직접 접근은 하지 않으나 이를 위한 프록시 함수를 만들 수 있다. (예를 들면 stdweb, web_sys,, js_sys을 통해) W3C는 모질라, 마이크로소프트, 구글, 애플의 기여와 함께 표준을 관리하고 있다. 2019년 6월 Technische Universität Braunschweig의 연구에 따르면 알렉사 최상위 100만 개의 웹사이트에서의 웹어셈블리 사용률 분석 결과 가장 현저하게 사용되고 있는 부분은 악성 가상 화폐 채굴이었음이 드러났다. 웹어셈블리는 2015년 처음 발표되었으며, 첫 시연은 유니티의 앵그리 봇(Angry Bots)을 모질라 파이어폭스 구글 크롬, 마이크로소프트 엣지에서 실행하는 것이었다. 선도자격 기술은 모질라, 구글 네이티브 클라이언트의 Asm.js이었으며 최초 구현체는 asm.js의 기능 집합에 기반을 두었다. 자바 바이트코드 공통 언어 런타임 LLVM 컴파일러 이식 (컴퓨팅) Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF; Holman, Michael (June 2017). “Bringing the web up to speed with WebAssembly”. 《Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation》 (Association for Computing Machinery): 185–200. doi:10.1145/3062341.3062363.  Watt, Conrad (2018). “Mechanising and Verifying the WebAssembly Specification” (PDF). 《ACM SIGPLAN International Conference on Certified Programs and Proofs》 (ACM) 7. doi:10.1145/3167082.  According to official documentation the Emscripten SDK may be used to create .wasm files which then may be executed in web browser. Emscripten이 클랭 사용 시 다양한 언어를 사용할 수 있으나 일부 문제가 발생할 수 있다. “Introduction — WebAssembly 1.0”. 《webassembly.github.io》. 2019년 6월 18일에 확인함. WebAssembly is an open standard...  “Introduction — WebAssembly 1.0”. 《webassembly.github.io》. 2019년 6월 18일에 확인함. WebAssembly is a ... code format  “Conventions — WebAssembly 1.0”. 《webassembly.github.io》. 2019년 5월 17일에 확인함. WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure.  “Introduction — WebAssembly 1.0”. 《webassembly.github.io》. 2019년 6월 18일에 확인함. ... this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. These will each define a WebAssembly application programming interface (API) suitable for a given environment.  “WebAssembly Specification Release 1.0 (Draft, last updated Apr 16, 2019): Introduction”. 《webassembly.org》. 2019년 5월 6일에 확인함. Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.  Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (2017년 6월 14일). “Bringing the Web Up to Speed with WebAssembly”. 《SIGPLAN Notices》 52 (6): 185–200. doi:10.1145/3140587.3062363. ISSN 0362-1340. While the Web is the primary motivation for WebAssembly, nothing in its design depends on the Web or a JavaScript environment. It is an open standard specifically designed for embedding in multiple contexts, and we expect that stand-alone implementations will become available in the future.  “Developer’s Guide - WebAssembly”. 《webassembly.org》. 2019년 6월 10일에 확인함.  “Compiling a New C/C++ Module to WebAssembly”. 《MDN Web Docs》 (영어). 2019년 6월 10일에 확인함.  “Building to WebAssembly — Emscripten 1.38.33 documentation”. 《emscripten.org》. 2019년 6월 10일에 확인함.  “Emscripting a C library to Wasm | Web”. 《Google Developers》 (영어). 2019년 6월 10일에 확인함.  “stdweb - Rust”. 《docs.rs》. 2019년 6월 5일에 확인함. The goal of this crate is to provide Rust bindings to the Web APIs and to allow a high degree of interoperability between Rust and JavaScript.  “web_sys - Rust”. 《docs.rs》. 2019년 6월 5일에 확인함. Raw API bindings for Web APIs. This is a procedurally generated crate from browser WebIDL which provides a binding to all APIs that browser provide on the web.  “js_sys - Rust”. 《docs.rs》. 2019년 6월 5일에 확인함. Bindings to JavaScript's standard, built-in objects, including their methods and properties.  Bright, Peter (2015년 6월 18일). “The Web is getting its bytecode: WebAssembly”. 《Ars Technica》. Condé Nast.  “Recent Study Estimates That 50% of Websites Using WebAssembly Apply It for Malicious Purposes”. 《InfoQ》. 2019년 11월 3일에 확인함.  “보관된 사본” (PDF). 2019년 10월 21일에 원본 문서 (PDF)에서 보존된 문서. 2019년 11월 9일에 확인함.  “보관된 사본” (PDF). 2019년 11월 3일에 원본 문서 (PDF)에서 보존된 문서. 2019년 11월 9일에 확인함.  “Launch bug”. 《GitHub / WebAssembly / design》. 2015년 6월 11일.  Wagner, Luke (2016년 3월 14일). “A WebAssembly Milestone: Experimental Support in Multiple Browsers”. 《Mozilla Hacks》.  Thompson, Seth (2016년 3월 15일). “Experimental support for WebAssembly in V8”. 《V8 Blog》.  Zhu, Limin (2016년 3월 15일). “Previewing WebAssembly experiments in Microsoft Edge”. 《Microsoft Edge dev blog》.  Lardinois, Frederic (2015년 6월 17일). “Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web”. 《TechCrunch》 (영어). 2017년 12월 24일에 확인함.  Avram, Abel (2017년 5월 31일). “Google Is to Remove Support for PNaCl”. 《InfoQ》. 2017년 12월 22일에 확인함.  “WebAssembly: a binary format for the web”. 《②ality – JavaScript and more》. 2015년 6월 18일.  위젯 데모: [1] Archived 2019년 10월 25일 - 웨이백 머신 with NWSTK 3D mountain geometry synthesis demo: [2] Archived 2019년 10월 26일 - 웨이백 머신 with NWSTK Demo for loading and drawing a jpg file: [3] Archived 2019년 11월 23일 - 웨이백 머신 with NWSTK 웹어셈블리 - 공식 웹사이트 W3C Community Group WebAssembly Design “WebAssembly”, 《MDN Web Docs》 (미국 영어)  – with info on browser compatibility and specifications (WebAssembly JavaScript API) WebAssembly: What and What Next? at 유튜브