웹 어셈블리

WebAssembly
웹 어셈블리
WebAssembly Logo.svg
패러다임구조화된 스택 머신[1]
설계자W3C
개발자
처음 등장한2017년 3월, 5년 전(2017-03)
OS플랫폼에 의존하지 않음
면허증.Apache 라이센스 2.0
파일 이름 확장자
  • .wat(텍스트 형식)
  • .wasm(표준 형식)
웹 사이트webassembly.org
영향을 받다

Web Assembly(Wasm)는 실행 프로그램의 휴대용[2] 바이너리 코드 형식과 대응하는 텍스트 형식을 정의합니다., 이러한 프로그램과 호스트 [3][4][5][6]환경간의 상호작용을 용이하게 하기 위한 소프트웨어 인터페이스도 정의합니다.

Web Assembly의 주된 목표는 웹 페이지에서 고성능 애플리케이션을 활성화하는 것입니다.그러나 웹 고유의 전제나 기능을 제공하는 것은 아니기 때문에 [7]다른 환경에서도 사용할 수 있습니다.이것은 오픈[8][9] 스탠다드로, 모든 operating [10]system의 모든 언어를 지원하는 것을 목표로 하고 있습니다.실제로 가장 인기 있는 모든 언어는 적어도 어느 정도의 지원을 이미 받고 있습니다.

2015년(2015년)에 발표되어 2017년 3월(2017-03년)에 처음 출시된 Web Assembly는 2019년[11][12][13] 12월 5일에 World Wide Web Consortium 추천이 되었으며 2021년에는 [14]ACM SIGPLAN으로부터 Programming Languages Software Award를 받았습니다.W3C(World Wide Web Consortium)는 Mozilla, Microsoft, Google, Apple, Fastly, IntelRed [15][16]Hat의 기여로 표준을 유지합니다.

역사

Web Assembly는 [17]2015년에 처음 발표되었으며,[18] 첫 번째 시연은 파이어폭스, 구글 [19]크롬, 마이크로소프트 [20]엣지에서 유니티앵그리 봇을 실행한 것입니다.초기 테크놀로지는 Mozilla와 Google Native [21][22]Client의 asm.js이며, 초기 구현은 asm.[23]js의 기능 세트를 기반으로 합니다.asm.js 테크놀로지는 이미 네이티브에 가까운[24][25] 코드 실행 속도를 제공하고 있으며, Web Assembly를 지원하지 않거나 보안상의 이유로 비활성화되어 있는 브라우저의 경우 실행 가능한 대안으로 간주할 수 있습니다.

2017년 3월, 최소생존가능제품(MVP)의 설계가 완료되고 프리뷰 단계가 [26]종료되었습니다.2017년 9월 하순에는 Safari 11이 지원으로 출시되었습니다.2018년 2월, WebAssembly Working Group은 핵심 사양, JavaScript Interface, Web [27][28][29][30]API에 대한 3가지 공개 작업 초안을 발표했습니다.

2019년 6월,[31] Chrome 75는 기본적으로 활성화된 WebAssembly 스레드로 출시되었습니다.

실장

Web Assembly는 처음에는 웹 브라우저에서 거의 네이티브한 코드 실행 속도를 사용하도록 설계되었지만, 보다 일반적인 맥락에서 [32][33]웹 어셈블리는 이러한 코드 실행 속도를 활성화하는 데 유용하다고 여겨져 왔습니다.WebAssembly의 런타임 환경(RE)은 호스트 애플리케이션에 내장할 수 있는 낮은 수준의 가상 스택 머신(JVM 또는 Flash VM)이기 때문에 Wasmtime 및 [9][10]Wasmer와 같은 독립형 런타임 환경에 대한 방법을 찾은 사람도 있습니다.

웹 브라우저

Web Assembly가 Edge [35]16에서 기본적으로 활성화된 후 2017년 11월에 Mozilla는 "모든 주요 브라우저에서"[34] 지원을 선언했습니다.iOS 및 Android용 모바일 웹 브라우저가 지원됩니다.2022년 8월 현재 설치된 브라우저의 96%가 Web [36]Assembly를 지원하고 있습니다.그러나 오래된 브라우저에서는 JavaScript polyfill[37]의해 Wasm을 asm.js로 컴파일할 수 있습니다.

