İçeriğe atla

WebAssembly

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.

Tarihçe

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.

Uygulamalar

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ı

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.

Derleyiciler

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]

Sınırlamalar

  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

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.

WASI

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]

Şartname

Ana bilgisayar ortamı

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

Sanal makine

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]

Wasm programı

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]

Komut seti

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.

Kod gösterimi

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]

Notlar

Ayrıca bakınız

  • Mimari Tarafsız Dağıtım Formatı (ANDF)
  • UNCOL
  • Java bayt kodu
  • Ortak dil çalışması
  • LLVM
  • Derleme
  • Yazılım taşınabilirliği

Notlar

  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]

Kaynakça

  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

Şablon:Web interfaces

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Web tarayıcısı</span> World Wide Webdeki bilgi kaynaklarını almak, sunmak ve dolaşmak için yazılım uygulaması

Web tarayıcısı veya ağ tarayıcısı, kullanıcıların World Wide Web (WWW) üzerinde bulunan bilgi kaynaklarını edinmeye ve görüntülemeye yarayan yazılımların genel adıdır. WWW üzerindeki bilgi kaynakları web sayfası, resim, video veya başka içerik türü olabilir. Bu kaynaklarda yer alan hiperlinkler aracılığıyla kullanıcılar, web tarayıcılarını kullanarak ilgili kaynaklar arasında dolaşabilir.

<span class="mw-page-title-main">Mozilla Firefox</span> yazılım

Mozilla Firefox, Mozilla Vakfı ve onun alt kuruluşu Mozilla Corporation tarafından geliştirilen, özgür ve açık kaynak kodlu bir web tarayıcısıdır. Firefox; Windows, macOS, Linux, Android ve iOS işletim sistemlerinde kullanabilir. Yazılımın Windows, macOS, Linux, Android sürümlerinde web sayfalarının oluşturulması için Gecko motoru kullanılır. Mozilla tarafından geliştirilen Gecko, mevcut ve planlanmış web standartlarıyla uyumludur. 2015'te çıkan iOS için Firefox uygulamasında ise Apple'ın getirdiği kısıtlamalar nedeniyle iOS'in bütünleşik WebKit motoru kullanılır.

<span class="mw-page-title-main">JavaScript</span> programlama dili

JavaScript, HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir. Web sitelerinin %97'sinden fazlası, web sayfası hareketleri için istemci tarafında JavaScript kullanırlar ve kullanılan kodlar genellikle üçüncü taraf kitaplıkları içerir. Tüm büyük web tarayıcılarında, kaynak kodunu kullanıcıların cihazlarında yürütebilmek için özel bir JavaScript motoru bulunur.

<span class="mw-page-title-main">Web sayfası</span> World Wide Web ve web tarayıcıları aracılığıyla doğrudan görüntülenebilen tek belge

Web sayfası, World Wide Web için hazırlanan ve web tarayıcısı kullanılarak görüntülenebilen dokümanlardır. Web sayfaları çoğunlukla HTML formatında kodlanır, CSS, betik, görsel ve diğer yardımcı kaynaklardan yararlanılarak son görünümüne sahip olur ve işlevsellik kazanır. Birden fazla web sayfasının bir araya gelmesi ile ortaya çıkan web sitesi ile karıştırılmamalıdır. Günlük konuşma dilinde internet sayfası terimi de çoğunlukla web sitesi anlamında kullanılmaktadır.

<span class="mw-page-title-main">Google Chrome</span> Google tarafından geliştirilen bir web tarayıcısı

Google Chrome, Google tarafından geliştirilen ücretsiz bir web tarayıcısıdır. Eylül 2008'de Microsoft Windows sürümü yayımlanmış; daha sonra Linux, macOS, iOS ve Android sürümleri de geliştirilmiştir.

CoffeeScript kaynaktan kaynağa derleme yapan ve JavaScript kodu üreten bir geliştirme aracıdır. Sözdizimi Python ve Ruby dillerine benzer, kod blokları girintiler ile ayrılır, JavaScript'in satır sonlarında noktalı virgül kullanma gibi yazım kurallarını da içermez, bu nedenle okunması kolaydır. Kullandığı bazı sözcükler ve yapılar sayesinde JavaScript ile uzun yazılabilecek ve okunaksız hale gelecek kodları neredeyse 3/1 oranında kısaltabilir ve kolay okunabilme imkânı sunar. Derleme işlemi çalışma zamanında değil geliştirme aşamasında yapıldığından tarayıcılarda performans kaybı söz konusu değildir.

<span class="mw-page-title-main">Brendan Eich</span>

Brendan Eich, JavaScript programlama dilinin yaratıcısı olan Amerikalı teknoloji öncüsüdür. Mozilla Projesi'nin de yaratıcılarından biri olan Brendan Eich, Mozilla Vakfı'nın da kurucularından birisi oldu. Mozilla Corporation'ın önce CTO, sonrasında da CEO'luğunu üstlenen Brendan Eich, teknoloji dünyasını en çok etkilemiş geliştiricilerden biri olarak gösterilmektedir.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

<span class="mw-page-title-main">GNU LibreJS</span> Mozilla Firefox tabanlı tarayıcılar için özgür yazılım web tarayıcısı eklentisi

