Apakah kode asm.js dikompilasi dalam waktu dan berjalan? Disusun menjadi apa?
Browser yang berbeda mengkompilasi kode asm.js dengan cara yang berbeda. Per Agustus 2015:
- Firefox mengkompilasi asm.js ke kode mesin (dan menyimpan kode mesin tersebut untuk memuat asm.js yang sama di masa mendatang) [ 1 ].
- Di Windows 10 sebagai flag eksperimental, Edge juga akan melakukan validasi Ahead-of-Time dan kompilasi asm.js [ 2 ].
- Chrome secara khusus mengenali perintah "use asm" di awal asm.js untuk mengurai dan menganalisis kode dengan lebih bersemangat dan mengubah heuristik kompilasi.
- Safari tidak melakukan pemrosesan khusus asm.js.
Selain asm.js menjadi teks dan wasm (perakitan web) menjadi biner, apa perbedaan antara keduanya?
asm.js hanyalah JavaScript dan karenanya harus berperilaku persis sesuai dengan spesifikasi JavaScript. Sebagai standar baru, WebAssembly mampu memperbaiki beberapa kasus sudut di mana perilaku JavaScript tidak ideal (dari perspektif kinerja atau kompilasi) [ 3 ]. Di masa mendatang [ 4 ], WebAssembly akan dapat menambahkan fitur-fitur yang akan sulit untuk diekspresikan dalam JavaScript.
Apa artinya ini untuk bahasa skrip lain, yang dijalankan di browser? Ambil python misalnya, apakah itu akan terjadi
- kode python dikompilasi menjadi wasm? atau
- interpreter python (Cpython) dikompilasi menjadi wasm dan menafsirkan python?
Di v.1, cara termudah untuk menjalankan Python di browser adalah dengan mengkompilasi interpreter Python ke wasm, seperti yang Anda katakan. Ini berarti, misalnya, Python GC berjalan dalam kode wasm dan secara manual mengelola memori linier wasm. Sudah ada proyek eksperimental untuk menambahkan backend asm.js ke PyPy [ 5 ] (yang juga bisa bekerja dengan baik untuk wasm). Saat ini mengalami keterbatasan asm.js yang dapat diatasi dengan fitur wasm penautan dinamis . Lebih jauh lagi, wasm berupaya menyediakan integrasi GC dan dukungan kompilasi JIT yang keduanya akan memungkinkan integrasi yang lebih efisien dan alami dengan platform Web.