11 poin oleh GN⁺ 2025-05-10 | 2 komentar | Bagikan ke WhatsApp
  • Spesifikasi Wasm 2.0 telah diumumkan secara resmi
  • Wasm Community dan Working Groups telah menyelesaikan spesifikasi ini sejak 2022, dan implementasi utama sebenarnya sudah mendukung 2.0
  • Mulai 2.0, diperkenalkan model evergreen, sehingga dokumen Candidate Recommendation akan terus diperbarui agar tetap dalam kondisi terbaru
  • Setiap kali versi baru diumumkan, dokumen tidak dipindahkan menjadi rekomendasi final; sebaliknya, draf rekomendasi saat ini dianggap sebagai standar

Fitur utama dan tambahan di Wasm 2.0

  • Instruksi vektor (SIMD): penambahan 236 instruksi baru memungkinkan pemanfaatan kemampuan SIMD 128-bit pada CPU modern, sehingga efisien untuk codec audio/video berperforma tinggi, machine learning, kriptografi, dan lainnya
  • Instruksi bulk memory: ditambahkan satu set instruksi yang memungkinkan penyalinan dan inisialisasi memori serta tabel dengan cepat
  • Pengembalian multi-value: fungsi dan blok kini dapat mengembalikan beberapa nilai, sehingga calling convention menjadi lebih baik dan transformasi program tambahan dimungkinkan
  • Reference types: mendukung referensi ke fungsi atau pointer ke objek eksternal (misalnya nilai JavaScript) sebagai nilai kelas satu yang opak; tabel dapat digunakan sebagai penyimpanan untuk nilai referensi ini, serta dimungkinkan instruksi untuk menangani tabel dan definisi banyak tabel
  • Konversi non-trapping: diperkenalkan instruksi konversi yang tidak menimbulkan trap tak terduga saat mengonversi dari floating-point ke integer
  • Instruksi sign-extension: ditambahkan instruksi untuk memperluas lebar integer bertanda secara langsung, sehingga perluasan kini dapat dilakukan tanpa akses memori seperti sebelumnya

Kompatibilitas mundur dan prospek ke depan

  • Wasm 2.0 sepenuhnya kompatibel dengan 1.0, sehingga program yang sudah ada tetap berjalan apa adanya
  • Rilis Wasm 3.0 juga dijadwalkan hadir dalam waktu dekat

2 komentar

 
caniel 2025-05-10

