2 puan yazan GN⁺ 2025-02-05 | 1 yorum | WhatsApp'ta paylaş

WebAssembly nedir?

  • WebAssembly, web tarayıcılarında güvenilmeyen istemci tarafı kodunu neredeyse yerel hızda çalıştırmak için tasarlanmış standartlaştırılmış bir komut kümesi ve bayt kodu biçimidir.
  • Emscripten'in C/C++'tan JavaScript'e derleyicisinden evrilmiştir; ilk aşamada LLVM IR'yi JavaScript'e dönüştürerek C ve C++ kodunun web üzerinde çalışmasını sağlamıştır.
  • Zamanla tarayıcı geliştiricileri, performans optimizasyonu için JavaScript'in basit bir alt kümesini oluşturmak üzere Emscripten projesiyle iş birliği yaptı ve bu daha sonra asm.js olarak standartlaştırıldı.
  • Ardından JavaScript'in ek yükünden kaçınmak için bağımsız bir bayt kodu biçimi tasarlandı; bu da Wasm oldu.
  • Son dönemde WebAssembly, tarayıcı dışındaki alanlarda da popülerlik kazanıyor; Fastly ve Shopify, WebAssembly motorlarını temel alan Edge Compute ve Functions ürünleri geliştiriyor.
  • WebAssembly, çok çeşitli kaynak diller tarafından hedeflenebilmesi sayesinde eklenti ekosistemleri kurmak için cazip bir platformdur.

Neden bir WebAssembly yorumlayıcısı?

  • Birçok yazılım mühendisi gibi, yeni bir yan proje başlatıp birkaç hafta sonra ilgisini kaybetme döngüsüne kapılmıştım.
  • Daha uzun süre boyunca emek verebileceğim, aynı zamanda bilgi işlem yığınının daha alt seviyelerine maruz kalmamı sağlayacak büyük bir projeye ihtiyacım vardı.
  • WebAssembly etrafındaki heyecan ilgimi çekti ve özel sistem çağrıları tasarlamaya imkân veren bir platform mühendisliği aracı olarak cazip göründü.

Semblance

  • WebAssembly Core Specification'a aşina olmak için bir WebAssembly yorumlayıcısı yazmaya karar verdim.
  • Projenin amacı öğrenmek olduğu için tüm opcode'ları uygulamayı ya da çekirdek test paketini geçmeyi planlamıyordum.
  • "Hello, World!" çalıştırabilirsem memnun olacaktım.

Sonuç

  • Proje büyük bir başarı olarak değerlendiriliyor. Opcode kapsamı tam olmasa da basit bir "Hello, World!" programını çalıştırabiliyor.
  • Kod dağınık, yavaş, bellek sızıntıları var ve kötü niyetli modüllere karşı savunmasız olabilir ama çalışıyor.
  • WebAssembly'nin çekirdek spesifikasyonu hakkında çok şey öğrendim ve bir mühendis olarak konfor alanımın dışına çıkabildim.
  • Artık Wasmtime gibi endüstriyel düzeyde çalışma zamanlarına katkıda bulunabilecek kadar WebAssembly bilgisine sahip olduğumu hissediyorum.

1 yorum

 
GN⁺ 2025-02-05
Hacker News görüşleri
  • Bir Wasm yorumlayıcısını Scheme ile yazma deneyimim var; başkalarının bunu doğrudan yazdığını görmek sevindirici. Wasm sanıldığından daha az zor ve tüm komutları uygulamak gerekmiyor; sadece keyif alacak kadar denemenizi tavsiye ederim

    • Yazara bir ipucu: spec-test içinde karmaşık biçimde metin tabanlı wasm bulunuyor, ancak wast2json dönüştürücüsünü kullanırsanız daha basit bir JSON açıklaması ve sıradan ikili wasm dosyaları elde edebilirsiniz
  • Acemi sorusu:

    • Yorumlayıcıyı kendiniz kodlamadığınızda nasıl hata ayıklama yapıldığını merak ediyorum
    • Dize opcode'larını fuzz etmenin ne kadar etkili olduğunu merak ediyorum
    • Sunucu tarafı WASM motorları ile tarayıcı tabanlı motorlar arasında pratikte ne kadar fark olduğunu ve birini diğerine dönüştürmenin ne kadar iş gerektirdiğini merak ediyorum
  • WASM'i doğrudan yorumlama hakkında ilginç bir makale buldum

  • İlginç bir yaklaşım ve harika bir iş

  • Wasm-C-API'yi standart arayüz olarak benimsemek iyi bir fikir olurdu diye düşünüyorum

    • Bu, çoğu Wasm çalışma zamanı tarafından benimsenen bir API (Wasmmer, V8, wasmi vb.); C ile yazıldığı için bu API'ye aşina geliştiriciler kolayca deneyebilir
    • Yazar Wasm'e aşinaysa Wasmer'e yama ya da iyileştirme katkısı da memnuniyetle karşılanır
  • Tartışmalı bir nokta:

    • İlk tail call komutlarını eklemeye ilginiz olup olmadığını merak ediyorum
    • WASM spesifikasyon sorumluları bunu "yüksek seviye" diyerek reddetti, ama C komitesi de Dennis Ritchie'nin önerisini reddetmişti. Rob Pike da Ritchie'nin yönünü destekliyor gibi görünüyor. Aksi olsaydı neden Golang'ı yapsındı? Tail call'lar yalnızca çağrı yüksek seviyeli olduğunda yüksek seviyelidir
  • Orca'ya göz atmanızı tavsiye ederim. Katkı sunmak için iyi bir fırsat olabilir: https://orca-app.dev

  • WebAssembly'yi derinlemesine inceleyip sıfırdan bir yorumlayıcı kurma sürecini görmek gerçekten çok güzel

  • Harika bir yazı; WASM uygulamasına geri dönme motivasyonu veriyor

  • Gerçekten çok güzel bir çalışma