Jakie języki można skompilować do WebAssembly (Wasm)?
Uważam, że obecnie C, C ++ i Rust (eksperymentalne) można skompilować do WebAssembly, z zapleczem kompilatora llvm, przy czym języki takie jak Java, Swift i C # nie są obecnie obsługiwane, ale mogą być kandydatami do przyszłego rozwoju.
Nie wierzę, że JavaScript można skompilować do Wasm. https://github.com/WebAssembly/design/issues/219
llvm
programming-languages
webassembly
Jordan Stewart
źródło
źródło
Odpowiedzi:
Obsługa WebAssembly stale się rozwija. Obecnie jest obsługiwany w następujących językach:
D - podzbiór D „betterC” można skompilować do WebAssembly za pomocą LDC (kompilator LLVM).
TypeScript - poprzez AssemblyScript , wysoce eksperymentalny, ale nabiera rozpędu.
Istnieją również rozwiązania komercyjne:
Jeśli chodzi o JavaScript, jest mało prawdopodobne, aby uzyskał wsparcie, ponieważ WebAssembly jest statycznym językiem asemblera.
Istnieją również różne, mniej znane / hobbystyczne języki, które obsługują WebAssembly. Więcej szczegółów można znaleźć na bardziej wyczerpującej liście Awesome WebAssembly Languages .
źródło
Zobacz https://github.com/mbasso/awesome-wasm#compilers - na razie to tylko C / C ++, inne są eksperymentalne, ale ilość części „eksperymentalnej” rośnie.
Obecnie WebAssembly obsługuje tylko płaską pamięć liniową. Jest to odpowiednie dla C / C ++ / Rust i wielu innych języków, ale większość popularnych współczesnych języków wymaga do działania garbage collectora. To „funkcja post-MVP” w WebAssembly (patrz https://github.com/WebAssembly/design/issues/1079 ). Na razie jedyną opcją jest zaimplementowanie garbage collectora wewnątrz wasm z jakimś niestandardowym kodem.
źródło
TeaVM może służyć do transpozycji kodu bajtowego JVM do WebAssembly. Możesz sprawdzić stronę główną projektu pod adresem https://github.com/konsoletyper/teavm .
TeaVM w swej istocie może transponować kod bajtowy JVM do JS i WebAssembly. Obsługa WebAssembly jest na wczesnym etapie, ale dostępne są wersje demonstracyjne umożliwiające porównanie wydajności prostej symulacji JBox2D z GWT, TeaVM (wyjście JS) i TeaVM (wyjście WASM), które są dość imponujące.
Należy pamiętać, że WebAssembly obecnie nie ma bezpośredniego dostępu do DOM ani innych interfejsów API JavaScript. Również w obecnym MVP nie ma wsparcia dla nieprzezroczystych typów danych ani nawet GC. Jednak możliwe jest wykonywanie połączeń w górę / w dół z JS do WASM iz powrotem przy użyciu pewnych sztuczek JS, jak widać we wspomnianych demach.
źródło
To repozytorium
Zawiera listę języków, które obecnie kompilują się lub mają swoje maszyny wirtualne w WebAssembly (wasm)
Cechy:
źródło