컴파일러

Web Assembly 구현에서는 보통 AOT(Aread-of-Time) 또는 JIT(Just-In-Time) 컴파일을 사용하지만 인터프리터를 사용할 수도 있습니다.첫 번째 구현은 웹 브라우저에 도입되었지만 Wasmer,[10] Wasmtime[38] 또는 WAMR,[16] wasm3, WAVM 및 기타 [39]많은 범용용 비브라우저 구현도 있습니다.

Web Assembly 실행 파일은 미리 컴파일되므로 다양한 프로그래밍 언어를 사용하여 만들 [40]수 있습니다.이는 Wasm에 직접 컴파일하거나 Wasm에 대응하는 가상 머신을 구현함으로써 실현됩니다.Wasm을 컴파일 대상으로 지원하는 프로그래밍 언어는 약 40개입니다.[41]

Emscripten은 Binaryen과 LLVM[42]백엔드로 사용하여 C와 C++를 Wasm으로[26] 컴파일합니다.Emscripten SDK는 LLVM에서 지원되는 모든 언어(C, C++, Rust 등)의 소스 코드를 JavaScript [note 1]코드와 동일한 샌드박스에서 실행되는 바이너리 파일로 컴파일할 수 있습니다.Emscripten은 WebGL과 같이 일반적으로 사용되는 여러 환경 인터페이스에 대한 바인딩을 제공합니다.

버전 8에서 스탠드아론 Clang은 C와 C++를 Wasm으로 [47]컴파일할 수 있습니다.

초기 목적은 C 및 C++[48]로부터의 컴파일을 지원하는 것이지만, Rust 등의 다른 소스 언어도 지원합니다.NET[49][50][41] 언어 및 Assembly[51] Script(Type Script 유사)도 등장하고 있습니다.MVP로 선정 석방 후, 이는 C#(Blazor을 통해 지원되는), F#(Bolero[54]을 통해 Blazor의 도움으로 지원되는), 파이썬, 그리고 심지어 자바 스크립트는 브라우저의 JIT컴파일 spee처럼garbage-collected 프로그래밍 언어에 WebAssembly 편집한 목표물이 될 예정 multithreading과 쓰레기 collection[52][53]을 지원하는 것이다.은 d야consid너무 느리다.Python,[55] Java,[56] [57][58][59]Julia, [60]Ruby포함한 많은 다른 언어들이 지원됩니다.

