İçeriğe atla

WebAssembly

Vikipedi, özgür ansiklopedi
WebAssembly
WebAssembly Logo.svg
Paradigmasıyapısal; yığın makinesi[1]
TasarımcıW3C
Geliştirici
İşletim sistemiÇapraz platform

WebAssembly (bazen Wasm olarak da kısaltılır), yürütülebilir programlar [2] için taşınabilir bir ikili kod biçimine karşılık gelen bir metin biçimidir. Bunun yanı sıra bu tür programlar ve bunların ana bilgisayar ortamı arasındaki etkileşimleri kolaylaştırmak için yazılım arabirimlerini de ifade eder.[3][4][5][6]

WebAssembly'nin temel amacı, web sayfalarında yüksek performanslı uygulamaları mümkün hale getirmektir. Ancak bunun sadece Web'de kullanılacağına dair bir varsayımda bulunmaz veya Web'e özgü özellikler sağlamaz. Bu nedenle diğer ortamlarda da kullanılabilir.[7] Açık bir standarttır [8][9] ve herhangi bir işletim sistemindeki herhangi bir dili desteklemeyi amaçlar.[10] Pratikte zaten popüler dillerin tümü WebAssembly'yi az da olsa desteklemektedir.

WebAssembly ilk olarak 2015 (2015) yılında açıklandı ve ilk olarak Mart 2017 (2017-03) yayınlandı. 5 Aralık 2019'da World Wide Web Konsorsiyumu önerisi oldu.[11][12][13] 2021'de ACM SIGPLAN'dan Programlama Dilleri Yazılım Ödülü'nü aldı.[14] World Wide Web Konsorsiyumu (W3C), Mozilla, Microsoft, Google, Apple, Fastly, Intel ve Red Hat'in desteğiyle standartlarını korumaktadır.

WebAssembly ilk olarak 2015'te duyuruldu. Unity'nin Angry Bots'unun Firefox, Google Chrome ve Microsoft Edge'de yürütülmesiyle de ilk gösterimi yapıldı. WebAssembly'nin öncü teknolojiler Mozilla'dan asm.js ve Google Native Client idi ve ilk uygulama asm.js özellik kümesine dayanıyordu. asm.js teknolojisi zaten yerel kod yürütme hızlarına yakın [15][16] bir hız sağlar ve WebAssembly'yi desteklemeyen veya güvenlik nedeniyle devre dışı bırakılmış tarayıcılar için uygun bir alternatif olarak kabul edilebilir.

Mart 2017'de minimum uygulanabilir ürün (MVP) tasarımının bittiği ilan edildi ve önizleme aşaması sona erdi. Eylül 2017'nin sonlarında Safari 11, piyasaya WebAssembly desteğiyle sürüldü. WebAssembly Çalışma Grubu, Şubat 2018'de Temel Spesifikasyon, JavaScript Arayüzü ve Web API için üç genel çalışma taslağı yayınladı.

Chrome 75 Haziran 2019'da, WebAssembly iş parçacıkları varsayılan olarak etkinleştirilmiş olarak piyasaya sürüldü.[17]

Nisan 2022'den bu yana, WebAssembly 2.0 taslak durumundadır.[18][19] Bu bir özellik değişikliği değildir. Bazı uzantıları ana sürüme entegre etmek içindir.

WebAssembly amacı başlangıçta web tarayıcısında yerel kod yürütme hızına yakın bir hız sağlamak olsa da, bunun dışında başka alanlarda da önemli hale gelmiştir.[20][21] WebAssembly'nin çalışma zamanı ortamları (RE), ana bilgisayar uygulamalarına yerleştirilebilen düşük seviyeli sanal yığın makineleri (JVM veya Flash VM'ye benzer) olduğundan, bazıları Wasmtime ve Wasmer gibi bağımsız çalışma zamanı ortamlarının bir yolunu buldu.[9][10]

İnternet tarayıcıları

[değiştir | kaynağı değiştir]

