Yirmi yıldır, bir web tarayıcısında yerel olarak kullanılabilecek tek bir programlama diline sahibiz: JavaScript. Üçüncü taraf ikili eklentilerin yavaş ölümü, Java ve Flash’ın ActionScript’i gibi diğer dilleri web geliştirme için birinci sınıf vatandaşlar olarak dışladı. CoffeeScript gibi diğer web dilleri yalnızca JavaScript’e derlenir.
Ama şimdi yeni bir olasılığımız var: WebAssembly veya kısaca Wasm. WebAssembly, web uygulamaları için yerele yakın performans vaat eden küçük, hızlı bir ikili biçimdir. Artı, WebAssembly herhangi bir dil için bir derleme hedefi olacak şekilde tasarlanmıştır, JavaScript bunlardan sadece biridir.
Artık her büyük tarayıcı WebAssembly’yi desteklediğinden, WebAssembly olarak derlenebilecek web için istemci tarafı uygulamaları yazmayı ciddi şekilde düşünmeye başlamanın zamanı geldi.
WebAssembly uygulamalarının amaçlanmadığını belirtmekte fayda var. yer değiştirmek JavaScript uygulamaları—en azından henüz değil. Bunun yerine, WebAssembly’yi bir Arkadaş JavaScript’e. JavaScript’in esnek olduğu, dinamik olarak yazıldığı ve insan tarafından okunabilen kaynak koduyla teslim edildiği durumlarda, WebAssembly yüksek hızlıdır, güçlü bir şekilde yazılmıştır ve kompakt bir ikili format aracılığıyla teslim edilir.
Geliştiriciler, oyunlar, müzik akışı, video düzenleme ve CAD uygulamaları gibi performans açısından yoğun kullanım durumları için WebAssembly’ı düşünmelidir. Birçok web hizmeti, örneğin Google Earth. Figmaortak bir çizim ve diyagram oluşturma uygulaması, WebAssembly’ye döndü WebAssembly nispeten yeniyken bile yükleme sürelerini ve yürütme hızını azaltmak.
WebAssembly nasıl çalışır?
W3C tarafından geliştirilen WebAssembly, yaratıcılarının sözleriyle bir “derleme hedefi”dir. Geliştiriciler WebAssembly’yi doğrudan yazmazlar; seçtikleri dilde yazarlar ve bu dil daha sonra WebAssembly bayt kodunda derlenir. Bayt kodu daha sonra istemcide (genellikle bir web tarayıcısında) çalıştırılır ve burada yerel makine koduna çevrilir ve yüksek hızda yürütülür.
WebAssembly kodunun yüklenmesi, ayrıştırılması ve yürütülmesi JavaScript’ten daha hızlıdır. WebAssembly bir web tarayıcısı tarafından kullanıldığında, Wasm modülünü indirmenin ve kurmanın hala ek yükü vardır. Daha büyük Wasm projeleri için bu modüller birkaç megabayta kadar çalışabilir, bu nedenle bu gecikmeler önemli olabilir. Ancak diğer her şey eşit olduğunda, WebAssembly daha hızlı çalışır.
WebAssembly ayrıca, şu anda JavaScript için mevcut olan güvenlik modellerinin aynısını temel alan korumalı bir yürütme modeli de sağlar. Wasm uygulamaları, üzerinde çalıştıkları web sayfasının DOM’si de dahil olmak üzere korumalı alanın dışındaki hiçbir şeye doğrudan erişemez. Makinenin geri kalanıyla olan tüm etkileşimler, WebAssembly Sistem Arayüzü gibi ABI’leri kullanmalıdır (ÖYLE MİYDİM). WASI, dosyalara, ağlara, sistem saatine ve programlarda sıklıkla ihtiyaç duyulan diğer sistem hizmetlerine kontrollü erişim sağlar.
Şu anda WebAssembly’ı web tarayıcılarında çalıştırmak en yaygın kullanım durumudur, ancak WebAssembly’nin web tabanlı bir çözümden daha fazlası olması amaçlanmıştır. Wasmer projesi, WebAssembly uygulamalarını sunucu tarafında çalıştırır, tıpkı Node.js çalışma zamanının JavaScript’i tarayıcının dışında çalıştırmasına benzer şekilde.
WebAssembly kullanım örnekleri
WebAssembly için en temel kullanım durumu, tarayıcı içi yazılım yazma hedefidir. WebAssembly’de derlenen bileşenler, çeşitli dillerden herhangi birinde yazılabilir; son WebAssembly yükü daha sonra JavaScript aracılığıyla istemciye teslim edilir.
WebAssembly, bir dizi performans açısından yoğun, tarayıcı tabanlı kullanım örnekleri akılda: oyunlar, müzik akışı, video düzenleme, CAD, şifreleme ve görüntü tanıma, bunlardan sadece birkaçı.
Daha genel olarak, belirli WebAssembly kullanım durumunuzu belirlerken bu üç alana odaklanmak öğreticidir:
- Hedeflenebilir bir dilde zaten var olan yüksek performanslı kod. Örneğin, halihazırda C ile yazılmış bir yüksek hızlı matematik fonksiyonunuz varsa ve bunu bir web uygulamasına dahil etmek istiyorsanız, onu bir WebAssembly modülü olarak dağıtabilirsiniz. Uygulamanın performans açısından daha az kritik, kullanıcıya yönelik bölümleri JavaScript’te kalabilir.
- JavaScript’in ideal olmadığı durumlarda sıfırdan yazılması gereken yüksek performanslı kod. Daha önce, biri kullanmış olabilir asm.js Böyle bir kod yazmak için. Yine de yapabilirsiniz, ancak WebAssembly daha iyi bir uzun vadeli çözüm olarak konumlanıyor.
- Bir masaüstü uygulamasını bir web ortamına taşıma. asm.js ve WebAssembly için teknoloji demolarının çoğu bu kategoriye girer. WebAssembly, HTML aracılığıyla sunulan bir GUI’den daha iddialı uygulamalar için bir alt tabaka sağlayabilir. demolarına bakın WebDSP ve Tarayıcıda Windows 2000iki örnek için.
Performans sınırlarını zorlamayan mevcut bir JavaScript uygulamanız varsa, WebAssembly’nin geliştirmesinin bu aşamasında kendi haline bırakmak en iyisidir. Ancak bu uygulamanın daha hızlı çalışmasına ihtiyacınız varsa, WebAssembly yardımcı olabilir.
WebAssembly dil desteği
WebAssembly doğrudan yazılmak için tasarlanmamıştır. Adından da anlaşılacağı gibi, üst düzey, insan dostu bir programlama dilinden çok, makinenin tüketmesi için bir montaj dili gibidir. WebAssembly, LLVM dil derleyici altyapısı tarafından oluşturulan ara temsile (IR) C veya Java’dan daha yakındır.
Bu nedenle, WebAssembly ile çalışmak için çoğu senaryo şunları içerir: üst düzey bir dilde kod yazmak ve bunu WebAssembly’ye dönüştürmek. Bu, üç temel yoldan herhangi biriyle yapılabilir:
- Doğrudan derleme. Kaynak, dilin kendi derleyici araç zinciri aracılığıyla WebAssembly’ye çevrilir. Rust, C/C++, Kotlin/Native ve D artık bu dilleri destekleyen derleyicilerden Wasm yaymak için yerel yollara sahiptir.
- Üçüncü taraf araçları. Dilin araç zincirinde yerel Wasm desteği yoktur, ancak Wasm’a dönüştürmek için üçüncü kısım bir yardımcı program kullanılabilir. Java, Lua ve .Net dil ailesinin tümü bunun gibi bir miktar desteğe sahiptir.
- WebAssembly tabanlı yorumlayıcı. Burada, dilin kendisi WebAssembly’ye çevrilmez; bunun yerine, WebAssembly’de yazılmış dil için bir yorumlayıcı, dilde yazılmış kodu çalıştırır. Bu en hantal yaklaşımdır, çünkü yorumlayıcı birkaç megabayt kod olabilir, ancak dilde yazılmış mevcut kodun değişmeden çalışmasına izin verir. Python (örneğin PyScript yoluyla) ve Ruby’nin her ikisinin de Wasm’a çevrilmiş tercümanları vardır.
WebAssembly özellikleri
WebAssembly henüz başlangıç aşamasındadır. WebAssembly araç zinciri ve uygulaması, üretim teknolojisinden çok kavram kanıtına daha yakındır. Bununla birlikte, WebAssembly’nin sorumluları, bir dizi girişim yoluyla WebAssembly’yi daha kullanışlı hale getirmeye odaklanmışlardır:
Çöp toplama ilkelleri
WebAssembly, çöpten toplanmış bellek modellerini kullanan dilleri doğrudan desteklemez. Lua veya Python gibi diller, yalnızca özellik kümeleri kısıtlanarak veya tüm çalışma zamanını bir WebAssembly yürütülebilir dosyası olarak gömerek desteklenebilir. Ama devam eden bir çalışma var dil veya uygulamadan bağımsız olarak çöpten toplanan bellek modellerini destekler.
diş açma
İş parçacığı oluşturma için yerel destek, Rust ve C++ gibi dillerde ortaktır. WebAssembly’de iş parçacığı desteğinin olmaması, WebAssembly hedefli yazılım sınıflarının tamamının bu dillerde yazılamayacağı anlamına gelir. bu WebAssembly’ye iş parçacığı ekleme önerisi ilhamlarından biri olarak C++ iş parçacığı modelini kullanır.
Toplu bellek işlemleri ve SIMD
Toplu bellek işlemleri ve SIMD (tek komut, çoklu veri) paralellik, makine öğrenimi veya bilimsel uygulamalar gibi veri yığınlarını parçalayan ve tıkanmayı önlemek için yerel CPU hızlandırmasına ihtiyaç duyan uygulamalar için olmazsa olmazdır. Bu yetenekleri yeni operatörler aracılığıyla WebAssembly’ye eklemek için öneriler masada.
Üst düzey dil yapıları
WebAssembly için düşünülen diğer birçok özellik, diğer dillerdeki üst düzey yapılarla doğrudan eşleşir.
- istisnalar WebAssembly’de öykünebilir, ancak WebAssembly’nin komut seti aracılığıyla yerel olarak uygulanamaz. İstisnalar için önerilen plan, sırayla WebAssembly’de derlenen diğer diller tarafından kullanılabilen C++ istisna modeliyle uyumlu istisna ilkellerini içerir.
- Referans türleri ana bilgisayar ortamına referans olarak kullanılan nesnelerin etrafından dolaşmayı kolaylaştırır. Bu, çöp toplamayı ve bir dizi diğer üst düzey işlevi WebAssembly’de uygulamayı kolaylaştırır.
- Kuyruk aramalarıbirçok dilde kullanılan bir tasarım deseni.
- Birden çok değer döndüren işlevlerörneğin, Python veya C#’daki demetler aracılığıyla.
- İşaret uzatma operatörleri, kullanışlı bir düşük seviye matematik işlemi. (LLVM bunları da destekler.)
Hata ayıklama ve profil oluşturma araçları
Aktarılan JavaScript ile ilgili en büyük sorunlardan biri, aktarılan kod ile kaynak arasında ilişki kurulamaması nedeniyle hata ayıklama ve profil oluşturma zorluğuydu. WebAssembly ile benzer bir sorunumuz var ve bu sorun benzer şekilde ele alınıyor (kaynak harita desteği). Proje notuna bakın planlı takım desteği.
Telif Hakkı © 2022 IDG Communications, Inc.
Kaynak : https://www.infoworld.com/article/3291780/what-is-webassembly-the-next-generation-web-platform-explained.html#tk.rss_all