WebAssembly veya Wasm, herhangi bir bilgisayar mimarisinde yürütülebilen programlar oluşturmaya yönelik bir ikili kod biçimidir.
Sistem, bir sanal makine ve bilgisayar kodunu C veya C++ gibi programlama dillerinden insan tarafından okunabilen .wat ve ikili .wasm biçimlerine çeviren bir derleyiciden oluşur.
WebAssembly'nin asıl amacı, bir tarayıcı içinde yerele yakın yürütme hızlarını etkinleştirerek programcıların web sayfaları için yüksek performanslı uygulamalar geliştirmelerini sağlamaktı. Ancak teknoloji artık tarayıcıların ötesine ve buluta dönüşüyor gibi görünüyor.
Bu kılavuz, bu gelişen teknoloji, güçlü ve zayıf yönleri ile gelecekteki potansiyeli hakkında bilmeniz gereken her şeyi size gösterir.
İçerik
- WebAssembly Nedir?
- WebAssembly Nasıl Çalışır?
- Örnek WebAssembly Uygulaması Nasıl Oluşturulur
- WebAssembly'nin Avantajları
- WebAssembly'nin Sınırlamaları
- WebAssembly vs Java
- WebAssembly ve JavaScript
- WebAssembly vs Docker vs Kubernetes
- Tarayıcının Ötesinde
- Wasm Kullanım Örnekleri
- Desteklenen Diller ve Çerçeveler Listesi
- WebAssembly Çalışma Zamanları ve Araçları Listesi
- Sonuç
WebAssembly Nedir?
WebAssembly sanal bir makinede çalışan ve farklı dillerin derleyebileceği bir ikili kod biçimidir. Taşınabilir olacak şekilde tasarlanmıştır ve bir web tarayıcısında veya bir sunucu uygulaması olarak çalışabilir.
İlk olarak 2017'de piyasaya sürülen WebAssembly, 3'dan beri bir W2019C önerisidir ve Mozilla, Google, Microsoft, Red Hat ve daha pek çoğu dahil olmak üzere çok sayıda katkıda bulunanlar tarafından sürdürülmektedir.
Orijinal hedef, tarayıcı içindeki C/C++ uygulamalarında bulacağınız gibi yerel yürütme hızlarına yakın bir şey geliştirmekti. Ayrıca, geriye dönük uyumlu ve JavaScript uyumlu, güvenli, açık standart, hata ayıklanabilir ve sürümsüz bir web standardı olması amaçlanmıştır.
WebAssembly Nasıl Çalışır?
WebAssembly, .wasm ikili veya .wat metin biçimlerinde derlenmiş bilgisayar kodunu çalıştırmak için bir tarayıcı veya sunucu ortamına yerleştirilebilen Java veya JavaScript gibi bir çalıştırma zamanı motoru olarak tasarlanmıştır.
WebAssembly yürütmesi için kod yazmak için geliştirici, programı desteklenen sayısız dilden herhangi birinde yazar. Ardından, AOT (Zamanın Önünde) veya JIT (tam zamanında) bir WebAssembly derleyicisi kullanarak derleyin.
Bu kod, yürütme ortamındaki çoğu işi yapabilir, ancak bir tarayıcının DOM nesnelerine erişemez veya bunları değiştiremez. Bu tür herhangi bir etkileşim JavaScript'ten geçmelidir.
Örnek WebAssembly Uygulaması Nasıl Oluşturulur
Web tarayıcısı için basit bir Wasm uygulaması oluşturmak, aşağıda görebileceğiniz gibi sadece birkaç adımla mümkündür:
- Indirin ve yükleyin Emscripten SDK'sı.
- Örneğinizi yazın merhabadünya.c kodlayın veya isterseniz C++/Rust'ta yapın.
- koşmak emcc merhabaworld.c -s WASM=1 -s merhabaworld.html kodu Emscripten ile WebAssembly'ye derlemek için bir terminalde. İhtiyacınız olan Wasm ikili, HTML ve JavaScript dosyalarını (yapıştırıcı kodu) oluşturacaktır.
- Helloworld.html sayfasını web tarayıcınız aracılığıyla sunun.
WebAssembly'nin Avantajları
WebAssembly ve ilgili teknolojileri benimsemek için birçok neden vardır ve bunlar şunları içerir:
- Yerel Performansa Yakın – WebAssembly, C ve C++ gibi düşük seviyeli dillere benzer performanslar sunacak kadar düşük seviyeli bir tasarıma sahiptir.
- Güvenlik – Sistem, sınırlı sistem erişimi ile sanal bir ortamda izole edilerek güvenli olacak şekilde tasarlanmıştır.
- Açık Standart – Birçok kuruluş ve kişi WebAssembly'ye katkıda bulunuyor ve bu resmi bir W3C tavsiyesidir.
- Hafif – WebAssembly, sanal bir makinede yürütülecek ikili kodda derlenir. Bu kod taşınabilirdir ve sistem dosyalarına ihtiyaç duymaz veya birlikte gelmez.
- Çoklu Dil Desteği – 50'den fazla dil WebAssembly'de derlenebilir.
- Platform bağımsız – WebAssembly sanal makinesi, her mimarinin aynı çalışma zamanı ortamını sunması için tasarlanmıştır. Bir geliştiricinin tek yapması gereken WebAssembly için kod yazmaktır.
WebAssembly'nin Sınırlamaları
- Çalışma devam ediyor – Standart hala geliştirme aşamasındadır ve bu nedenle pek çok özellik ve iyileştirme henüz yapılmamıştır.
- Çöp toplama yok – WebAssembly, yakında uygulanabilmesine rağmen hala çöp toplama özelliğinden yoksundur.
- DOM erişimi yok – Bir web tarayıcısının DOM'sine doğrudan WebAssembly'den erişemezsiniz, JavaScript'ten geçmeniz gerekir.
WebAssembly vs Java
Java, WebAssembly'nin en eski uygulamasıdır. Bir kez yazılabilen, her yerde çalıştırılabilen bir dil olarak tasarlandı, ancak bu süreçte birçok sorun geliştirdi.
Java'da olduğu gibi, WebAssembly de kodunu yürütmek için RE (Çalışma Zamanı Ortamı) kullanır, ancak Java'dan farklı olarak WebAssembly'ı kendi seçtiğiniz dilde yazabilirsiniz.
WebAssembly ve JavaScript
WebAssembly, tıpkı tarayıcıda veya diğer ana bilgisayar ortamında yürütülür. JavaScript. Ancak JavaScript'in yürütme ortamına metin biçiminde teslim edildiği ve tam zamanında derlendiği durumlarda, WebAssembly hem metin hem de ikili biçimlere sahiptir.
Web tarayıcılarında JavaScript'in DOM'a erişimi vardır, WebAssembly'nin ise erişimi yoktur. Ancak, yürütme hızı söz konusu olduğunda WebAssembly, yerel kod yürütme hızlarına yakın olmasıyla JavaScript'i geride bırakır.
Hız, WebAssembly'nin parladığı yerdir ve bu kadar çok kullanım için ideal olmasının nedenidir. JavaScript kullanarak WebAssembly'ı bir tarayıcıya yükleyebilirsiniz ve iki kod birlikte çalışabilir ve kaynakları paylaşabilir.
WebAssembly vs Docker vs Kubernetes
Docker ve Kubernetes, bulut bilişimi güçlendiren popüler teknolojilerden ikisidir. Docker, geliştiricilerin bir uygulamayı tüm sistem bağımlılıklarıyla tek bir pakette paketlemesini sağlayan bir kapsayıcı teknolojisidir. Bu, uygulamayı herhangi bir bulut ortamında bir veya daha kısa sürede dağıtmayı kolaylaştırır.
Kubernetes ise Docker, CRI-O, containerd ve herhangi bir Kubernetes CRI (Container Runtime Interface) uygulaması gibi kapsayıcılı uygulamaları yönetmek ve dağıtmak için açık kaynaklı bir sistemdir. Kubernetes, bulut dağıtımlarını birden çok sunucu veya sanal makine arasında ölçeklendirmeyi de kolaylaştırır.
Bu açıdan WebAssembly, Docker'a daha çok benzer ve Kubernetes kullanılarak kapsayıcılı bir bulut uygulaması olarak çalıştırılabilir. Ayrıca Docker'a göre birçok avantaj sunar, ancak muhtemelen onun yerini almayacak.
Tarayıcının Ötesinde
Başlangıçta, web sunucuları vardı. Tam bir makineyi sunucu olarak ayırmanız gerekiyordu. Ardından, bir sunucunun yalnızca bir veya daha fazla CPU iş parçacığında çalışmasına izin veren sanal makineler veya VM'ler vardı. Yine de, özel bir VM'niz olması gerekiyordu.
Cloud computing uygulamaları kapsayıcı hale getirerek sunucuları yalnızca ihtiyaç duyulduğunda başlatmayı ve çalıştırmayı mümkün kıldı. Bu, yalnızca kullandığınız kadar ödemek zorunda olduğunuz için maliyetlerde bir azalmaya yol açtı - artık özel makineler yok. Ama hala birkaç sorun var.
İlk olarak, liman işçisi dosyaları birkaç Gigabayt büyüklüğünde olabilir ve bu, başlatma ve diğer yönetim sorunlarında küçük bir gecikme anlamına gelir. Ancak benzer bir Wasm dosyası, önceden derlenmiş bir ikili dosya olduğundan yalnızca birkaç MB büyüklüğünde olabilir. Bu, ona Docker'dan çok daha hızlı bir başlatma süresi sağlar ve zaman açısından kritik bazı uygulamalar için mükemmeldir.
İkinci olarak, WebAssembly'nin tasarımı, geliştiricinin sistem kaynaklarını yönetmesi ve ataması gerekmediği, dilediği programlama dilini kullanarak konuya kolayca ulaşabileceği anlamına gelir.
Bu özellikler, WebAssembly'ı bulut mikro hizmetlerini çalıştırmak için ideal kılar, ancak Docker uygulamaları, işletim ortamı ve dosya sistemi üzerinde daha fazla kontrol gerektiren uygulamalar için hala tercih edilir.
Daha fazla bilgi için, projeler gibi WasmCloud ve WasmEdge WebAssembly'ı uygulanabilir bir bilgisayar platformuna dönüştürüyorlar.
Wasm Kullanım Örnekleri
Kendine özgü doğası göz önüne alındığında, WebAssembly için birçok kullanım durumu vardır. Üç ana gruba ayrılabilirler; tarayıcı içi, tarayıcı dışı ve karma kurulumlar.
Tarayıcı içi tür kendi kendini açıklayıcıdır ve tarayıcı dışı, çoğunlukla sunucu, IoT ve bulut dağıtımlarını ifade ederken, hibrit, ikisinin bir karışımını ifade eder.
Aşağıda Wasm'in mükemmel olabileceği kullanım durumlarına bir bakış verilmiştir:
- Zaten var olan yüksek performanslı kod – Sadece WebAssembly'ye taşıyabileceğiniz eski ama harika kod.
- Yeni yüksek performanslı kod – Sıfırdan tasarlamanız ve uygulamanız gerekenler.
- Masaüstü uygulamalarını web'e taşıma – Bu, yeni bir tür web tabanlı masaüstü çözümlerinin önünü açabilir, örneğin: web tabanlı video düzenleme.
- Cloud computing – Yeni fırsatlar için Docker ve Kubernetes ile birlikte çalışmak.
Aşağıda Wasm'in başarılı olabileceği belirli uygulamalara ve senaryolara bir bakış verilmiştir:
- Video ve resim düzenleme
- Oyun tasarımı
- AI uygulamaları
- Sanal ve artırılmış gerçeklik uygulamaları
- Müzik uygulamaları
- P2P uygulamaları
- Sunucu tarafı uygulamalar
- Bulut/küme hesaplamaları
- Bilgisayar destekli tasarım
- işletim sistemi platformu simülasyonu
- Şifreleme
- Yerel web sunucusu
- Uzak masaüstü uygulamaları
- Bilimsel görselleştirmeler
- Akıllı telefonlarda hibrit yerel uygulamalar
- IoT cihazlarında
Desteklenen Diller ve Çerçeveler Listesi
50'den fazla dil WebAssembly için derlenir ve işte en popüler olanlardan bazıları:
- C
- C + +
- R
- Yakut
- Hızlı
- Go
- Kotlin
- Rust
- PHP
- blazor – .NET geliştiricileri için bir çerçeve.
- Jweb Montajı – Java bayt kodu ve JRuby, Jython, Groovy, Scala ve Kotlin gibi ilgili diller için derleyici.
- porsukağacı – WebAssembly kullanarak çok iş parçacıklı web uygulamaları oluşturmak için bir Rust çerçevesi.
- Montaj Komut Dosyası – WebAssembly kodu oluşturmak için özel olarak tasarlanmış bir dil.
- Tahıl – Güçlü bir şekilde yazılmış işlevsel bir dil.
- Motoko
Daha fazla dil bulabilirsiniz okuyun.
WebAssembly Çalışma Zamanları ve Araçları Listesi
- Tüm büyük tarayıcılarda Wasm desteği vardır
- Piyodür – Pandas, NumPy, SciPy dahil olmak üzere Python bilimsel yığınıyla tarayıcıda Python çalışma zamanı.
- hava
- ağırlık – Mikro hizmetler ve web uygulamaları için
- Öyle miydim – Modüler sistem arayüzü
- WasmZamanı – Hızlı ve güvenli WebAssembly çalışma zamanı.
- wasmer
- Parlıyor
- wasmCloud – Bulut ortamı
- Krustlet – Wasm'ı çalıştırmak için Rust ile yazılmış Kubernetes kublete.
- WasmEdge – Bulut ve uç çalışma zamanı ortamı
Sonuç
WebAssembly'deki yolculuğumuzun ve onun bilgi işlem için sahip olduğu şeylerin sonuna geldik. Ve gördüğünüz gibi, birçok vaat içeriyor.
Yine de devam eden bir çalışmadır, ancak sürekli gelişme halindedir. Ve ilgileniyorsanız, daha fazla bilgi bulabilirsiniz okuyun, okuyun, ve okuyun.