11 puan yazan GN⁺ 2025-05-10 | 2 yorum | WhatsApp'ta paylaş
  • Wasm 2.0 spesifikasyonu resmen duyuruldu
  • Wasm Community ve Working Groups, spesifikasyonu 2022'den beri tamamladı ve başlıca implementasyonlar zaten 2.0'ı destekliyordu
  • 2.0'dan itibaren evergreen model benimsendi; Candidate Recommendation belgesi sürekli olarak güncel tutuluyor
  • Her yeni sürüm yayımlandığında nihai tavsiye aşamasına taşımak yerine, mevcut tavsiye taslağı standart olarak kabul ediliyor

Wasm 2.0'ın başlıca özellikleri ve eklemeleri

  • Vektör komutları (SIMD): 236 yeni komut eklenerek modern CPU'ların 128 bit SIMD özelliklerinden yararlanılabiliyor; yüksek performanslı ses/video kodekleri, makine öğrenimi ve kriptografi gibi alanlarda verim sağlıyor
  • Bulk memory komutları: Bellek ve tabloların hızlı kopyalanması ve başlatılması için bir komut seti eklendi
  • Çoklu değer döndürme: Fonksiyonlar ve bloklar birden fazla değer döndürebildiği için çağrı kuralları iyileşiyor ve ek program dönüşümleri mümkün hale geliyor
  • Referans türleri: Fonksiyon referansları veya harici nesne işaretçileri (ör. JavaScript değerleri) opak birinci sınıf değerler olarak destekleniyor; tablolar bu referans değerleri için depolama alanı olarak kullanılabiliyor, tabloları işleyen komutlar ve çoklu tablo tanımları mümkün oluyor
  • Trap üretmeyen dönüşümler: Kayan noktalı sayıdan tamsayıya dönüşümde beklenmedik trap oluşmasını önleyen dönüşüm komutları eklendi
  • İşaret genişletme komutları: İşaretli tamsayıların bit genişliğini doğrudan artıran komutlar eklendi; böylece artık önceye göre bellek erişimi olmadan genişletme yapılabiliyor

Geriye dönük uyumluluk ve gelecek görünümü

  • Wasm 2.0, 1.0 ile tamamen uyumlu olduğu için mevcut programlar olduğu gibi çalışıyor
  • Wasm 3.0'ın da yakında yayımlanması planlanıyor

2 yorum

 
caniel 2025-05-10