GNU LibreJS ya da kısaca LibreJS Mozilla Firefox tabanlı tarayıcılar için özgür yazılım web tarayıcısı eklentisidir. GNU Tasarısı tarafından oluşturulmuştur. Amacı kullanıcının web tarayıcısında özgür olmayan anlaşılması zor JavaScript programlarını engellemek ve özgür ya da anlaşılabilen programlara izin vermektir. Eklenti Richard Stallman'ın "JavaScript Tuzağı" olarak adlandırdığı sorunu gidermek için oluşturulmuştur, bu sorun birçok kullanıcının web tarayıcılarında bilmeden özel mülk yazılım çalıştırması hakkındadır.

<span class="mw-page-title-main">Brave (yazılım)</span> Web Tarayıcısı

Brave açık kaynak kodlu, Chromium üzerine inşa edilmiş web tarayıcı yazılımı.

<span class="mw-page-title-main">Android için Google Chrome</span>

Google Chrome Android Android sistemi için piyasaya sürülen Google Chrome'un bir sürümüdür. Google, 7 Şubat 2012 tarihinde, Android Ice Cream Sandwich cihazları için, seçilen ülkeler için Google Chrome Beta sürümünü piyasaya sürdü. Tarayıcının ilk kararlı sürümü 27 Haziran 2012'de piyasaya sürüldü. 26.02.2012 tarihinde piyasaya sürülen Chrome 18.0.1026.311, Android için Chrome'un Intel x86 tabanlı mobil cihazlarını destekleyen ilk sürümü idi.

<span class="mw-page-title-main">Deno</span> TypeScript and JavaScript Çalistirma Ortami

Deno, V8 JavaScript motoruna ve ek olarak Rust programlama diline dayanan JavaScript ve TypeScript için bir çalıştırma ortamıdır. Node.js'in yaratıcısı Ryan Dahl tarafından güvenlik ve üretkenliğe odaklanılarak geliştirilmeye başlanmıştır. 2018'de Dahl tarafından "Node.js Hakkında 10 Pişman Olduğum Şey" konuşmasında duyuruldu. Deno, ayrı bir paket yönetim sistemi gerektirmez, bunun yerine tek bir dosya içinde hem çalışma ortamı hem de paket yöneticisi rolünü üstlenir.

WebRTC, web tarayıcılarına ve mobil uygulamalara basit uygulama geliştirme arayüzü (API'ler) aracılığıyla gerçek zamanlı iletişim (RTC) sağlayan ücretsiz, açık kaynaklı bir projedir. Direkt olarak eşler arası iletişime izin vermesi ile, eklenti yükleme veya uygulama indirme ihtiyacını ortadan kaldırarak, ses ve video iletişiminin web sayfalarında kolaylıkla kullanılmasını sağlar. Apple, Google, Microsoft, Mozilla ve Opera tarafından desteklenen WebRTC, World Wide Web Konsorsiyumu (W3C) ve İnternet Mühendisliği Görev Gücü (IETF) aracılığıyla standartlaştırılmaktadır.

Opera Dragonfly, Opera Software tarafından sunulan Web geliştirme aracı'dır.

<span class="mw-page-title-main">Decentraleyes</span>

Decentraleyes, yerel içerik dağıtım ağı (CDN) öykünmesi için kullanılan açık kaynak kodlu ve özgür bir tarayıcı uzantısıdır. Birincil görevi, Cloudflare ve Google gibi büyük CDN'lere bağlantıları engellemek ve kullanıcıların makinesinde yerel olarak kullanılabilen popüler web kitaplıklarıyla (JQuer) ve AngularJS gibi) hizmet vermektir. Decentraleyes, Mozilla Firefox, Google Chrome, Pale Moon ve Opera gibi birçok web tarayıcısında kullanılabilir.

JavaScript motoru, JavaScript kodunu yürüten bir yazılım bileşenidir. İlk JavaScript motorları yalnızca yorumlayıcılardı, ancak ilgili tüm modern motorlar ise gelişmiş performans için tam zamanında derlemeyi kullanır.

<span class="mw-page-title-main">Electron (yazılım kütüphanesi)</span>

Electron, GitHub tarafından geliştirilen ve bakımı yapılan özgür ve açık kaynaklı bir yazılım iskeletidir. Çerçeve, Chromium tarayıcı motorunun bir çeşidi kullanılarak oluşturulan web teknolojilerini ve Node.js çalışma ortamını kullanarak masaüstü uygulamaları oluşturmak için tasarlanmıştır. Ek olarak, Düğüm hizmetleriyle yerel entegrasyon ve süreçler arası iletişim modülü gibi şeylere izin vermek için çeşitli API'ler de kullanır.

<span class="mw-page-title-main">PDF.js</span>

PDF.js, Taşınabilir Belge Biçimi (PDF) dosyalarını web standartları ile uyumlu HTML5 Canvas kullanarak işleyen bir JavaScript kütüphanesidir. Proje, Andreas Gal'in 2011'de başlatmasından sonra Mozilla Corporation tarafından yönetilmektedir.

<span class="mw-page-title-main">ELinks</span>

ELinks, Unix benzeri işletim sistemleri için tasarlanmış ücretsiz bir metin tabanlı web tarayıcısıdır.

<span class="mw-page-title-main">Web geliştirme araçları</span>

Web geliştirme araçları, web geliştiricilerinin kaynak kodlarını test etmelerine ve hata ayıklamalarına olanak tanır. Bir web sayfasının doğrudan oluşturulmasına yardımcı olmamaları, bunun yerine bir web sitesinin veya web uygulamasının kullanıcı arayüzünü test etmek için kullanılan araçlar olmaları bakımından web sitesi oluşturuculardan ve entegre geliştirme ortamlarından (IDE'ler) farklıdırlar.