WebAssembly (Wasm)로 컴파일 할 수있는 언어는 무엇입니까?


116

WebAssembly (Wasm)로 컴파일 할 수있는 언어는 무엇입니까?

현재 C, C ++ 및 Rust (실험적)는 llvm 컴파일러 백엔드를 사용하여 WebAssembly로 컴파일 될 수 있으며 Java, Swift 및 C #과 같은 언어는 현재 지원되지 않지만 향후 개발을위한 후보가 될 수 있습니다.

JavaScript가 Wasm으로 컴파일 될 수 있다고 생각하지 않습니다. https://github.com/WebAssembly/design/issues/219


1
이 글을 읽는 모든 사람에게 메모처럼 최근에 emscripten을 통해 WASM에 C 및 C ++를 사용했으며 매우 잘 작동합니다.
CoffeeTableEspresso

답변:


121

WebAssembly 지원은 계속 발전하고 있습니다. 현재 다음 언어로 지원됩니다.

상용 솔루션도 있습니다.

JavaScript와 관련하여 WebAssembly는 정적으로 형식화 된 어셈블리 언어이므로 지원을받을 가능성이 낮습니다.

WebAssembly를 지원하는 다양한 더 모호한 / 애호가 언어도 있습니다. 더 자세한 내용은 더 철저한 Awesome WebAssembly Languages 목록 에서 찾을 수 있습니다 .



좋은 점은 - 나는 그것이 다중 언어 및 상업 그대로 자신의의 카테고리로 RemObjects에 추가 한
ColinE

1
그러나 Python은 동적으로 입력됩니다!
Richard Eng

17

https://github.com/mbasso/awesome-wasm#compilers를 참조 하십시오. 현재로서는 C / C ++ 뿐이고 다른 것들은 실험적이지만 "실험적"부분의 양이 증가합니다.

현재 WebAssembly는 평면 선형 메모리 만 지원합니다. C / C ++ / Rust 및 기타 많은 언어에 적합하지만 가장 인기있는 최신 언어는 실행하려면 가비지 수집기가 필요합니다. 이것이 WebAssembly의 "MVP 이후 기능"입니다 ( https://github.com/WebAssembly/design/issues/1079 참조 ). 현재 유일한 옵션은 사용자 지정 코드를 사용하여 wasm 내부에 가비지 수집기를 구현하는 것입니다.


2
asm.js는 wasm으로 쉽게 컴파일 할 수 있고 asm.js javascript 라는 점을 추가 할 가치가 있습니다 . 즉, 자바 스크립트를 컴파일하는 것은 일반적으로 즉시 사용 가능한 컨텍스트 정보가 부족하기 때문에 훨씬 더 어려울 것입니다.
Culex

11

TeaVM을 사용하여 JVM 바이트 코드를 WebAssembly로 변환 할 수 있습니다. https://github.com/konsoletyper/teavm 에서 프로젝트 홈페이지를 확인할 수 있습니다 .

핵심적인 TeaVM은 JVM 바이트 코드를 JS 및 WebAssembly로 변환 할 수 있습니다. WebAssembly 지원은 초기 단계이지만 간단한 JBox2D 시뮬레이션의 성능을 GWT, TeaVM (JS 출력) 및 TeaVM (WASM 출력)과 비교하는 데 사용할 수있는 데모가 있습니다. 매우 인상적입니다.

WebAssembly는 현재 DOM 또는 기타 JavaScript API에 직접 액세스 할 수 없습니다. 또한 현재 MVP에는 불투명 한 데이터 유형 또는 GC도 지원되지 않습니다. 그러나 언급 된 데모에서 볼 수 있듯이 JS에서 WASM으로 상향 / 하향 호출을 수행하고 일부 JS 속임수를 사용하여 다시 되돌릴 수 있습니다.


8

이 저장소

현재 컴파일되거나 WebAssembly (wasm)에 VM이있는 언어 목록을 포함합니다.

풍모:

  • 이모티콘을 사용하여 현재 각 언어의 성숙도를 보여줍니다.
  • 각 언어 프로젝트 이름 및 옵션에 대한 링크를 제공합니다.

3
"이모지를 사용하여 현재 각 언어가 얼마나 성숙한 지 보여줍니다."한 두 번 자신에게 읽어보세요. 꽤 깊은 표현입니다.
ipatch

예, 어리석은 표현과 결합 된 간단하고 직관적 인 설명.
jasonleonhard 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.