- Komunitas Swift telah secara konsisten mengembangkan dukungan WebAssembly (Wasm), dan berdasarkan itu mengusulkan visi jangka panjang
- WebAssembly adalah instruction set mesin virtual yang menekankan portabilitas, keamanan, dan performa, sehingga dapat dijalankan di berbagai platform
- Dukungan Wasm di Swift memungkinkan Swift digunakan di lingkungan baru termasuk browser, serta memperluas potensi pemanfaatannya di aplikasi klien/server
Karakteristik keamanan dan antarmuka sistem
- Wasm unggul dalam keamanan karena hanya dapat menjalankan fungsi yang diimpor secara eksplisit tanpa akses sistem langsung
- WASI (WebAssembly System Interface) menyediakan API standar agar Wasm dapat berinteraksi dengan OS host
- Swift berjalan di target
wasm32-unknown-wasi berbasis WASI libc, dan sudah dapat digunakan melalui interoperabilitas C
- W3C mengelola integrasi sistem tipe dan keterhubungan modul Wasm secara terpadu melalui Component Model
- Melalui
wit-tool, .wit dapat dibuat dari deklarasi Swift, dan arah sebaliknya juga didukung
Kasus penggunaan utama
- Macro Swift dapat dikompilasi menjadi Wasm dan didistribusikan sebagai biner yang bisa dijalankan di mana saja
- Eksekusi SwiftPM plugin, manifest, macro, dan sebagainya dapat divirtualisasi untuk memperkuat keamanan
- Wasm dapat menghasilkan biner yang dioptimalkan melalui kompilasi JIT atau AOT sehingga kehilangan performa dapat diminimalkan
- Komponen Swift yang divirtualisasi dengan Wasm dapat dijalankan tanpa proses terpisah, sehingga menghilangkan overhead IPC
Tujuan yang diusulkan
- Memperluas cakupan API dukungan WASI di pustaka standar Swift
- Perlu membangun lingkungan CI untuk otomatisasi pengujian
- Meningkatkan alat cross-compilation
- Menyederhanakan pengelolaan versi dan instalasi Swift SDK
- Integrasi Component Model
- Mendukung agar spesifikasi WASI terbaru juga dapat digunakan di Swift
- Meningkatkan interoperabilitas dengan komponen Wasm lain
- Tujuannya adalah membuat pengalaman menggunakan komponen Wasm di Swift setara dengan C/C++
- Meningkatkan lingkungan debugging Swift di Wasm
Hal-hal terkait debugging
- Debugging Wasm masih terbatas, dan Wasm sendiri tidak memiliki kemampuan introspection
- Ada dua pendekatan utama
- Runtime Wasm yang mendukung LLDB dan protokol GDB
- Debugger yang tertanam di mesin Wasm
- Lingkungan browser dan non-browser memerlukan pendekatan debugging yang berbeda
- Informasi DWARF dapat dimanfaatkan di alat seperti Chrome DevTools, tetapi metadata Swift dan kemampuan evaluasi ekspresi JIT memerlukan integrasi tambahan
Multithreading dan konkurensi
- Saat ini Wasm hanya memiliki operasi atomik yang mendukung sequential consistency
- Pembuatan thread bergantung pada lingkungan host
- Ada dua proposal threading:
wasi-threads (cara yang ada saat ini, didukung oleh sebagian alat dan runtime)
shared-everything-threads (proposal baru, berpotensi menjadi standar di masa depan)
- Swift mendukung
wasm32-unknown-wasi (single-thread) dan wasm32-unknown-wasip1-threads (multi-thread)
- Saat ini, karena libdispatch belum mendukung wasi-threads, eksekutor Swift Concurrency berbasis single-thread yang digunakan
Ruang alamat 64-bit
- Wasm secara default menggunakan ruang alamat 32-bit
- Proposal memori 64-bit (memory64) sedang dalam tahap implementasi
- Untuk mendukung ini di Swift, diperlukan kerja sama toolchain WebAssembly atau perubahan pada struktur metadata Swift
Pustaka bersama
- Ada dua pendekatan
- Dynamic linking gaya Emscripten: nonstandar dan bergantung pada kemampuan runtime
- Static linking berbasis Component Model: dapat digunakan tanpa fitur khusus runtime, tetapi tidak mendukung runtime loading
- Untuk menggunakan pustaka bersama di Swift, perlu mengompilasi dalam mode PIC (Position-Independent Code) dan mengikuti konvensi linking yang telah ditetapkan
1 komentar
Swift memang bagus, tapi apakah Swift yang sudah ditinggalkan bisa hidup kembali..