제한 사항

  1. 일반적으로 Web Assembly는 DOM과의 직접적인 상호작용을 허용하지 않습니다.모든 상호작용은 JavaScript interop을 통해 진행되어야 합니다.
  2. 가비지 컬렉션이 없습니다(다만, 이 문제에 대처할 수 없습니다.
  3. 보안 고려 사항(아래에서 설명)

Web Assembly는 데스크톱 및 모바일에서 지원되지만 실제로는 (Unity 게임 엔진과 같은) 소규모가 아닌 메모리 할당에 대해서는 "많은 애플리케이션을 모바일 브라우저에 안정적으로 배치할 수 없게 만드는 심각한 제한[..]" 현재 300MB 이상의 메모리를 Android w의 Chrome에서 할당하는 것은 신뢰할 수 없습니다.iOS의 [61]Safari에서도 Chrome 고유의 회피책을 사용할 수 있습니다."

Document Object Model(DOM; 문서 객체 모델)에 대한 직접 액세스는 없지만 예를 들어 Rust 언어를 사용하는 경우[62] stdweb 또는[63] web_sys를 통해 프록시 함수를 만들 수 있습니다.

Content-Security-Policy가 지정되지 않은 경우 또는 "unsafe-eval"이 사용되는 경우 모든 주요 웹 브라우저에서 WebAssembly가 허용되지만 그렇지 않은 경우 주요 웹 브라우저의 [64]동작은 다릅니다.실제로 Web Assembly는 작업자 스레드 해결 방법이 있는 [66]동안 "안전하지 않은 평가"[65][66] 없이 Chrome에서 사용할 수 없습니다.

보안에 관한 고려 사항

2018년 6월, 한 보안 연구자는 공유 메모리를 가진 스레드에 대한 지원이 추가되면 Web Assembly를 사용하여 Spectre Meltdown 보안 취약성에 대한 브라우저의 완화를 회피할 수 있는 가능성을 제시했습니다.이 문제로 인해 Web Assembly 개발자들은 이 기능을 [67][68][69]보류했습니다.그러나 이러한 미래 언어 확장을 탐색하기 위해 Google Chrome은 2018년 [70]10월에 WebAssembly 스레드 제안에 대한 실험 지원을 추가했습니다.

Web Assembly는 멀웨어 작성자, 사기꾼 피싱 공격자의 증거를 쉽게 숨길 수 있다는 비판을 받아 왔습니다.Web Assembly는 컴파일된 형태로만 사용자의 머신에 존재하기 때문에 "멀웨어 탐지가 어렵습니다".[71]Web Assembly의 속도와 은폐성으로 인해 웹 사이트 방문자 [71][72][67]디바이스의 숨겨진 암호 마이닝에서 Web Assembly를 사용하게 되었습니다.Coinhive, 현재는 존재하지 않는 서비스 웹 사이트 방문자의 브라우저에서 cryptocurrency 광산, 그들의``광부와 원어민 마이너의 성능의 약 65%와 함께 달린다 WebAssembly를 사용하여 주장한다."Technische Universität 브라운 슈바이크에서 6월의 2019년 연구[67]은 알렉사 top 1만 웹 사이트에 prev을 발견했다 WebAssembly의 사용 분석했다.악성 암호 마이닝을 위한 용도로, 멀웨어가 [73][74]조사 대상 Web Assembly 사용 웹 사이트의 절반 이상을 차지했습니다.2021년 4월 Universityitét Stuttgart의 조사에 따르면 그 이후 암호화 마이닝은 미미한 수준이며 Alexa 상위 100만 [75]웹사이트를 포함한 다양한 소스로부터 수집된 모든 Web Assembly 모듈의 1% 미만으로 떨어졌습니다.

대량의 코드를 효과적으로 난독화하는 기능은 또한 프라이버시 오소리 같은 웹 추적을 방지하는 광고 차단 및 프라이버시 도구를 비활성화하는 데 사용될 수 있습니다.

Web Assembly는 구조화된 제어 흐름만 지원하므로 심볼릭 [76]실행을 포함한 보안 검증 기술에 대응할 수 있습니다.이 방향의 현재 작업에는 Manticore 심볼릭 실행 [77]엔진이 포함됩니다.

와시

WebAssembly System Interface(WASI)는 Mozilla가 설계한 심플한 인터페이스(ABIAPI)로,[78] 모든 플랫폼에서 휴대할 수 있도록 되어 있습니다.기능 기반 [79][80]보안에 의해 제약되는 파일 I/O와 같은 POSIX와 같은 기능을 제공합니다.또한 제안된 ABI/[81][82]API도 몇 가지 있습니다.

클라우드의 영향을 받는 WASIABICapsicum.

도커의 공동 설립자인 Solomon Hykes는 2019년에 "2008년에 WASM+WASI가 존재했다면 도커를 만들 필요가 없었을 것이다.그만큼 중요합니다.서버상의 Web Assembly는 [83]컴퓨팅의 미래입니다.버전 1.0에서는 Wasmer가 "소프트웨어 컨테이너화"를 제공하며 Linux, macOS, Windows, 웹 브라우저 등의 운영 체제를 포함하여 어디에서나 수정 없이 작동하는 범용 바이너리를 만듭니다.Wasm은 기본적으로 [83]안전한 실행을 위해 응용 프로그램을 자동으로 샌드박스화합니다."

사양

호스트 환경

일반 규격은 JavaScript API의 핵심 사양과 [5]임베딩에 대한 세부 사항을 제공합니다.

가상 머신

Wasm 코드(바이너리 코드, 바이트 코드)는 휴대용 가상 스택 머신(VM)[84]에서 실행되는 것을 목적으로 합니다.VM은 JavaScript보다 해석 및 실행 속도가 빠르고 코드 표현이 콤팩트하도록 [48]설계되었습니다.Wasm 바이너리 코드에서 기대할 수 있는 외부 기능(시스템 콜 등)은 표준에서 규정되어 있지 않습니다.오히려 VM [85][9]구현이 실행되는 호스트 환경에 따라 모듈을 통해 인터페이스를 제공하는 방법을 제공합니다.

바셈 프로그램

Wasm 프로그램은 다양한 Wasm 정의 값 및 프로그램 유형 정의 컬렉션을 포함하는 개별 모듈로 설계되었습니다.이것들은 모두 공통의 구조를 가지는 바이너리 형식 또는 텍스트 형식([86]아래 참조)으로 표현됩니다.

명령 집합

Wasm 프로그램의 바이너리 포맷의 핵심 표준은 VM에 의해 실행되는 작업 유형의 특정 바이너리 인코딩으로 구성된 명령 집합 아키텍처(ISA)를 정의합니다(실행 [87]방법을 정확히 지정하지 않음).명령 목록에는 표준 메모리 로드/저장 명령, 숫자, 파라미터, 흐름 명령 유형 제어 및 Wasm별 변수 [88]명령이 포함됩니다.

원래 표준(MVP)에서 사용된 opcode의 수는 256개의 opcode 중 200개보다 조금 적었습니다.Web Assembly의 후속 버전에서는 opcode 수가 200개를 조금 넘었습니다.Web Assembly SIMD 프로포절(병렬처리용)에서는 128비트 SIMD의 대체 opcode prefix(0xfd)가 도입되어 있습니다.SIMD 프리픽스와 SIMD 프리픽스 뒤에 유효한 opcode의 결합에 의해 SIMD opcode가 형성됩니다.SIMD opcode는 "Minimum Product"(MVP) SIMD 기능을 위한 추가 236개의 명령을 가져옵니다(총 약 436개의 명령).[89][90]그 지침,"opcode확정"[91]구글의 V8(구글 크롬에서)및 모질라 파이어 폭스( 하지만 웹 브라우저의 안정적인 버전에 사용하지 않는)[92]에 대응하는 엔진에 안에 있으며 역시 지시 사항을 나중에"포스트 단일 명령 다중 데이터 MVP"를 위한 추가적인 제안했고, 또한 별도의"relaxed-simd"제안이죠 시행되는 것이다.에서테이블로 이동합니다.[93]

이러한 SIMD opcode는 또한 휴대 가능하며 x64 및 ARM과 같은 네이티브 명령 세트로 변환됩니다.이와는 대조적으로 JavaJVM(CIL)은 운영 코드 수준, 즉 표준에서 SIMD를 지원하지 않습니다. 둘 다 SIMD 속도 향상을 제공하는 병렬 API를 가지고 있습니다.Java가 x64 SIMD를 [94]위한 기능을 추가하는 확장기능이 있습니다.이것은 휴대할 수 없습니다.즉, ARM이나 스마트폰에서는 사용할 수 없습니다.스마트폰은 SIMD로 어셈블리 코드를 호출해 SIMD를 지원할 수 있으며, C#도 이와 비슷한 지원을 하고 있다.

코드 표현

2017년 3월, WebAssembly Community Group은 초기(MVP) 바이너리 형식, JavaScript API 및 참조 [95]인터프리터에 대한 합의에 도달했습니다.Web Assembly 바이너리 형식을 정의합니다(.wasm) ), 、 사람이 읽을 수 있는 Web Assembly 텍스트 형식( ) 。.watS 표현식과 전통적인 어셈블리 언어 사이의 교배와 유사합니다.

