Apa itu WebAssembly?
- WebAssembly adalah himpunan instruksi terstandarisasi dan format bytecode yang dirancang untuk menjalankan kode sisi klien yang tidak tepercaya di browser web dengan kecepatan yang mendekati native.
- WebAssembly berkembang dari compiler Emscripten C/C++ ke JavaScript, yang pada awalnya mengubah LLVM IR menjadi JavaScript sehingga kode C dan C++ dapat dijalankan di web.
- Seiring waktu, para pengembang browser bekerja sama dengan proyek Emscripten untuk membuat subset sederhana dari JavaScript demi optimasi performa, dan ini distandardisasi sebagai asm.js.
- Setelah itu, untuk menghindari overhead JavaScript, dirancang format bytecode yang berdiri sendiri, dan inilah Wasm.
- Belakangan ini WebAssembly juga semakin populer di luar browser, dan Fastly serta Shopify membangun produk Edge Compute dan Functions berbasis engine WebAssembly.
- WebAssembly adalah platform yang menarik untuk membangun ekosistem plugin karena dapat ditargetkan dari berbagai bahasa sumber.
Mengapa interpreter WebAssembly?
- Seperti banyak software engineer lainnya, saya terjebak dalam pola memulai side project baru lalu kehilangan minat beberapa minggu kemudian.
- Saya membutuhkan proyek besar yang memungkinkan saya terus berinvestasi usaha dalam jangka waktu panjang, sekaligus memberi paparan ke level yang lebih rendah dari stack komputasi.
- Saya mulai tertarik pada hype WebAssembly, dan ini tampak menarik sebagai alat platform engineering yang memungkinkan perancangan system call kustom.
Semblance
- Untuk membiasakan diri dengan WebAssembly Core Specification, saya memutuskan untuk menulis interpreter WebAssembly.
- Karena tujuan proyek ini adalah pembelajaran, saya tidak berencana mengimplementasikan semua opcode atau meloloskan core test suite.
- Jika bisa menjalankan "Hello, World!", saya sudah akan puas.
Hasil
- Proyek ini dianggap sangat sukses. Cakupan opcode belum lengkap, tetapi sudah dapat menjalankan program "Hello, World!" sederhana.
- Kodenya berantakan, lambat, memiliki memory leak, dan mungkin rentan terhadap modul berbahaya, tetapi tetap berfungsi.
- Saya belajar banyak tentang spesifikasi inti WebAssembly dan bisa keluar dari zona nyaman saya sebagai engineer.
- Kini saya merasa telah memperoleh pengetahuan WebAssembly yang cukup untuk dapat berkontribusi pada runtime kelas industri seperti Wasmtime.
1 komentar
Komentar Hacker News
Saya pernah menulis interpreter Wasm dalam Scheme, jadi senang melihat orang lain menulisnya sendiri. Wasm ternyata tidak sesulit yang dibayangkan, dan saya menyarankan untuk mencobanya secukupnya agar tetap menyenangkan tanpa harus mengimplementasikan semua instruksi
wast2json, Anda bisa mendapatkan deskripsi JSON yang lebih sederhana serta file wasm biner biasaPertanyaan dari pemula:
Menemukan artikel menarik tentang interpretasi WASM secara langsung
Pendekatan yang menarik, dan pekerjaan yang sangat bagus
Saya pikir akan menjadi ide yang bagus untuk mengadopsi Wasm-C-API sebagai antarmuka standar
Hal yang mungkin kontroversial:
Saya menyarankan untuk melihat Orca. Ini bisa menjadi peluang yang baik untuk berkontribusi: https://orca-app.dev
Sangat keren melihat proses membangun interpreter dari nol sambil mendalami WebAssembly
Tulisan yang sangat bagus, dan memotivasi saya untuk kembali mengerjakan implementasi WASM
Pekerjaan yang benar-benar keren