Hei semua,
Siaran ini meneruskan siri berbilang bahagian kami di WebAssembly. Lihat bahagian lain di sini.
Sekarang kita memahami asas WebAssembly, mari kita terokai seni binanya. Komponen utama termasuk:
Modul WebAssembly ialah unit kod terkumpul yang mengandungi fungsi, memori, jadual dan sumber lain yang diperlukan untuk pelaksanaan. Setiap modul adalah serba lengkap dan bebas serta-merta. Ia pada asasnya ialah fail .wasm
. Modul menyokong fungsi dan memori pengimportan dan eksport, membolehkan pengaturcaraan modular dan penyepaduan dengan teknologi web lain.
WebAssembly berjalan dalam persekitaran yang selamat, terpencil, kotak pasir dalam hos (seperti penyemak imbas atau Node.js). Persekitaran ini mengehadkan akses kepada sistem hos, meningkatkan keselamatan. Akses kepada sumber memerlukan permintaan yang jelas. Persekitaran pelaksanaan termasuk masa jalan WebAssembly menguruskan pemuatan modul, pengesahan, memori dan pelaksanaan arahan.
WebAssembly menggunakan mesin maya berasaskan tindanan. Arahan memanipulasi data pada tindanan. Berikut ialah contoh mudah:
<code>( func $add(param $a i32) (param $b i32) (result i32) local.get $a local.get $b i32.add )</code>
Fungsi ini menambah dua integer 32-bit. Langkah-langkah pelaksanaan mesin tindanan ialah:
$a
pada tindanan.$b
pada tindanan.$a
dan $b
, tambahkannya.Model memori linear WebAssembly ialah tatasusunan bait yang bersebelahan dan boleh berkembang—HEAP untuk program WebAssembly. Ia diindeks mengikut offset bait, membenarkan akses terus ke lokasi tertentu.
Sebagai contoh, menyimpan dua nombor 8-bit (10 dan 16) di alamat 0 dan 1 masing-masing:
Data boleh diakses menggunakan pandangan bit yang berbeza; konsistensi adalah kunci untuk mengelakkan konflik. JavaScript mengakses memori melalui antara muka WebAssembly.Memory
. Contohnya:
<code class="language-javascript">const memory = new WebAssembly.Memory({ initial: 10, maximum: 100 });</code>
Ini memperuntukkan 640kB (minimum) memori (1 halaman = 64kB). Memori yang dikongsi membenarkan akses berbilang benang. setValue(ptr, value, type)
dan getValue(ptr, type)
memudahkan penetapan dan mendapatkan nilai.
Berikut ialah contoh C/JavaScript yang menggambarkan interaksi memori:
<code>( func $add(param $a i32) (param $b i32) (result i32) local.get $a local.get $b i32.add )</code>
<code class="language-javascript">const memory = new WebAssembly.Memory({ initial: 10, maximum: 100 });</code>
Ingat untuk mengagihkan memori menggunakan _free
untuk mengelakkan kebocoran. Modul juga boleh menentukan ingatan mereka sendiri.
Jadual WebAssembly ialah segmen memori berasingan yang menyimpan rujukan fungsi, membolehkan panggilan fungsi dinamik. Ini membolehkan fungsi memanggil pada masa jalan tanpa pengetahuan awal tentang nama mereka, sebaliknya menggunakan indeks. Ini penting untuk senario seperti memuatkan pemalam permainan dengan fungsi yang tidak diketahui.
Gambaran keseluruhan ini merangkumi komponen teras WebAssembly. Untuk penerokaan yang mendalam, lihat sumber ini:
Seterusnya, kami akan membina beberapa projek praktikal!
Atas ialah kandungan terperinci Komponen WebAssembly. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!