WebAssembly (WASM) – Penyelaman Dalam: Bahagian 1
Siaran ini memulakan siri meneroka WebAssembly. Cari pautan ke bahagian lain siri di bawah.
WebAssembly, atau WASM, ialah bahasa peringkat rendah seperti pemasangan yang direka untuk menjalankan aplikasi yang dibina menggunakan pelbagai bahasa pengaturcaraan dalam penyemak imbas web. Sifat merentas platform dan reka bentuk peringkat rendahnya memberikan kelajuan hampir asli, membuka kunci keupayaan web yang sebelum ini mustahil dengan JavaScript sahaja. Jika anda mendambakan apl web yang lebih pantas yang mampu mengendalikan tugasan intensif pengiraan, WASM ialah penyelesaiannya. Pengenalan ini akan merangkumi fungsi teras WASM, asal usulnya dan cara mula menggunakannya.
WebAssembly ialah sasaran kompilasi peringkat rendah yang direka khusus untuk penyemak imbas web. Ia bukan bahasa untuk pelaksanaan langsung; sebaliknya, ia mentakrifkan struktur seperti himpunan yang dihimpunkan oleh bahasa lain ke dalam. Aspek "sasaran kompilasi" ini penting.
Pertimbangkan contoh kod C ini:
<code class="language-c">int a = 1; int b = 2; int c = a + b;</code>
Pengkompil C menterjemah ini ke dalam arahan pemasangan (atau kod mesin):
<code class="language-assembly">mov eax, 1 ; Load 1 into register EAX mov ebx, 2 ; Load 2 into register EBX add eax, ebx ; Add EAX and EBX, result in EAX</code>
Ini, seterusnya, menghasilkan perwakilan binari:
<code>00000000000000000000000000000011</code>
(Nota: Output binari yang tepat berbeza-beza bergantung pada seni bina CPU. Ini adalah ilustrasi yang dipermudahkan.)
Kod C bertukar menjadi pemasangan, kemudian binari—boleh laksana terus oleh komputer. WebAssembly mengubah suai proses ini. Daripada pemasangan standard, pengkompil mungkin menghasilkan:
<code>$a int $b int $c int set $a 1 set $b 2 set $c = add $a $b</code>
(Ini ialah sintaks hipotetikal untuk tujuan ilustrasi sahaja, bukan sintaks WASM sebenar.)
Jika semua pelayar memahami sintaks ini, ia akan merevolusikan pembangunan web. Penyusun untuk bahasa seperti C , Rust dan Go boleh menjana output ini, membolehkan penyemak imbas melaksanakan program yang ditulis dalam mana-mana bahasa, tanpa mengira sistem pengendalian atau penyemak imbas.
Spesifikasi WebAssembly yang ditakrifkan oleh W3C memastikan pengendalian penyemak imbas yang konsisten terhadap WASM. Pelayar utama sudah menyokong WebAssembly secara asli.
WebAssembly mempunyai dua format utama:
Format ini boleh ditukar ganti; WAT boleh ditukar kepada WASM, dan sebaliknya. Menyusun kepada salah satu adalah mungkin.
Mari kita lihat semula contoh kita menggunakan WAT:
<code class="language-c">int a = 1; int b = 2; int c = a + b;</code>
<code class="language-assembly">mov eax, 1 ; Load 1 into register EAX mov ebx, 2 ; Load 2 into register EBX add eax, ebx ; Add EAX and EBX, result in EAX</code>
<code>00000000000000000000000000000011</code>
WebAssembly menggunakan mesin tindanan. get_local
menolak nilai ke dalam tindanan, i32.add
menambah dua elemen tindanan teratas dan set_local
menyimpan hasilnya. Perduaan WASM yang setara ialah:
<code>$a int $b int $c int set $a 1 set $b 2 set $c = add $a $b</code>
Walaupun ini mungkin kelihatan rumit, ingat bahawa WASM ialah sasaran kompilasi, bukan bahasa pengaturcaraan utama. Anda biasanya akan menulis kod dalam bahasa peringkat tinggi dan menyusun ke WASM.
Tidak. WASM direka untuk melengkapi JavaScript, bukan menggantikannya. JavaScript cemerlang dalam manipulasi DOM dan interaksi web asas, manakala WASM mengendalikan tugas intensif pengiraan dengan prestasi hampir asli. Sinergi ini membolehkan pengagihan tugas yang cekap.
Prestasi WASM menjadikannya ideal untuk:
Contoh aplikasi WASM sedia ada termasuk Figma, Amazon Prime Video dan Google Earth.
Walaupun pada mulanya tertumpu pada pelayar, keupayaan WASM melangkaui web melalui WASI (Antara Muka Sistem WebAssembly). WASI menyediakan API standard, membolehkan penciptaan aplikasi merentas platform daripada binari tunggal, menghapuskan keperluan untuk binaan khusus platform.
Beberapa projek sebelumnya cuba menjalankan bahasa lain dalam penyemak imbas, tetapi sering menghadapi pengehadan kerana kekurangan penyeragaman, kelemahan keselamatan atau isu prestasi (ActiveX, Java Applets, Flash, NaCl, asm.js, Dart). WebAssembly menangani kelemahan ini melalui penyeragaman, mudah alih, keselamatan, prestasi dan kebolehlanjutan.
Pengenalan ini memberikan gambaran keseluruhan peringkat tinggi WebAssembly. Siaran berikutnya akan mendalami topik tertentu dan meneroka projek WebAssembly praktikal.
Atas ialah kandungan terperinci Pengenalan kepada WebAssembly. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!