Bahasa apa yang dapat disusun untuk WebAssembly (Wasm)?
Saya percaya sekarang C, C++, dan Karat (eksperimental) dapat disusun untuk WebAssembly, dengan compiler llvm backend, dengan bahasa seperti Java, Swift, dan C# saat ini tidak didukung, tetapi menjadi kandidat untuk pembangunan masa depan.
Saya don't percaya JavaScript dapat disusun untuk Wasm. https://github.com/WebAssembly/design/issues/219
WebAssembly dukungan terus berkembang. Sekarang hal ini didukung oleh bahasa-bahasa berikut:
C / C++ - memiliki sangat baik (siap produksi) dukungan melalui EmScripten, atau minimal LLVM berbasis toolchains
Karat - WebAssembly adalah aplikasi resmi didukung target, dengan sangat aktif masyarakat sekitar itu.
Pergi - memiliki sekarang mendukung WebAssembly sebagai seorang pejabat, namun eksperimental, target
C# - memiliki dukungan eksperimental melalui Blazor, namun ini yang saat ini membutuhkan embedding .NET runtime ke Wasm. Blazor secara resmi diadopsi oleh Microsoft sebagai teknologi eksperimental, dengan terbaru preview release.
D - "betterC" subset dari D dapat disusun untuk WebAssembly melalui LDC (compiler LLVM).
Naskah - melalui AssemblyScript, sangat eksperimental, tetapi mendapatkan momentum.
Haxe - hanya mengumumkan dukungan
Kotlin - Kotlin/Asli 0.4 memperoleh dukungan eksperimental dari WebAssembly dan melalui TeaVM
Python - Pyodide adalah port dari Python untuk WebAssembly yang mencakup paket inti ilmiah Python stack (Numpy, Panda, matplotlib).
PHP - Percobaan, tetapi dengan prototipe kerja
Perl - WebPerl adalah port dari Perl biner untuk WebAssembly, yang memungkinkan anda untuk menjalankan script-script Perl pada web.
Scala - menggunakan Emscripten compiler
Ruby - melalui run.rb proyek
Cepat - menggunakan SwiftWasm, yang saat ini dalam pengembangan
Ada solusi komersial juga:
Mengenai JavaScript, hal ini tidak mungkin untuk mendapatkan dukungan sebagai WebAssembly adalah statis diketik bahasa assembly.
Ada juga berbagai lebih jelas / penghobi bahasa yang mendukung WebAssembly. Rincian lebih lanjut dapat ditemukan di lebih lengkap Mengagumkan WebAssembly Bahasa daftar.
Lihat https://github.com/mbasso/awesome-wasm#compilers -untuk sekarang ini's hanya C/C++, yang lain masih dalam percobaan, tapi jumlah "eksperimental" bagian tumbuh.
Saat ini WebAssembly mendukung hanya datar linear memori. Yang's cocok untuk C/C++/Karat dan banyak bahasa lainnya, tapi yang paling populer dalam bahasa-bahasa modern perlu garbage collector untuk menjalankan. Yang's "post-MVP fitur" dari WebAssembly (lihat https://github.com/WebAssembly/design/issues/1079). Untuk saat ini satu-satunya pilihan adalah untuk melaksanakan pengumpul sampah dalam wasm dengan beberapa kode kustom.
TeaVM dapat digunakan untuk transpile JVM bytecode untuk WebAssembly. Anda dapat checkout proyek di homepage https://github.com/konsoletyper/teavm.
TeaVM pada intinya dapat transpile JVM bytecode untuk JS dan WebAssembly. WebAssembly dukungan di tahap awal, tetapi ada demo yang tersedia untuk membandingkan kinerja dari yang sederhana JBox2D simulasi dengan GWT, TeaVM(JS output) dan TeaVM(WASM output), yang cukup mengesankan.
Harap dicatat bahwa WebAssembly saat ini tidak memiliki akses langsung ke DOM atau JavaScript Api. Juga di saat MVP ada tidak mendukung tipe data buram atau bahkan GC. Namun, adalah mungkin untuk melakukan up/downcalls dari JS ke WASM dan kembali lagi menggunakan beberapa JS tipu daya, seperti yang terlihat di sebutkan demo.
Berisi daftar bahasa yang saat ini menyusun atau memiliki VMs di WebAssembly(wasm)