Bahasa apa yang dapat dikompilasi ke WebAssembly (Wasm)?
Saya yakin saat ini C, C ++, dan Rust (eksperimental) dapat dikompilasi ke WebAssembly, dengan backend compiler llvm, dengan bahasa seperti Java, Swift, dan C # saat ini tidak didukung, tetapi menjadi kandidat yang mungkin untuk pengembangan di masa mendatang.
Saya tidak percaya JavaScript dapat dikompilasi ke Wasm. https://github.com/WebAssembly/design/issues/219
llvm
programming-languages
webassembly
Jordan Stewart
sumber
sumber
Jawaban:
Dukungan WebAssembly terus berkembang. Saat ini didukung oleh bahasa berikut:
D - subset D "betterC" dapat dikompilasi ke WebAssembly melalui LDC (LLVM compiler).
TypeScript - melalui AssemblyScript , sangat eksperimental, tetapi mendapatkan momentum.
Ada juga solusi komersial:
Mengenai JavaScript, tidak mungkin untuk mendapatkan dukungan karena WebAssembly adalah bahasa assembly yang diketik secara statis.
Ada juga berbagai bahasa yang lebih tidak jelas / hobi yang mendukung WebAssembly. Rincian lebih lanjut dapat ditemukan di daftar Bahasa WebAssembly yang lebih lengkap .
sumber
Lihat https://github.com/mbasso/awesome-wasm#compilers - untuk saat ini hanya C / C ++, yang lain masih eksperimental, tetapi jumlah bagian "eksperimental" bertambah.
Saat ini WebAssembly hanya mendukung memori linier datar. Itu cocok untuk C / C ++ / Rust dan banyak bahasa lainnya, tetapi sebagian besar bahasa modern yang populer membutuhkan pengumpul sampah untuk dijalankan. Itu adalah "fitur pasca-MVP" dari WebAssembly (lihat https://github.com/WebAssembly/design/issues/1079 ). Untuk saat ini, satu-satunya pilihan adalah menerapkan pengumpul sampah di dalam wasm dengan beberapa kode khusus.
sumber
TeaVM dapat digunakan untuk memindahkan bytecode JVM ke WebAssembly. Anda dapat memeriksa beranda proyek di https://github.com/konsoletyper/teavm .
TeaVM pada intinya dapat memindahkan bytecode JVM ke JS dan WebAssembly. Dukungan WebAssembly masih dalam tahap awal, tetapi tersedia demo untuk membandingkan kinerja simulasi JBox2D sederhana dengan GWT, TeaVM (keluaran JS) dan TeaVM (keluaran WASM), yang cukup mengesankan.
Harap dicatat bahwa WebAssembly saat ini tidak memiliki akses langsung ke DOM atau JavaScript API lainnya. Juga dalam MVP saat ini, tidak ada dukungan untuk tipe data buram atau bahkan GC. Namun, dimungkinkan untuk melakukan up / downcall dari JS ke WASM dan kembali lagi menggunakan beberapa trik JS, seperti yang terlihat pada demo yang disebutkan.
sumber
Repo ini
Berisi daftar bahasa yang saat ini dikompilasi ke atau memiliki VM-nya di WebAssembly (wasm)
Fitur:
sumber