다음 표는 웹 브라우저 또는 런타임 환경미에서 실행되는 .wat 텍스트 형식(Web Assembly의 사람이 읽을 수 있는 텍스트 표현)과 .wasm 바이너리 형식(아래 16진수로 표현된 원시 바이트 코드)으로 표시된 C로 작성요인 함수와 컴파일 후 대응하는 Web Assembly 코드의 예를 보여줍니다.nt는 Web Assembly를 지원합니다.

C 소스 코드 및 대응하는 Web Assembly
C 소스 코드 Web Assembly .wat 텍스트 형식 Web Assembly .wasm 바이너리 형식
인트 요인(인트 n) {   한다면 (n == 0)     돌아가다 1;   또 다른     돌아가다 n * 요인(n-1); } 
(기능하다 (PARAM. i64) (결과 i64)   로컬.get 0   i64.eqz   한다면 (결과 i64)       i64.const 1   또 다른       로컬.get 0       로컬.get 0       i64.const 1       i64.sub       불러 0       i64.mul   끝.) 
00 61 73 6D 01 00 00 01 60 01 73 73 06 03 00 01 02 0A 00 01 00 20 00 50 04 42 01 7D 10 7E 0B 15 17

모든 정수 상수는 공간 효율적인 가변 길이 LEB128 [96]인코딩을 사용하여 인코딩됩니다.