WA!(SM)

 
GN⁺ 2025-05-10
Opini Hacker News
  • Jika merangkum pengumuman WASM 2.0 pada Maret 2025, ini merupakan peningkatan besar dengan 236 instruksi vektor baru seperti SIMD 128-bit yang sangat meningkatkan performa codec video/audio, aplikasi machine learning, dan kriptografi, dukungan salin/inisialisasi memori cepat melalui instruksi bulk memory, fungsi kini dapat mengembalikan banyak hasil sehingga mendukung calling convention yang lebih cepat dan mengurangi referensi tidak langsung, reference types yang memperlakukan pointer ke objek eksternal (seperti nilai JavaScript) sebagai nilai kelas satu, kemampuan mendeklarasikan tabel dengan berbagai tipe, serta penambahan instruksi perluasan lebar bit dan konversi floating-point tanpa trap tak terduga
    • Rust+LLVM pada praktiknya masih belum bisa memanfaatkan dukungan pengembalian multi-hasil karena masalah kompatibilitas ABI, saya kurang tahu bagaimana situasinya di Clang
    • Bagian instruksi vektor (SIMD) terasa menjadi rumit karena terlalu dini mengejar optimisasi, seandainya memakai proposal flexible-size vectors saja mungkin hasilnya akan lebih elegan
    • Fitur pengembalian multi-hasil akan sangat bermanfaat juga untuk pengembangan runtime Common Lisp
    • Di akhir pos resmi tertulis “pengenalan Wasm 3.0 akan segera hadir”, jadi tampaknya Wasm 3.0 benar-benar akan muncul dalam waktu dekat
    • ISA yang independen dari arsitektur dan serbaguna tidak bisa benar-benar sejalan dengan ISA yang memaksimalkan SIMD CPU tertentu, harus memilih salah satu; saya belum sempat memeriksa apakah instruksi SIMD Wasm2 saat ini cukup generik karena terkena rate limit GitHub
  • Spesifikasi WebAssembly cukup mudah dibaca, tetapi untuk pemula yang tidak ingin membaca spesifikasi lengkap, saya merekomendasikan buku online WebAssembly from the Ground Up, yang mengajarkan langkah demi langkah dengan membuat compiler langsung dalam JavaScript sehingga cocok untuk praktik, dan ada sampel gratisnya; sebagai catatan, saya adalah salah satu penulisnya
    • Salah satu alasan saya pribadi menyukai Ada adalah karena kode fungsi pengecekan U32 yang merepotkan seperti di JavaScript bisa ditangani sangat rapi di Ada dengan subtype atau modul
    • Saya penasaran apakah kode WASM bisa diinstrumentasi untuk debugging in-process, yakni mengubah bahasa kustom ke WASM secara real time lalu sekaligus mewujudkan breakpoint dan inspeksi memori di web
  • Selama setahun terakhir mengerjakan pengembangan runtime WebAssembly, saya terkesan dengan ketelitian spesifikasi dan tes yang tersedia dengan baik; memang butuh waktu untuk terbiasa, tetapi setelah paham, ini spesifikasi bahasa yang sangat cerdas, dan dalam situasi ambigu, interpreter referensi yang dihasilkan langsung dari spesifikasi sangat membantu, begitu juga tes spesifikasi untuk memverifikasi konsistensi
  • Proposal Wasm Constant Time baru-baru ini dipindahkan menjadi inactive; sebagian besar pekerjaan nyatanya dilakukan pada 2018, tetapi integrasi dengan SIMD dan penggabungan ke ekstensi resmi tertunda, sehingga kecuali ada yang melanjutkan pekerjaan yang sangat penting ini, semua kriptografi di Wasm akan sangat rentan terhadap serangan timing (timing attack)
  • Menarik bahwa Wasm adalah singkatan dari WebAssembly tetapi bukan akronim, sehingga tidak ditulis sebagai WASM dengan huruf kapital semua
    • Kalau mengikuti logika itu, bukankah seharusnya WAsm?
    • Bahkan jika itu akronim pun, ada banyak contoh yang tetap ditulis huruf kecil semua (misalnya scuba, radar, laser)
    • Semoga berhasil wkwk
  • Saya penasaran dengan daftar aplikasi WASM yang benar-benar berjalan; idenya bagus, tetapi terasa seperti DAPPs yang “hanya ada untuk seru-seruan”, jadi akan bagus kalau ada contoh nyata
    • Saya merekomendasikan madewithwebassembly.com dan GitHub Awesome-WebAssembly-Applications. Keduanya merupakan sumber yang merangkum aplikasi WASM nyata dengan baik
  • Rilis WASM2 kali ini sangat bagus, tetapi penerapan SIMD ukuran tetap (128-bit) masih terasa disayangkan; pendekatan yang lebih fleksibel seperti ARM SVE, di mana compiler menyesuaikan lebar SIMD berdasarkan performa perangkat, mungkin akan lebih baik
    • Namun saya justru berpikir SIMD ukuran tetap membuka lebih banyak kasus penggunaan; instruksi vektor relatif mudah digantikan bahkan dengan SIMD ukuran tetap, SIMD memang tidak selalu wajib tetapi ada banyak penggunaan opportunistic yang tervectorisasi berkat ukuran register, dan untuk kasus seperti itu ini bisa sangat berguna
    • Akar masalahnya adalah melakukan optimisasi terlalu dini; isu SIMD ini pun akan jauh lebih elegan jika sejak awal hanya mengikuti proposal vektor ukuran variabel
  • Saya penasaran apakah fungsi C yang mengembalikan nilai sebagai struct bisa dikompilasi ke WASM
    • Bisa, tetapi setahu saya saat ini itu belum bisa “diekspor(export)” ke JS
  • Saya penasaran apakah sudah ada runtime yang mengimplementasikan fitur WASM2
    • Sebagian besar sudah mengimplementasikannya sejak lama; komunitas Wasm dan working group memfinalkan spesifikasinya pada awal 2022, dan implementasi utama sudah menyediakan 2.0 bahkan sebelumnya, 3.0 juga akan segera diresmikan, dan beberapa fiturnya sudah tersedia di balik feature flag
  • Bytecode untuk web terasa seperti mimpi lama; sebagai pengembang C#, saya terkesan bahwa Blazor dengan berani memelopori WASM sejak masa awal, .NET sudah cukup jauh memimpin di WASM, dan saya menantikan perubahan 2.0 kali ini