WebAssembly, Büyük Web ve JavaScript’in Geleceği
WebAssembly web tarayıcıların çalıştırabilmesi için ortak, düşük seviyeli bir yazılım dili, insan gözüyle anlaşılabilir bir düz yazı biçimi ve sanal makinelerin anlayacağı bir ikili kod biçimi ortaya koymaktadır. Düşük seviyeli bir programlama dili olan WebAssembly, Google, Microsoft ve Mozilla vakfı tarafından WebAssembly Community Group altında desteklenmekte ve dizayn edilmektedir. Halihazırda sadece JavaScript dilinden anlayan Web tarayıcılar, ileride yeni bir dil olan WebAssembly’yi de anlayacaklar! Web için gizli bir devrimin inşa edildiği bu projeden bilgim ölçüsünde bilgiler vermek istiyorum.
WebAssemby (WASM) standartlaştırma süreci devam eden bir ara programlama dilidir. (Bkz. Intermediate Languages). WebAssemby söz dizimi diğer düşük seviyeli dillere benziyor. Assembly veya Java’nın bayt kodu gibi.
JavaScript standartları olan ve şu anda web tarayıcılarda baskın olan bir programlama dili. WebAssembly Web tarayıcıların anlayacağı bir dil olacak fakat WebAssembly kodlarını doğrudan yazmayacağız, kendi kodumuzu ona derleyeceğiz! Tabi ki istersek yazabiliriz ama asıl olarak WebAssembly, JavaScript haricindeki yazılım dilleri için bir dönüşüm dili olmayı hedefliyor. Yani, herhangi bir yazılım dilindeki kodları WebAssembly’e derlediğimizde dil bağımsız bir Web ortaya çıkmış olacak. İsteyen istediği bir yazılım dili ile Web uygulaması geliştirebilecek!
JavaScript’in Web tarayıcılarda çalışabilir tek dil olmasından dolayı diğer diller sadece ara kaynak çözümlerle Web tarayıcılarda yer almaya çalışmaktadır. Scala.js, Ruby için Opal ve Java için Google GWT teknolojileri bunlara iyi örneklerden. Bu örneklerde x bir dilde yazılan kodlar JavaScript karşılığına dönüştürülerek Web tarayıcılarda dolaylı yoldan çalışma olanağı elde etmektedir. Bu durumu yine, CoffeScript, TypeScript ve EcmaScript 2015 için görmekteyiz. Örneğin EcmaScript 6 dil özelliklerini tüm tarayıcılar henüz desteklemediği için ara dönüştürücüler ( babel, treacuer gibi) kullanılarak yazılan kodlar tarayıcıların anlayacağı EcmaScript 5’e çevrilmektedir. Bu dönüştürücüler için genel zorluk ise, yüksek seviyeli bir dilden yüksek seviyeli bir dile (JavaScript) dönüşümün kolay olmayışıdır. Düşük seviyeli bir dil olan WebAssembly ise basit dil ögeleri barındıracağından dönüştürüm işlemi kolaylaşacak ve tarayıcı ortamları diğer dillere de açılmış olacaktır.
WebAssembly için elde edilecek bazı kazanımları listelemek istiyorum;
- Ayıklama zamanı kazanımı
- JavaScript kodları Web tarayıcılara ilk yüklendiğinde bir ayıklama (parsing) süreci geçiriyor. WebAssembly çalışma zamanında kaybedilen bu süreyi ortadan kaldırıyor. Çünkü zaten ortada derlenmiş, derleme zamanında terbiye edilmiş bir kod bulunacak.
- Statik tip sistemi kazanımı
- JavaScript dinamik tip sistemine tabidir. Verilerin tipleri çalışma zamanında belirlenir fakat bu performans açısından bir maliyettir. Oysa WebAssembly’de tipler yerli yerincedir ve çalıştırılırken tip bilgisi hali hazırdır. Dolayısıyla tip sisteminden kaynaklı etkiler engellenmiş olur.
- Dosya boyutu ve parçalı yükleme kazanımları
- WebAssembly kodları bir ikili (binary) temsil biçimine de sahip olacak. Böylece WebAssembly modülleri daha fazla sıkıştırılabilir olacak. Bu da boyut ve kodun tarayıcıya yüklenme süresi bakımından avantaj anlamına geliyor. Bunun yanında Web tarayıcıların WebAssembly modüllerini parça parça (stream) halde yükleyebilmesi hedeflenmektedir. Böylece tam yükleme olmadan da WebAssembly kodları çalıştırılmaya başlanabilecektir.
- Optimizasyon tekniklerine açıklık kazanımı
- WebAssembly basitliği ve tip bilinirliğinden dolayı, gerek derleme zamanı, gerekse de çalışma zamanındaki kod iyileştirme tekniklerine JavaScript’e göre daha açıktır. Bu tabiki çok önemli bir performans kazanımı olacaktır.
WebAssembly www’yi daha kapsayıcı ve kucaklayıcı hale getirerek Büyük Web‘i inşa edecek. Şu anda WebAssembly takımı C ve C++ dillerinden WebAssebly dönüşümü için bir derleyici yazmayla ilgileniyor. Tabiki ilerleyen süreçlerde diğer yazılım dilleri için geliştirici gruplarının WebAssembly için çalışmalarını göreceğiz.
Peki sizce bu durumda JavaScript’i nasıl bir gelecek bekliyor? Düşüncelerinizi yorum olarak bekliyorum.
- Yararlanılan kaynaklar
-
- https://brendaneich.com/2015/06/from-asm-js-to-webassembly/
- https://kripken.github.io/talks/wasm.html#/
- https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6#.v7l0mnl8h
- https://github.com/WebAssembly/design/blob/master/README.md
- http://www.hanselman.com/blog/JavaScriptIsWebAssemblyLanguageAndThatsOK.aspx
- https://www.w3.org/community/webassembly/
Bu kaynakların yanında WebAssembly mail grubundan da faydalanabilirsiniz. public-webassembly@w3.org
Tekrar görüşmek dileğiyle.
Tag:bigweb, javascript, wasm, webassembly
3 Comments
Javascript uzun yıllar ölecek gibi değil desktop ve native mobil app yazılmaya dahi başlandı ve güzel işler çıkıyor.
WebAssembly çıktığında ilk işlerden biri js convert WebAssembly olacaktır diye düşünüyorum.
node.js gibi…
Güzel bir girişim. Ancak javascript ölmez. üstelik bu kadar çok standard olmuş kütüphane varken. büyük ihtimal developerlar javascriptle yazmaya devam edecek. javascripti webassembly’ye çevireceğiz. Ayrıca diğer diller javascriptte zaten hali hazırda olan pek çok özelliği kendilerine eklemek zorunda olacaklar. En basitinden DOM access. Bu durumda javascript maça 5-0 önden başlıyor diyorum.
Yeni trend bu sanırım. Ve hepsininde ortak bahanesi performans ve güvenlik.
Peki soruyorum. Neden buna ihtiyac var?
Bugüne kadar eksik olan neydi?
Ve bir sürü bence gereksiz script türü türedi hangisini gerçek bir projede kullandınız.
Hepsi bi yana basit kurumsal sitesi olan küçük bir işletme javascript kullanmayacak mı?
Sürekli birşeyler çıkıyor ama elde birşey yok..