WA!(SM)

 
GN⁺ 2025-05-10
Hacker News görüşleri
  • 2025 Mart ayında yapılan WASM 2.0 duyurusunu özetlemek gerekirse, 128 bit SIMD dahil 236 yeni vektör komutuyla video/ses codec’leri, makine öğrenimi ve kriptografi uygulamalarının performansı ciddi biçimde artırıldı; bulk memory komutlarıyla hızlı bellek kopyalama/başlatma desteği geldi; fonksiyonlar artık birden fazla sonuç döndürebiliyor, böylece daha hızlı çağrı kuralları ve daha az dolaylı başvuru sağlanıyor; reference types ile harici nesnelere (JavaScript değerleri gibi) yönelik işaretçiler birinci sınıf değer olarak ele alınıyor; birden çok türde tablo tanımlanabiliyor; ayrıca bit genişliği genişletme komutları ve beklenmedik trap üretmeyen kayan nokta dönüşümleri eklendiği için bu gerçekten büyük bir yükseltme
    • Rust+LLVM, ABI uyumluluğu sorunları nedeniyle çoklu sonuç döndürme desteğini pratikte henüz kullanamıyor; Clang tarafındaki durumu ise bilmiyorum
    • Vektör komutları (SIMD) tarafı bence fazla erken optimizasyon peşinde koşulduğu için gereksiz yere karmaşıklaşmış; onun yerine esnek boyutlu vektör önerisi kullanılsaydı daha zarif olurdu
    • Çoklu sonuç döndürme özelliği Common Lisp çalışma zamanı geliştirmesi için de çok yararlı olacaktır
    • Resmî gönderinin sonunda “yakında Wasm 3.0’ı tanıtacağız” yazdığına göre, gerçekten de Wasm 3.0 çok uzak görünmüyor
    • Mimariye bağımsız ve genel amaçlı bir ISA ile belirli CPU SIMD’lerini azami düzeyde kullanan bir ISA aynı anda var olamaz; birini seçmek gerekir. Mevcut Wasm2 SIMD komutlarının yeterince genel amaçlı olup olmadığını GitHub’daki rate limit yüzünden kontrol edemedim
  • WebAssembly spesifikasyonu oldukça okunabilir, ama spesifikasyonun tamamını okumak istemeyen yeni başlayanlara WebAssembly from the Ground Up adlı çevrimiçi kitabı öneririm. JavaScript ile derleyiciyi doğrudan kendiniz yazarak adım adım öğreniyorsunuz; yapı pratik yapmaya çok uygun. Ücretsiz örnekleri de var. Bu arada yazarlardan biri benim
    • Ada’yı kişisel olarak sevmemin sebeplerinden biri, JavaScript’te zahmetli olan U32 kontrol fonksiyonu kodlarının Ada’da subtype veya modüllerle çok daha temiz çözülebilmesi
    • WASM kodunu enstrümante ederek in-process debugging yapmanın mümkün olup olmadığını merak ediyorum; yani özel bir dili gerçek zamanlı olarak WASM’a çevirip, web üzerinde breakpoint ve bellek incelemesini tek seferde kurmak mümkün mü?
  • Son 1 yıldır WebAssembly çalışma zamanı geliştirirken spesifikasyonun katılığı ve iyi sağlanan testlerden çok etkilendim. Alışması biraz zaman alıyor ama alışınca gerçekten akıllıca tasarlanmış bir dil spesifikasyonu olduğu görülüyor. Belirsiz durumlarda spesifikasyondan doğrudan üretilen referans yorumlayıcı çok yardımcı oluyor ve tutarlılık doğrulaması için sunulan spesifikasyon testleri de son derece faydalı
  • Yakın zamanda Wasm Constant Time önerisi inactive durumuna taşındı. Gerçek çalışmanın büyük kısmı 2018’de yapılmıştı, ancak SIMD entegrasyonu ve resmî uzantı bütünleştirmesi ertelenmiş durumda. Birisi bu çok önemli işi devralmazsa tüm Wasm kriptografisi zamanlama saldırılarına karşı çok savunmasız kalacak
  • Wasm’ın WebAssembly kısaltması olduğu ama bir acronym olmadığı için büyük harfle WASM yazılmadığı notu ilginç geldi
    • O mantıkla WAsm olması gerekmiyor mu diye merak ettim
    • Aslında acronym olsa bile tamamen küçük harfle yazılan pek çok örnek var (ör. scuba, radar, laser)
    • Umarım tutar haha
  • Gerçekte çalışan WASM uygulamalarının bir listesini merak ediyorum. Fikir güzel ama biraz DAPP’ler gibi “sadece eğlencesine var olan şeyler” hissi veriyor. Gerçek örnekler görmek iyi olurdu
    • madewithwebassembly.com ve Awesome-WebAssembly-Applications GitHub deposunu öneririm. Gerçek WASM uygulamalarını iyi derlemiş kaynaklar
  • Bu WASM2 sürümü harika ama sabit boyutlu SIMD’nin (128 bit) eklenmesi biraz hayal kırıklığı yarattı. ARM SVE’de olduğu gibi derleyicinin cihaz performansına göre SIMD genişliğini ayarladığı esnek bir yaklaşım daha iyi olurdu
    • Ben ise tam tersine sabit boyutlu SIMD’nin daha fazla kullanım alanı açtığını düşünüyorum. Vektör komutları sabit boyutlu SIMD ile de görece kolay şekilde ikame edilebilir. SIMD her zaman zorunlu değil ama register boyutu sayesinde fırsatçı (opportunistic) vektörleştirmenin mümkün olduğu pek çok kullanım var; bu durumlarda oldukça faydalı olabilir
    • Sorunun kökü çok erken optimizasyon yapmak; bu SIMD meselesi de yalnızca değişken boyutlu vektör önerisi izlenmiş olsaydı çok daha zarif olurdu
  • C fonksiyonlarının bir değeri struct olarak döndürdüğünde bunun WASM’a derlenip derlenmediğini merak ediyorum
    • Mümkün, ama şu anda JS’ye “export” etmenin mümkün olmadığını biliyorum
  • WASM2 özelliklerini hâlihazırda uygulamış çalışma zamanları olup olmadığını merak ediyorum
    • Çoğu bunu aslında uzun zamandır uyguluyor. Wasm topluluğu ve çalışma grubu spesifikasyonu 2022 başında netleştirdi, başlıca implementasyonlar ise ondan da önce 2.0 özelliklerini sunuyordu. 3.0 da yakında resmileşecek ve bazı özellikler şimdiden feature flag arkasında mevcut
  • Web için bytecode eski bir hayaldi diye düşünüyorum. Bir C# geliştiricisi olarak Blazor’un daha ilk günlerden itibaren WASM’ı cesur biçimde öncülük ederek benimsediğini görmek etkileyiciydi. .NET, WASM üzerinde epey ileride ve bu 2.0 değişiklikleri için heyecanlıyım