Mozilla, Kasım 2017'de WebAssembly Edge 16'da varsayılan olarak etkinleştirildikten sonra "tüm büyük tarayıcılarda" desteği açıkladı. Bu desteğe, iOS ve Android için mobil web tarayıcıları da dâhildir. (Ekim 2022 (2022-10) itibarıyla), yüklü tarayıcıların %96'sı WebAssembly'yi (sürüm 1.0) destekler. Daha eski tarayıcılar için Wasm, bir JavaScript polyfill tarafından asm.js'ye de derlenebilir.

WebAssembly uygulamaları genellikle önceden (AOT) veya tam zamanında (JIT) derleme kullanır. Ama bir yorumlayıcı da kullanabilir. İlk uygulamalar web tarayıcılarına yönelik geliştirilmiş olsa da, Wasmer,[10] Wasmtime [22] veya WAMR, wasm3, WAVM ve diğerleri dahil olmak üzere genel amaçlı kullanım için tarayıcı olmayan uygulamalar da vardır.[23]

WebAssembly yürütülebilir dosyaları önceden derlendiğinden, geliştirme yapmak için çeşitli programlama dilleri kullanmak mümkündür. Bu, ya doğrudan Wasm'a derleme yoluyla ya da Wasm'da karşılık gelen sanal makinelerin uygulanması yoluyla elde edilir. Wasm'ı bir derleme hedefi olarak desteklediği bildirilen yaklaşık 40 programlama dili vardır.

Emscripten, Binaryen ve LLVM'yi arka uç olarak kullanarak C ve C++'ı Wasm'a derler.[24] Emscripten SDK, herhangi bir LLVM destekli dilin (diğerlerinin yanı sıra C, C++ veya Rust gibi) kaynak kodunu JavaScript koduyla aynı sanal alanda çalışan bir ikili dosyada derleyebilir. [note 1] Emscripten, WebGL gibi yaygın olarak kullanılan birkaç ortam arabirimi için bağlamalar sağlar.

Clang derleyicisi, sürüm 8'den itibaren, C ve C++ 'ı kodlarını Wasm'a derleyebilir.[29]

İlk amacı, Rust, gibi diğer kaynak dilleri desteklemekle birlikte, C ve C++ 'den derlemeyi desteklemektir. NET dilleri [30] ve AssemblyScript [31] (TypeScript benzeri) de ortaya çıkıyor. MVP sürümünden sonra, WebAssembly'ı C# (Blazor tarafından desteklenir), F# (Bolero [32] ile desteklenir) gibi çöpten toplanan programlama dilleri için bir derleme hedefi yapacak çoklu iş parçacığı ve çöp toplamayı [33] destekleme planları vardır. Blazor'un yardımı), Python ve hatta tarayıcının tam zamanında derleme hızının çok yavaş olduğu düşünülen JavaScript . Python,[34] Julia,[35][36][37] ve Ruby dahil olmak üzere bir dizi başka dilin desteği vardır.[38]

  1. Genel olarak, WebAssembly, DOM ile doğrudan etkileşime izin vermez. Tüm etkileşim, JavaScript birlikte çalışması yoluyla akmalıdır.
  2. Çöp toplamanın olmaması (bununla ilgili planlar vardır)
  3. Güvenlik endişeleri (aşağıda tartışılmıştır)

WebAssembly, masaüstlerinde ve mobil cihazlarda desteklenir. Ama ikincisinde, pratikte (Unity oyun motoru gibi küçük olmayan bellek tahsisleri için) "birçok uygulamanın mobil tarayıcılarda güvenilir bir şekilde dağıtılmasını imkansız kılan ciddi sınırlamalar vardır. Şu anda yaklaşık 300 MB'den fazla bellek ayırma, Chrome'a özgü geçici çözümlere başvurmadan Android'de Chrome'da veya iOS'ta Safari'de güvenilir değildir." [39]

Webassebly'nin doğrudan Belge Nesne Modeli (DOM) erişimi yoktur. Bununla birlikte, örneğin Rust dilini kullanırken stdweb [40] veya web_sys [41] aracılığıyla bunun için proxy işlevleri oluşturmak mümkündür.

