- Swift topluluğu, WebAssembly(Wasm) desteğini istikrarlı biçimde geliştirmeyi sürdürüyordu ve buna dayanarak uzun vadeli bir vizyon öneriyor
- WebAssembly, taşınabilirlik, güvenlik ve performansa odaklanan bir sanal makine komut kümesi olup çeşitli platformlarda çalışabiliyor
- Swift'te Wasm desteği, Swift'in tarayıcı dahil yeni ortamlarda kullanılmasını mümkün kılıyor ve istemci/sunucu uygulamaları dahil her iki tarafta da kullanım alanını genişletiyor
Güvenlik ve sistem arayüzü özellikleri
- Wasm, doğrudan sistem erişimi olmadan yalnızca açıkça içe aktarılan işlevleri çalıştırabildiği için güvenlik açısından avantaj sağlıyor
- WASI(WebAssembly System Interface), Wasm'ın ana işletim sistemiyle etkileşime girebilmesi için standart API sunuyor
- Swift,
wasm32-unknown-wasi hedefinde WASI libc temelinde çalışıyor ve C birlikte çalışabilirliği sayesinde zaten kullanılabiliyor
- W3C, Component Model aracılığıyla Wasm'ın tür sistemi ve modül entegrasyonunu birleşik biçimde yönetiyor
wit-tool ile Swift bildirimlerinden .wit üretilebiliyor; tersi yön de destekleniyor
Başlıca kullanım senaryoları
- Swift macro'ları Wasm'a derlenerek her yerde çalışabilen ikili dosyalar olarak dağıtılabiliyor
- SwiftPM eklentileri, manifestler ve macro'ların çalıştırılması sanallaştırılarak güvenlik artırılabiliyor
- Wasm, JIT veya AOT derleme ile optimize edilmiş ikili dosyalar üretebildiğinden performans kaybını en aza indiriyor
- Wasm ile sanallaştırılmış Swift bileşenleri ayrı bir süreç olmadan çalıştırılabiliyor, böylece IPC ek yükü ortadan kalkıyor
Önerilen hedefler
- Swift standart kütüphanesinde WASI destekli API kapsamının genişletilmesi
- Test otomasyonu için CI ortamı kurulması gerekiyor
- Çapraz derleme araçlarının iyileştirilmesi
- Swift SDK sürüm yönetiminin ve kurulumunun sadeleştirilmesi
- Component Model entegrasyonu
- En güncel WASI spesifikasyonlarının Swift'te de kullanılabilmesi için destek sağlanması
- Diğer Wasm bileşenleriyle birlikte çalışabilirliğin geliştirilmesi
- Amaç, Swift'te Wasm bileşenlerini kullanma deneyimini C/C++ ile eşdeğer hale getirmek
- Wasm üzerinde Swift için hata ayıklama ortamının iyileştirilmesi
Hata ayıklamayla ilgili noktalar
- Wasm'da hata ayıklama sınırlı; kendi başına introspection özelliği bulunmuyor
- İki ana yaklaşım bulunuyor
- LLDB ve GDB protokollerini destekleyen Wasm runtime'ı
- Wasm motoruna gömülü hata ayıklayıcı
- Tarayıcı ve tarayıcı dışı ortamlar için farklı hata ayıklama yaklaşımları gerekiyor
- Chrome DevTools gibi araçlarda DWARF bilgisi kullanılabiliyor, ancak Swift metadata'sı ve JIT ifade değerlendirme işlevi için ek entegrasyon gerekiyor
Çoklu iş parçacığı ve eşzamanlılık
- Wasm'da şu anda yalnızca sıralı tutarlılığı destekleyen atomik işlemler bulunuyor
- İş parçacığı oluşturma ana ortama bağlı
- İki iş parçacığı önerisi bulunuyor:
wasi-threads (mevcut yaklaşım, bazı araçlar ve runtime'lar tarafından destekleniyor)
shared-everything-threads (yeni öneri, gelecekte standart haline gelme ihtimali var)
- Swift,
wasm32-unknown-wasi (tek iş parçacığı), wasm32-unknown-wasip1-threads (çok iş parçacığı) desteği sunuyor
- Şu anda libdispatch wasi-threads'i desteklemediği için tek iş parçacıklı Swift Concurrency yürütücüsü kullanılıyor
64 bit adres alanı
- Wasm, varsayılan olarak 32 bit adres alanı kullanıyor
- 64 bit bellek önerisi (memory64) uygulama aşamasında bulunuyor
- Swift'in bunu destekleyebilmesi için WebAssembly araç zincirinin iş birliği veya Swift metadata yapısında değişiklik gerekiyor
Paylaşılan kütüphaneler
- İki yaklaşım bulunuyor
- Emscripten tarzı dinamik bağlama: Standart dışı ve runtime özelliklerine bağımlı
- Component Model tabanlı statik bağlama: Runtime'a özgü özel özellikler olmadan kullanılabiliyor ancak çalışma zamanında yükleme yapılamıyor
- Swift'te paylaşılan kütüphaneleri kullanmak için PIC(Position-Independent Code) modunda derlemek ve belirlenmiş bağlama kurallarına uymak gerekiyor
1 yorum
Swift güzel ama, terk edilmiş Swift yeniden canlanabilir mi..