4 poin oleh GN⁺ 2025-04-07 | 1 komentar | Bagikan ke WhatsApp
  • 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

  1. Memperluas cakupan API dukungan WASI di pustaka standar Swift
    • Perlu membangun lingkungan CI untuk otomatisasi pengujian
  2. Meningkatkan alat cross-compilation
    • Menyederhanakan pengelolaan versi dan instalasi Swift SDK
  3. Integrasi Component Model
    • Mendukung agar spesifikasi WASI terbaru juga dapat digunakan di Swift
  4. Meningkatkan interoperabilitas dengan komponen Wasm lain
    • Tujuannya adalah membuat pengalaman menggunakan komponen Wasm di Swift setara dengan C/C++
  5. 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
    1. Runtime Wasm yang mendukung LLDB dan protokol GDB
    2. 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
    1. Dynamic linking gaya Emscripten: nonstandar dan bergantung pada kemampuan runtime
    2. 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

 
kandk 2025-04-07

Swift memang bagus, tapi apakah Swift yang sudah ditinggalkan bisa hidup kembali..