Tüm büyük web tarayıcıları, İçerik-Güvenlik-Politikası belirtilmemişse veya "güvenli olmayan değerlendirme" kullanılıyorsa WebAssembly'ye izin verir, ancak bunun dışında büyük web tarayıcıları farklı davranır.[42] Uygulamada WebAssembly, bir çalışan iş parçacığı geçici çözümü mevcutken "güvenli olmayan değerlendirme" [43][44] olmadan Chrome'da kullanılamaz.[44]

Güvenlik endişeleri

[değiştir | kaynağı değiştir]

Haziran 2018'de bir güvenlik araştırmacısı, paylaşılan belleğe sahip iş parçacıkları için destek eklendikten sonra Spectre ve Meltdown güvenlik açıklarına yönelik tarayıcı azaltmalarını atlatmak için WebAssembly kullanma olasılığını sundu. Bu endişe nedeniyle, WebAssembly geliştiricileri özelliği beklemeye aldı.[45][46][47] Ancak, gelecekteki bu dil uzantılarını keşfetmek için Google Chrome, Ekim 2018'de WebAssembly iş parçacığı teklifi için deneysel destek ekledi.[48]

WebAssembly, kötü amaçlı yazılım yazarları, dolandırıcılar ve kimlik avı saldırganları için kanıtları gizlemeyi daha kolay sağladığı için eleştirilmiştir; WebAssembly, kullanıcının makinesinde yalnızca "[kötü amaçlı yazılım] tespitini zorlaştıran" derlenmiş biçiminde bulunur.[49] WebAssembly'nin hızı ve gizlenebilirliği, web sitesi ziyaretçisinin cihazında gizli kripto madenciliğinde kullanılmasına yol açmıştır.[45][49][50] Web sitesi ziyaretçilerinin tarayıcılarında kripto para madenciliğini kolaylaştıran, artık feshedilmiş bir hizmet olan Coinhive, "madencilerinin WebAssembly kullandığını ve yerel bir Madencinin performansının yaklaşık %65'i ile çalıştığını" iddia ediyor.[45] Technische Universität Braunschweig'in Haziran 2019'da yaptığı bir araştırma, Alexa ilk 1'de WebAssembly kullanımını analiz etti Milyonlarca web sitesi ve yaygın kullanımın kötü amaçlı kripto madenciliği için olduğunu ve bu kötü amaçlı yazılımın incelenen WebAssembly kullanan web sitelerinin yarısından fazlasını oluşturduğunu tespit etti.[51][52] Universität Stuttgart'tan Nisan 2021'de yapılan bir araştırma, o zamandan beri kripto madenciliğinin marjinalleştirildiğini ve Alexa'nın en iyi 1 milyon web sitesi de dahil olmak üzere çok çeşitli kaynaklardan toplanan tüm WebAssembly modüllerinin %1'inin altına düştüğünü buldu.[53]

Büyük miktarda kodu etkili bir şekilde gizleme yeteneği, Privacy Badger gibi web izlemeyi engelleyen reklam engelleme ve gizlilik araçlarını devre dışı bırakmak için de kullanılabilir.

WebAssembly yalnızca yapılandırılmış kontrol akışını desteklediğinden, sembolik yürütme dahil güvenlik doğrulama tekniklerine uygundur.[54] Bu yöndeki mevcut çabalar, Manticore sembolik yürütme motorunu içerir.

WebAssembly Sistem Arayüzü (WASI), Mozilla tarafından herhangi bir platforma taşınabilir olması amaçlanan basit bir arayüzdür (ABI ve API ).[55] Yetenek tabanlı güvenlik tarafından kısıtlanmış dosya G/Ç gibi POSIX benzeri özellikler sağlar.[56][57] Ayrıca önerilen birkaç ABI/API daha vardır.[58][59]

WASI geliştirilirken, CloudABI ve Capsicum'dan esinlenilmiştir.

