Quais linguagens podem ser compiladas para WebAssembly (Wasm)?
Eu acredito que agora C, C ++ e Rust (experimental) podem ser compilados para WebAssembly, com o back-end do compilador llvm, com linguagens como Java, Swift e C # não sendo suportadas atualmente, mas sendo possíveis candidatas para desenvolvimento futuro.
Não acredito que o JavaScript possa ser compilado para Wasm. https://github.com/WebAssembly/design/issues/219
llvm
programming-languages
webassembly
Jordan Stewart
fonte
fonte
Respostas:
O suporte do WebAssembly está sempre evoluindo. No momento, ele é compatível com os seguintes idiomas:
D - o subconjunto "betterC" de D pode ser compilado para WebAssembly por meio de LDC (compilador LLVM).
TypeScript - via AssemblyScript , altamente experimental, mas ganhando impulso.
Existem também soluções comerciais:
Em relação ao JavaScript, é improvável que obtenha suporte, pois WebAssembly é uma linguagem assembly com tipo estático.
Existem também várias linguagens mais obscuras / amadoras que suportam WebAssembly. Mais detalhes podem ser encontrados na lista mais completa de Idiomas do Awesome WebAssembly .
fonte
Veja https://github.com/mbasso/awesome-wasm#compilers - por enquanto é apenas C / C ++, outros são experimentais, mas a quantidade da parte "experimental" cresce.
Atualmente, o WebAssembly suporta apenas memória linear plana. Isso é adequado para C / C ++ / Rust e muitas outras linguagens, mas a maioria das linguagens modernas populares precisa do coletor de lixo para funcionar. Esse é o "recurso pós-MVP" do WebAssembly (consulte https://github.com/WebAssembly/design/issues/1079 ). Por enquanto, a única opção é implementar o coletor de lixo dentro do wasm com algum código personalizado.
fonte
TeaVM pode ser usado para transpilar bytecode JVM para WebAssembly. Você pode verificar a página inicial do projeto em https://github.com/konsoletyper/teavm .
TeaVM em seu núcleo pode transpilar o bytecode JVM para JS e WebAssembly. O suporte WebAssembly está em um estágio inicial, mas existem demos disponíveis para comparar o desempenho de uma simulação JBox2D simples com GWT, TeaVM (saída JS) e TeaVM (saída WASM), que são bastante impressionantes.
Observe que WebAssembly atualmente não tem acesso direto ao DOM ou outras APIs JavaScript. Também no MVP atual não há suporte para tipos de dados opacos ou mesmo o GC. No entanto, é possível fazer up / downcalls de JS para WASM e vice-versa usando alguns truques de JS, como visto nas demos mencionadas.
fonte
Este repo
Contém uma lista de linguagens que atualmente compilam ou têm suas VMs em WebAssembly (wasm)
Recursos:
fonte