WebAssembly 텍스트 형식은 S-식을 사용하여 접힌 형식으로 보다 정확하게 작성됩니다.지시 및 표현식의 경우, 이 형식은 구문설탕이며 선형 [97]형식과 동작 차이가 없습니다.통해.wasm2wat위의 코드는 다음과 같이 디컴파일됩니다.

(모듈   (유형 t0달러 (기능하다 (PARAM. i64) (결과 i64)))   (기능하다 f0달러 (유형 t0달러) (PARAM. p0달러 i64) (결과 i64)     (한다면 I0달러 (결과 i64) ;; $I0은 미사용 라벨명입니다.       (i64.eqz         (로컬.get p0달러)) ;; 여기서 이름 $p0은 0과 동일합니다.       (그리고나서         (i64.const 1))       (또 다른         (i64.mul           (로컬.get p0달러)           (불러 f0달러      ;; 여기서 이름 $f0은 0과 동일합니다.             (i64.sub               (로컬.get p0달러)               (i64.const 1)))))))) 

모듈은 컴파일러에 의해 암묵적으로 생성됩니다.함수는 바이너리 내의 타입 테이블의 엔트리에 의해 실제로 참조됩니다.따라서 타입 섹션과type디컴파일러에 [98]의해 방출됩니다.컴파일러와 디컴파일러는 온라인으로 [99]액세스 할 수 있습니다.