Docker'ın kurucularından Solomon Hykes, 2019'da WASI hakkında şunları yazmıştır: "Eğer WASM+WASI 2008'de olsaydı, Docker'ı yaratmamız gerekmezdi. İşte bu kadar önemli. Sunucudaki WebAssembly, bilgi işlemin geleceğidir." [60] 1.0 sürümündeki Wasmer, "yazılım kapsayıcılığı sağlar; Linux, macOS, Windows ve web tarayıcıları gibi işletim sistemleri de dahil olmak üzere herhangi bir yerde değişiklik yapılmadan çalışan evrensel ikili dosyalar oluştururuz. Wasm, güvenli yürütme için varsayılan olarak uygulamaları otomatik olarak sandbox'lar".[60]

Ana bilgisayar ortamı

[değiştir | kaynağı değiştir]

Genel standart, JavaScript API için temel özellikleri ve gömmeyle ilgili ayrıntıları sağlar.[5]

Wasm kodu (ikili kod, yani bayt kodu), taşınabilir bir sanal yığın makinesinde (VM) çalıştırılmak üzere tasarlanmıştır. VM, JavaScript'ten daha hızlı ayrıştırmak ve yürütmek ve kompakt bir kod temsiline sahip olacak şekilde tasarlanmıştır. Wasm ikili kodu tarafından beklenebilecek harici bir işlevsellik (syscalls gibi) standart tarafından şart koşulmamıştır. Bunun yerine, VM uygulamasının içinde çalıştığı ana bilgisayar ortamı tarafından modüller aracılığıyla arabirim sağlamanın bir yolunu sağlar.[9][61]

Bir Wasm programı, çeşitli Wasm tanımlı değerlerin ve program tipi tanımlarının koleksiyonlarını içeren ayrı bir modül olacak şekilde tasarlanmıştır. Bunlar, her ikisi de ortak bir yapıya sahip olan ikili veya metin biçiminde (aşağıya bakınız) ifade edilir.[62]

Bir Wasm programının ikili formatı için temel standart, VM tarafından yürütülen işlem türlerinin (tam olarak nasıl yürütülmeleri gerektiğini belirtmeden) belirli ikili kodlamalarından oluşan bir talimat seti mimarisini (ISA) tanımlar.[63] Talimat listesi, standart bellek yükleme/depolama talimatlarını, sayısal, parametrik, akış talimatı türlerinin kontrolünü ve Wasm'e özgü değişken talimatları içerir.[64]

Orijinal standartta (MVP) kullanılan işlem kodu sayısı, 256 olası işlem kodunun 200'ünden biraz daha azdı. WebAssembly'nin sonraki sürümleri, işlem kodlarının sayısını 200'ün biraz üzerine çıkardı. WebAssembly SIMD önerisi (paralel işleme için), 128 bit SIMD için alternatif bir işlem kodu öneki (0xfd) sunar. SIMD önekinin sıralanması ve SIMD önekinden sonra geçerli olan bir işlem kodu, bir SIMD işlem kodu oluşturur. SIMD işlem kodları, "minimum geçerli ürün" (MVP) SIMD özelliği için ek 236 talimat getirir (toplam yaklaşık 436 talimat için).[65][66] Bu talimatlar, "sonlandırılmış işlem kodları" [67] Google'ın V8'inde (Google Chrome'da) ve Mozilla Firefox'taki ilgili motorda (ancak web tarayıcılarının kararlı sürümlerinde etkinleştirilmemiştir),[68] uygulanır ve ayrıca bazıları vardır. daha sonra "SIMD MVP sonrası" için talimatlar için ek teklif ve ayrıca masada ayrı bir "rahat-simd" teklifi var.[69]

Bu SIMD işlem kodları ayrıca taşınabilirdir ve x64 ve ARM gibi yerel komut setlerine çevrilir. Buna karşılık, ne Java'nın JVM'si (ne de CIL ) opcode düzeyinde, yani standartta SIMD'yi desteklemez; her ikisi de SIMD hızlandırma sağlayan bazı paralel API'lere sahiptir. Java için, taşınabilir olmayan, yani ARM veya akıllı telefonlarda kullanılamayan x64 SIMD,[70] için gerçekler ekleyen bir uzantı vardır. Akıllı telefonlar, SIMD ile montaj kodunu çağırarak SIMD'yi destekleyebilir ve C# da benzer bir desteğe sahiptir.

