tutorial example llvm webassembly

llvm - tutorial - webassembly example



¿Qué idiomas se pueden compilar en WebAssembly(o wasm)? (4)

¿Qué idiomas se pueden compilar para el ensamblaje web (o wasm)?

Creo que en este momento C, C ++ y rust (experimental) se pueden compilar en el ensamblaje web, con el backend del compilador llvm, con lenguajes como Java, swift y C # que actualmente no son compatibles, pero que son posibles candidatos para el desarrollo futuro.

No creo que javascript pueda compilarse en wasm. https://github.com/WebAssembly/design/issues/219


Este repositorio

Contiene una lista de idiomas que actualmente compilan o tienen sus máquinas virtuales en WebAssembly (wasm)

caracteristicas:

  • Utiliza emojis para mostrar qué tan maduro es actualmente cada idioma
  • Proporciona enlaces a los nombres y opciones de proyectos de cada idioma.

El soporte de WebAssembly está en constante evolución. En este momento es compatible con los siguientes idiomas:

Existen soluciones comerciales también:

Con respecto a JavaScript, es poco probable que obtenga soporte ya que WebAssembly es un lenguaje ensamblador estáticamente tipado.

También hay varios lenguajes más oscuros / aficionados que admiten WebAssembly. Se pueden encontrar más detalles en la lista más exhaustiva de Awesome WebAssembly Languages .


TeaVM se puede utilizar para transpilar el bytecode de JVM a WebAssembly. Puede consultar la página de inicio del proyecto en https://github.com/konsoletyper/teavm .

TeaVM en su núcleo puede transpilar bytecode JVM a JS y WebAssembly. El soporte de WebAssembly se encuentra en una etapa inicial, pero hay demostraciones disponibles para comparar el rendimiento de una simulación JBox2D simple con GWT, TeaVM (salida JS) y TeaVM (salida WASM), que son bastante impresionantes.

Tenga en cuenta que WebAssembly actualmente no tiene acceso directo al DOM u otras API de JavaScript. También en el MVP actual no hay soporte para tipos de datos opacos o incluso el GC. Sin embargo, es posible realizar llamadas ascendentes / descendentes desde JS a WASM y viceversa utilizando algunos trucos de JS, como se ve en las demostraciones mencionadas.


Vea https://github.com/mbasso/awesome-wasm#compilers ; por ahora es solo C / C ++, otros son experimentales, pero la cantidad de la parte "experimental" crece.

Actualmente, WebAssembly admite solo memoria lineal plana. Eso es adecuado para C / C ++ / Rust y muchos otros lenguajes, pero los lenguajes modernos más populares necesitan un recolector de basura para ejecutarse. Esa es la "característica posterior al MVP" de WebAssembly (consulte https://github.com/WebAssembly/design/issues/1079 ). Por ahora, la única opción es implementar un recolector de basura dentro del wasm con algún código personalizado.