Saya telah membaca tentang asm.js dan WebAssembly baru-baru ini:
http://ejohn.org/blog/asmjs-javascript-compile-target/
https://brendaneich.com/2015/06/from-asm-js-to-webassembly/
Saya masih bingung tentang beberapa hal:
- Apakah kode asm.js dikompilasi dalam waktu dan berjalan? Disusun menjadi apa?
- Selain asm.js menjadi teks dan wasm (perakitan web) menjadi biner, apa perbedaan antara keduanya?
- 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?
sumber
asm.js adalah bagian dari JS dengan instruksi yang "sangat dapat dioptimalkan". Pada dasarnya Anda dapat mendeklarasikan tipe (int, float) dan mesin js (di browser tetapi juga di node.js) akan menjalankan instruksi lebih cepat. Ada manfaatnya jika aplikasi Anda melakukan banyak perhitungan atau grafik jika digunakan bersama dengan WebGL.
perakitan web adalah format biner untuk JS, semua JS, tidak hanya asm.js. Ini bukan bytecode, ini adalah encoding biner dari AST yang dihitung oleh parser. Ini memiliki 2 manfaat besar:
Kita sudah dapat menulis kode untuk browser yang bukan JS: EMSCripten dapat mengkompilasi kode c ++ dalam kode JS. Transcompiler lain sudah tersedia untuk mengkompilasi kode Anda ke dalam JS. Menggunakan asm.js kode itu bisa berjalan lebih cepat ketika melakukan matematika. Menggunakan perakitan web kode tersebut akan lebih kompak dan browser akan dapat memprosesnya lebih cepat (karena akan dapat melewati penguraian). Anda tidak akan memiliki plugin baru untuk dimuat seperti DirectX, JavaApplets, Flash atau Silverlight karena semuanya akan berjalan di kotak pasir JS.
sumber
Browser yang berbeda mengkompilasi kode asm.js dengan cara yang berbeda. Per Agustus 2015:
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.
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.
sumber