Mart 2017'de WebAssembly Topluluk Grubu, ilk (MVP) ikili biçim, JavaScript API ve referans yorumlayıcı üzerinde fikir birliğine vardı. İnsanlar tarafından kullanılmak üzere tasarlanmayan bir WebAssembly ikili biçimini (​.wasm​ ) ve S-ifadeleri ile geleneksel derleme dilleri arasında bir çapraza benzeyen, insan tarafından okunabilen bir WebAssembly metin biçimini (​.wat​ ) tanımlar.

Aşağıdaki tablo, C ile yazılmış bir faktöriyel fonksiyonun bir örneğini ve derlemeden sonra karşılık gelen WebAssembly kodunu göstermektedir..wat metin biçimi (WebAssembly'nin insan tarafından okunabilir bir metin gösterimi) ve.wasmWeb tarayıcısı veya WebAssembly'ı destekleyen çalışma zamanı ortamı tarafından yürütülen ikili biçimi (aşağıda onaltılık olarak ifade edilen ham bayt kodu ).

C kaynak kodu ve ilgili WebAssembly
C kaynak kodu WebAssembly.wat metin biçimi WebAssembly.wasm ikili biçimi
int factorial(int n) {
  if (n == 0)
    return 1;
  else
    return n * factorial(n-1);
}
(func (param i64) (result i64)
  local.get 0
  i64.eqz
  if (result i64)
      i64.const 1
  else
      local.get 0
      local.get 0
      i64.const 1
      i64.sub
      call 0
      i64.mul
  end)
00 61 73 6D 01 00 00 00
01 00 01 60 01 73 01 73 06
03 00 01 00 02
0A 00 01
00 00
20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B
0B 15 17

Tüm tam sayı sabitleri, alan açısından verimli, değişken uzunluklu bir LEB128 kodlaması kullanılarak kodlanır.[71]

WebAssembly metin biçimi, S-ifadeleri kullanılarak katlanmış bir biçimde daha kurallı olarak yazılır. Talimatlar ve ifadeler için bu format tamamen sözdizimsel şekerdir ve doğrusal formatla davranışsal farklılıkları yoktur. ​wasm2wat​ aracılığıyla, yukarıdaki kod şu şekilde derlenir:

(module
  (type $t0 (func (param i64) (result i64)))
  (func $f0 (type $t0) (param $p0 i64) (result i64)
    (if $I0 (result i64) ;; $I0 is an unused label name
      (i64.eqz
        (local.get $p0)) ;; the name $p0 is the same as 0 here
      (then
        (i64.const 1))
      (else
        (i64.mul
          (local.get $p0)
          (call $f0      ;; the name $f0 is the same as 0 here
            (i64.sub
              (local.get $p0)
              (i64.const 1))))))))

Bir modülün derleyici tarafından örtük olarak oluşturulduğunu unutmayın. İşleve aslında ikili dosyadaki tür tablosunun bir girişi tarafından başvurulur, dolayısıyla bir tür bölümü ve kod çözücü tarafından yayılan ​type​ .[72] Derleyici ve kod çözücüye çevrimiçi olarak erişilebilir.[73]

Ayrıca bakınız

[değiştir | kaynağı değiştir]
  1. ^ According to official documentation, the Emscripten SDK may be used to create .wasm files which then may be executed in a web browser.[25][26][27] Even though Emscripten can consume various languages when using Clang, some problems may arise.[28]
  1. ^ "WebAssembly/design/Semantics.md". GitHub (İngilizce). 15 Haziran 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Şubat 2021. WebAssembly code can be considered a structured stack machine; a machine where most computations use a stack of values, but control flow is expressed in structured constructs such as blocks, ifs, and loops. In practice, implementations need not maintain an actual value stack, nor actual data structures for control; they need only behave as if they did so. 
  2. ^ "Understanding WebAssembly text format". MDN Web Docs. 5 Şubat 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Aralık 2019. 
  3. ^ "Introduction — WebAssembly 1.0". webassembly.github.io. 22 Kasım 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Haziran 2019. WebAssembly is an open standard... 
  4. ^ "Introduction — WebAssembly 1.0". webassembly.github.io. 22 Kasım 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Haziran 2019. WebAssembly is a ... code format 
  5. ^ a b "Conventions — WebAssembly 1.0". webassembly.github.io. 6 Mayıs 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Mayıs 2019. WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure. 
  6. ^ "Introduction — WebAssembly 1.0". webassembly.github.io. 22 Kasım 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Haziran 2019. ... this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. These will each define a WebAssembly application programming interface (API) suitable for a given environment. 
  7. ^ "Introduction — WebAssembly 1.1". webassembly.github.io. 22 Kasım 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Şubat 2021. Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well. 
  8. ^ Haas (14 Haziran 2017). "Bringing the Web Up to Speed with WebAssembly". SIGPLAN Notices. 52 (6): 185-200. doi:10.1145/3140587.3062363. ISSN 0362-1340. While the Web is the primary motivation for WebAssembly, nothing in its design depends on the Web or a JavaScript environment. It is an open standard specifically designed for embedding in multiple contexts, and we expect that stand-alone implementations will become available in the future. 
  9. ^ a b c "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. 19 Temmuz 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Temmuz 2020. 
  10. ^ a b c "Wasmer - The Universal WebAssembly Runtime". wasmer.io. 2 Mart 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Şubat 2021. Compile everything to WebAssembly. Run it on any OS or embed it into other languages. 
  11. ^ "WebAssembly Core Specification". World Wide Web Consortium (W3). 6 Aralık 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Aralık 2019. 
  12. ^ "WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers". infoq.com. 25 Kasım 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Aralık 2019. 
  13. ^ "WebAssembly Specification — WebAssembly 1.1". webassembly.github.io. 17 Mart 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Mart 2021. 
  14. ^ "Programming Languages Software Award". www.sigplan.org. 29 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2022. 
  15. ^ "Staring at the Sun: Dalvik vs. ASM.js vs. Native". blog.mozilla.org. 7 Aralık 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Aralık 2019. Even discarding the one score where asm.js did better, it executes at around 70% of the speed of native C++ code. 
  16. ^ Arjun, Jangda, Abhinav Powers, Bobby Berger, Emery Guha (25 Ocak 2019). Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code. OCLC 1106328738. 
  17. ^ "WebAssembly Worker Based Threads - Chrome Platform Status". chromestatus.com. 19 Şubat 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Şubat 2022. 
  18. ^ "WebAssembly Specification — WebAssembly 2.0 (Draft 2022-09-01)". webassembly.github.io. 22 Eylül 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Eylül 2022. 
  19. ^ "WebAssembly 2.0 First Public Working Drafts | W3C News" (İngilizce). 9 Eylül 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Eylül 2022. 
  20. ^ "Non-Web Embeddings". WebAssembly. 15 Mayıs 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Mayıs 2019. 
  21. ^ "Non-Web Embeddings". GitHub / WebAssembly. 13 Kasım 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Mayıs 2019. 
  22. ^ "Wasmtime — a small and efficient runtime for WebAssembly & WASI". wasmtime.dev. 4 Aralık 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Aralık 2020. 
  23. ^ "Roadmap". 7 Aralık 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Aralık 2021. 
  24. ^ Zakai, Alon [@kripken] (21 Ekim 2019). "Emscripten has switched to the upstream LLVM wasm backend by default! / Details:https://groups.google.com/forum/#!topic/emscripten-discuss/NpxVAOirSl4 … 1 Mart 2023 tarihinde Wayback Machine sitesinde arşivlendi." (Tweet). Retrieved 22 Ekim 2019 – Twitter aracılığıyla.
  25. ^ "Developer's Guide - WebAssembly". webassembly.org. 19 Mayıs 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Haziran 2019. 
  26. ^ "Compiling a New C/C++ Module to WebAssembly". MDN Web Docs (İngilizce). 8 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Haziran 2019. 
  27. ^ "Building to WebAssembly — Emscripten 1.38.33 documentation". emscripten.org. 24 Mart 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Haziran 2019. 
  28. ^ "Emscripting a C library to Wasm | Web". Google Developers (İngilizce). 1 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Haziran 2019. 
  29. ^ "LLVM 8.0.0 Release Notes — LLVM 8 documentation". releases.llvm.org. 22 Ekim 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Ekim 2019. 
  30. ^ "Frequently asked questions (FAQ) about Blazor". blazor.net. 18 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Haziran 2018. 
  31. ^ AssemblyScript/assemblyscript, The AssemblyScript Project, 9 Eylül 2020, 11 Eylül 2020 tarihinde kaynağından arşivlendi, erişim tarihi: 9 Eylül 2020 
  32. ^ "Bolero: F# in WebAssembly". fsbolero.io. 4 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Temmuz 2019. 
  33. ^ "🛤 Garbage collection · Issue #16 · WebAssembly/proposals". GitHub (İngilizce). 18 Ocak 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Temmuz 2019. 
  34. ^ "Pyodide: Bringing the scientific Python stack to the browser – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog (İngilizce). 3 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Eylül 2020. 
  35. ^ "Julia in the Browser". nextjournal.com. 24 Mart 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2019. 
  36. ^ "WebAssembly platform by tshort · Pull Request #2 · JuliaPackaging/Yggdrasil". GitHub (İngilizce). 30 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2019. 
  37. ^ Keno (22 Temmuz 2019), GitHub - Keno/julia-wasm: Running julia on wasm., 21 Kasım 2020 tarihinde kaynağından arşivlendi, erişim tarihi: 25 Temmuz 2019 
  38. ^ "MRuby in Your Browser". ruby.dj. 8 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Temmuz 2019. 
  39. ^ "Wasm needs a better memory management story · Issue #1397 · WebAssembly/design". GitHub (İngilizce). 27 Mart 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Şubat 2021. 
  40. ^ "stdweb - Rust". docs.rs. 21 Şubat 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Haziran 2019. The goal of this crate is to provide Rust bindings to the Web APIs and to allow a high degree of interoperability between Rust and JavaScript. 
  41. ^ "web_sys - Rust". docs.rs. 15 Mayıs 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Haziran 2019. Raw API bindings for Web APIs. This is a procedurally generated crate from browser WebIDL which provides a binding to all APIs that browser provide on the web. 
  42. ^ "WebAssembly/content-security-policy". GitHub (İngilizce). 12 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Şubat 2021. 
  43. ^ "948834 - chromium - An open-source project to help move the web forward. - Monorail". bugs.chromium.org. 2 Haziran 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Şubat 2021. 
  44. ^ a b "No way to use WebAssembly on Chrome without 'unsafe-eval' · Issue #7 · WebAssembly/content-security-policy". GitHub (İngilizce). 18 Mart 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Şubat 2021. 
  45. ^ a b c "In-browser mining: Coinhive and WebAssembly" (İngilizce). Forcepoint. 19 Nisan 2018. 9 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Haziran 2019. 
  46. ^ "Changes in WebAssembly Could Render Meltdown and Spectre Browser Patches Useless" (İngilizce). Bleeping Computer. 24 Haziran 2018. 10 Temmuz 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Haziran 2019. 
  47. ^ "How opaque WebAssembly code could increase the risk of Spectre attacks online". Tech Republic (İngilizce). 25 Haziran 2018. 9 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Haziran 2019. 
  48. ^ "Google Chrome 70 now supports WebAssembly threads to build multi-threaded web applications". Packt Pub. 30 Ekim 2018. 18 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Haziran 2019. 
  49. ^ a b "The dark side of WebAssembly". Virus Bulletin. October 2018. 9 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Haziran 2019. 
  50. ^ "Persistent drive-by cryptomining coming to a browser near you". Malwarebytes. 29 Kasım 2017. 15 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Haziran 2019. 
  51. ^ "Recent Study Estimates That 50% of Websites Using WebAssembly Apply It for Malicious Purposes". InfoQ. 31 Ekim 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2019. 
  52. ^ "New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild". Detection of Intrusions and Malware, and Vulnerability Assessment (PDF). Lecture Notes in Computer Science. 11543. Detection of Intrusions and Malware, and Vulnerability Assessment. June 2019. ss. 23-42. doi:10.1007/978-3-030-22038-9_2. ISBN 978-3-030-22037-2. 26 Temmuz 2022 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 15 Şubat 2022. 
  53. ^ Aaron Hilbig, Daniel Lehmann, and Michael Pradel (April 2021).
  54. ^ Conrad Watt (8 Ocak 2018). "Mechanising and verifying the WebAssembly specification". Proceedings of the 7th ACM SIGPLAN International Conference on Certified Programs and Proofs. CPP 2018 (İngilizce). Los Angeles CA USA: ACM: 53-65. doi:10.1145/3167082. ISBN 978-1-4503-5586-5. 30 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2022. 
  55. ^ "WebAssembly System Interface Repo". GitHub / WebAssembly. 10 Şubat 2020. 30 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2022. 
  56. ^ "Additional background on Capabilities". GitHub (İngilizce). bytecodealliance. 4 Mart 2022. 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2022. 
  57. ^ "Standardizing WASI: A system interface to run WebAssembly outside the web – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog. 30 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2022. 
  58. ^ "reference-sysroot Repo". GitHub / WebAssembly. 12 Ocak 2020. 21 Ağustos 2022 tarihinde kaynağından arşivlendi. 
  59. ^ "wasm-c-api Repo". GitHub / WebAssembly. 3 Şubat 2020. 31 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2022. 
  60. ^ a b "The "Wasmer" WebAssembly Runtime is Generally Available". InfoQ (İngilizce). 27 Şubat 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Şubat 2021. 
  61. ^ "Portability - WebAssembly". webassembly.org. 28 Temmuz 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Temmuz 2020. 
  62. ^ "Conventions — WebAssembly 1.0". webassembly.github.io. 21 Ekim 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Kasım 2019. 
  63. ^ "Introduction — WebAssembly 1.0". webassembly.github.io. 2 Haziran 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Mayıs 2019. 
  64. ^ "Instructions — WebAssembly 1.0". webassembly.github.io. 21 Ekim 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Kasım 2019. 
  65. ^ Thomas (19 Şubat 2021). "Final opcodes by tlively · Pull Request #452 · WebAssembly/simd · GitHub". Bytecode Alliance. 30 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Mayıs 2021GitHub vasıtasıyla. 
  66. ^ Yury (19 Şubat 2021). "File wasm-tools/expr.rs at b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub". Bytecode Alliance. 22 Mayıs 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Mayıs 2021GitHub vasıtasıyla. 
  67. ^ "Update interpreter and text with finalized opcodes by ngzhian · Pull Request #486 · WebAssembly/simd". GitHub (İngilizce). 30 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Mayıs 2021. 
  68. ^ "WebAssembly/simd". GitHub (İngilizce). 10 Mayıs 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Mayıs 2021. 
  69. ^ WebAssembly/relaxed-simd, WebAssembly, 3 Mayıs 2021, 17 Nisan 2022 tarihinde kaynağından arşivlendi, erişim tarihi: 14 Mayıs 2021 
  70. ^ "How we made the JVM 40x faster". astojanov.github.io. 26 Aralık 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Şubat 2021. 
  71. ^ WebAssembly Community Group (January 2020). "WebAssembly Specification Release 1.0". 21 Ekim 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Ocak 2020. 
  72. ^ "Modules (Binary)". WebAssembly 1.0. 30 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2022. 
  73. ^ "WebAssembly Binary Toolkit (wabt) demos". webassembly.github.io. 30 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Kasım 2022. 

 Bu madde bir Özgür içerik çalışmasından metin içermektedir. Metin şuradan alınmıştır:

Dış bağlantılar

[değiştir | kaynağı değiştir]

Şablon:Web interfaces