메모들

  1. ^ 공식 문서에 따르면 Emscripten SDK를 사용하여 다음을 생성할 수 있습니다..wasm이 파일은 웹 [43][44][45]브라우저에서 실행될 수 있습니다.Emscripten은 Clang을 사용할 때 다양한 언어를 사용할 수 있지만 문제가 발생할 [46]수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "WebAssembly/design/Semantics.md". GitHub. Retrieved 23 February 2021. WebAssembly code can be considered a structured stack machine; a machine where most computations use a stack of values, but control flow is expressed in structured constructs such as blocks, ifs, and loops. In practice, implementations need not maintain an actual value stack, nor actual data structures for control; they need only behave as if they did so.
  2. ^ Mozilla. "Understanding WebAssembly text format". MDN Web Docs. Retrieved 9 December 2019.
  3. ^ "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. WebAssembly is an open standard...
  4. ^ "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. WebAssembly is a ... code format
  5. ^ a b "Conventions — WebAssembly 1.0". webassembly.github.io. Retrieved 17 May 2019. WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure.
  6. ^ "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. ... 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.
  7. ^ "Introduction — WebAssembly 1.1". webassembly.github.io. Retrieved 19 February 2021. 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.
  8. ^ Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 June 2017). "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.
  9. ^ a b c "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. Retrieved 28 July 2020.
  10. ^ a b c "Wasmer - The Universal WebAssembly Runtime". wasmer.io. Retrieved 19 February 2021. Compile everything to WebAssembly. Run it on any OS or embed it into other languages.
  11. ^ World Wide Web Consortium. "WebAssembly Core Specification". World Wide Web Consortium (W3). Retrieved 9 December 2019.
  12. ^ Couriol, Bruno. "WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers". infoq.com. Retrieved 9 December 2019.
  13. ^ "WebAssembly Specification — WebAssembly 1.1". webassembly.github.io. Retrieved 22 March 2021.
  14. ^ "Programming Languages Software Award". www.sigplan.org.
  15. ^ Bright, Peter (18 June 2015). "The Web is getting its bytecode: WebAssembly". Ars Technica. Condé Nast.
  16. ^ a b "New Bytecode Alliance Brings the Security, Ubiquity, and Interoperability of the Web to the World of Pervasive Computing". Mozilla. 12 November 2019. Retrieved 27 May 2019.
  17. ^ "Launch bug". GitHub / WebAssembly / design. 11 June 2015.
  18. ^ Wagner, Luke (14 March 2016). "A WebAssembly Milestone: Experimental Support in Multiple Browsers". Mozilla Hacks.
  19. ^ Thompson, Seth (15 March 2016). "Experimental support for WebAssembly in V8". V8 Blog.
  20. ^ Zhu, Limin (15 March 2016). "Previewing WebAssembly experiments in Microsoft Edge". Microsoft Edge dev blog.
  21. ^ Lardinois, Frederic (17 June 2015). "Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web". TechCrunch. Retrieved 24 December 2017.
  22. ^ Avram, Abel (31 May 2017). "Google Is to Remove Support for PNaCl". InfoQ. Retrieved 22 December 2017.
  23. ^ "WebAssembly: a binary format for the web". ②ality – JavaScript and more. 18 June 2015.
  24. ^ "Staring at the Sun: Dalvik vs. ASM.js vs. Native". blog.mozilla.org. Retrieved 7 December 2019. Even discarding the one score where asm.js did better, it executes at around 70% of the speed of native C++ code.
  25. ^ Arjun, Jangda, Abhinav Powers, Bobby Berger, Emery Guha (25 January 2019). Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code. OCLC 1106328738.
  26. ^ a b Krill, Paul (6 March 2017). "WebAssembly is now ready for browsers to use". InfoWorld. Retrieved 23 December 2017.
  27. ^ "WebAssembly First Public Working Drafts". W3C. 15 February 2018. Retrieved 20 April 2018.
  28. ^ "WebAssembly Core Specification". W3C. 15 February 2018. Retrieved 20 April 2018.
  29. ^ "WebAssembly JavaScript Interface". W3C. 15 February 2018. Retrieved 20 April 2018.
  30. ^ "WebAssembly Web API". W3C. 15 February 2018. Retrieved 20 April 2018.
  31. ^ "WebAssembly Worker Based Threads - Chrome Platform Status". chromestatus.com. Retrieved 19 February 2022.
  32. ^ "Non-Web Embeddings". WebAssembly. Retrieved 15 May 2019.
  33. ^ "Non-Web Embeddings". GitHub / WebAssembly. Retrieved 15 May 2019.
  34. ^ "WebAssembly support now shipping in all major browsers". The Mozilla Blog. Retrieved 21 November 2017.
  35. ^ "Introducing new JavaScript optimizations, WebAssembly, SharedArrayBuffer, and Atomics in EdgeHTML 16". Microsoft Edge Dev Blog. 31 October 2017. Retrieved 21 November 2017.
  36. ^ "WebAssembly". Can I use. Retrieved 2 August 2022.
  37. ^ Bright, Peter (18 June 2015). "The Web is getting its bytecode: WebAssembly". Ars Technica. Retrieved 23 December 2017.
  38. ^ "Wasmtime — a small and efficient runtime for WebAssembly & WASI". wasmtime.dev. Retrieved 18 December 2020.
  39. ^ "Roadmap". Retrieved 7 December 2021.
  40. ^ Ball, Kevin (26 June 2018). "How WebAssembly is Accelerating the Future of Web Development". Archived from the original on 12 February 2019. Retrieved 22 October 2018.
  41. ^ a b "Awesome WebAssembly Languages". GitHub. 26 June 2018. Retrieved 15 February 2022.
  42. ^ Zakai, Alon [@kripken] (21 October 2019). "Emscripten has switched to the upstream LLVM wasm backend by default! / Details:https://groups.google.com/forum/#!topic/emscripten-discuss/NpxVAOirSl4 …" (Tweet). Retrieved 22 October 2019 – via Twitter.
  43. ^ "Developer's Guide - WebAssembly". webassembly.org. Retrieved 10 June 2019.
  44. ^ "Compiling a New C/C++ Module to WebAssembly". MDN Web Docs. Retrieved 10 June 2019.
  45. ^ "Building to WebAssembly — Emscripten 1.38.33 documentation". emscripten.org. Retrieved 10 June 2019.
  46. ^ "Emscripting a C library to Wasm Web". Google Developers. Retrieved 10 June 2019.
  47. ^ "LLVM 8.0.0 Release Notes — LLVM 8 documentation". releases.llvm.org. Retrieved 22 October 2019.
  48. ^ a b "WebAssembly High-Level Goals". GitHub / WebAssembly / design. 11 December 2015.
  49. ^ Krill, Paul (29 November 2017). "Direct WebAssembly compilation comes to Rust language". InfoWorld. Retrieved 24 December 2017.
  50. ^ "Frequently asked questions (FAQ) about Blazor". blazor.net. Retrieved 18 June 2018.
  51. ^ AssemblyScript/assemblyscript, The AssemblyScript Project, 9 September 2020, retrieved 9 September 2020
  52. ^ Krill, Paul (26 October 2017). "What's next for WebAssembly: GC, threads, debugging". TechWorld. Retrieved 24 December 2017.
  53. ^ "🛤 Garbage collection · Issue #16 · WebAssembly/proposals". GitHub. Retrieved 25 July 2019.
  54. ^ "Bolero: F# in WebAssembly". fsbolero.io. Retrieved 25 July 2019.
  55. ^ "Pyodide: Bringing the scientific Python stack to the browser – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog. Retrieved 9 September 2020.
  56. ^ "Mozilla tries to do Java as it should have been – with a WASI spec for all devices, computers, operating systems". www.theregister.com. Retrieved 6 October 2020.
  57. ^ "Julia in the Browser". nextjournal.com. Retrieved 9 April 2019.
  58. ^ "WebAssembly platform by tshort · Pull Request #2 · JuliaPackaging/Yggdrasil". GitHub. Retrieved 9 April 2019.
  59. ^ Fischer, Keno (22 July 2019), GitHub - Keno/julia-wasm: Running julia on wasm., retrieved 25 July 2019
  60. ^ "MRuby in Your Browser". ruby.dj. Retrieved 25 July 2019.
  61. ^ "Wasm needs a better memory management story · Issue #1397 · WebAssembly/design". GitHub. Retrieved 15 February 2021.
  62. ^ "stdweb - Rust". docs.rs. Retrieved 5 June 2019. 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.
  63. ^ "web_sys - Rust". docs.rs. Retrieved 5 June 2019. 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.
  64. ^ "WebAssembly/content-security-policy". GitHub. Retrieved 17 February 2021.
  65. ^ "948834 - chromium - An open-source project to help move the web forward. - Monorail". bugs.chromium.org. Retrieved 17 February 2021.
  66. ^ a b "No way to use WebAssembly on Chrome without 'unsafe-eval' · Issue #7 · WebAssembly/content-security-policy". GitHub. Retrieved 17 February 2021.
  67. ^ a b c Neumann, Robert; Toro, Abel (19 April 2018). "In-browser mining: Coinhive and WebAssembly". Forcepoint. Retrieved 8 June 2019.
  68. ^ Cimpanu, Catalin (24 June 2018). "Changes in WebAssembly Could Render Meltdown and Spectre Browser Patches Useless". Bleeping Computer. Retrieved 8 June 2019.
  69. ^ Sanders, James (25 June 2018). "How opaque WebAssembly code could increase the risk of Spectre attacks online". Tech Republic. Retrieved 9 June 2019.
  70. ^ R, Bhagyashree (30 October 2018). "Google Chrome 70 now supports WebAssembly threads to build multi-threaded web applications". Packt Pub. Retrieved 9 June 2019.
  71. ^ a b Lonkar, Aishwarya; Chandrayan, Siddhesh (October 2018). "The dark side of WebAssembly". Virus Bulletin. Retrieved 8 June 2019.
  72. ^ Segura, Jérôme (29 November 2017). "Persistent drive-by cryptomining coming to a browser near you". Malwarebytes. Retrieved 8 June 2019.
  73. ^ "Recent Study Estimates That 50% of Websites Using WebAssembly Apply It for Malicious Purposes". InfoQ. Retrieved 3 November 2019.
  74. ^ Musch, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (June 2019). "New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild". Detection of Intrusions and Malware, and Vulnerability Assessment (PDF). Lecture Notes in Computer Science. Vol. 11543. Detection of Intrusions and Malware, and Vulnerability Assessment. pp. 23–42. doi:10.1007/978-3-030-22038-9_2. ISBN 978-3-030-22037-2. S2CID 184482682. Retrieved 15 February 2022. 슬라이드 (PDF)
  75. ^ 아론 힐빅, 다니엘 레만, 마이클 프라델(2021년 4월)."실제 Web Assembly 바이너리에 대한 경험적 연구:보안, 언어, 사용 사례" (2021년 4월 아카이브) https://software-lab.org/publications/www2021.pdf
  76. ^ Watt, Conrad (8 January 2018). "Mechanising and verifying the WebAssembly specification". Proceedings of the 7th ACM SIGPLAN International Conference on Certified Programs and Proofs. CPP 2018. Los Angeles CA USA: ACM: 53–65. doi:10.1145/3167082. ISBN 978-1-4503-5586-5. S2CID 9401691.
  77. ^ "Symbolically Executing WebAssembly in Manticore". 31 January 2020. Retrieved 10 February 2020.
  78. ^ "WebAssembly System Interface Repo". GitHub / WebAssembly. 10 February 2020.
  79. ^ "Additional background on Capabilities". GitHub. bytecodealliance. 4 March 2022.
  80. ^ "Standardizing WASI: A system interface to run WebAssembly outside the web – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog.
  81. ^ "reference-sysroot Repo". GitHub / WebAssembly. 12 January 2020.
  82. ^ "wasm-c-api Repo". GitHub / WebAssembly. 3 February 2020.
  83. ^ a b "The "Wasmer" WebAssembly Runtime is Generally Available". InfoQ. Retrieved 19 February 2021.
  84. ^ "Design Rationale". GitHub / WebAssembly / design. 1 October 2016.
  85. ^ "Portability - WebAssembly". webassembly.org. Retrieved 28 July 2020.
  86. ^ "Conventions — WebAssembly 1.0". webassembly.github.io. Retrieved 12 November 2019.
  87. ^ "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 17 May 2019.
  88. ^ "Instructions — WebAssembly 1.0". webassembly.github.io. Retrieved 12 November 2019.
  89. ^ Lively, Thomas (19 February 2021) [Pull Request opened on 2021-02-05]. "Final opcodes by tlively · Pull Request #452 · WebAssembly/simd · GitHub". Bytecode Alliance. Retrieved 12 May 2021 – via GitHub.
  90. ^ Delendik, Yury (19 February 2021) [SIMD changes committed on 2021-02-19]. "File wasm-tools/expr.rs at b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub". Bytecode Alliance. Retrieved 12 May 2021 – via GitHub.
  91. ^ "Update interpreter and text with finalized opcodes by ngzhian · Pull Request #486 · WebAssembly/simd". GitHub. Retrieved 14 May 2021.
  92. ^ "WebAssembly/simd". GitHub. Retrieved 14 May 2021.
  93. ^ WebAssembly/relaxed-simd, WebAssembly, 3 May 2021, retrieved 14 May 2021
  94. ^ "How we made the JVM 40x faster". astojanov.github.io. Retrieved 17 February 2021.
  95. ^ "Roadmap". WebAssembly. March 2017.
  96. ^ WebAssembly Community Group (January 2020). "WebAssembly Specification Release 1.0". Retrieved 13 January 2020.
  97. ^ "Folded instructions". GitHub. / Web Assembly / 사양
  98. ^ "Modules (Binary)". WebAssembly 1.0.
  99. ^ "WebAssembly Binary Toolkit (wabt) demos". webassembly.github.io.

Definition of Free Cultural Works logo notext.svg 이 기사에는 무료 콘텐츠 저작물의 텍스트가 포함되어 있습니다.Apache License 2.0 License 스테이트먼트/권한에 따라 라이센스가 부여됩니다.텍스트 형식, jfbastien; rossberg-chromium; kripken; titzer; s3thompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; Andrewosh, GitHub에서 가져온 텍스트.Web Assembly / 설계 Wikipedia 문서에 열린 라이센스 텍스트를 추가하는 방법은 이 사용 방법 페이지를 참조하십시오.Wikipedia 텍스트 재사용에 대한 자세한 내용은 사용 약관을 참조하십시오.

외부 링크