WebAssembly (bazen Wasm olarak da kısaltılır), yürütülebilir programlar 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.
WebAssembly Logo.svg | |
Paradigması | yapısal; |
---|---|
Tasarımcı | W3C |
Geliştirici | |
İşletim sistemi | Çapraz platform |
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. Açık bir standarttır ve herhangi bir işletim sistemindeki herhangi bir dili desteklemeyi amaçlar. Pratikte zaten popüler dillerin tümü WebAssembly'yi az da olsa desteklemektedir.
WebAssembly ilk olarak 2015 yılında açıklandı ve ilk olarak Mart 2017 yayınlandı. 5 Aralık 2019'da World Wide Web Konsorsiyumu önerisi oldu. 2021'de ACM SIGPLAN'dan Programlama Dilleri Yazılım Ödülü'nü aldı.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 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ü.
Nisan 2022'den bu yana, WebAssembly 2.0 taslak durumundadır. 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. 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.
İ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 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, Wasmtime veya WAMR, wasm3, WAVM ve diğerleri dahil olmak üzere genel amaçlı kullanım için tarayıcı olmayan uygulamalar da vardır.
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 'ı Wasm'a derler. Emscripten SDK, herhangi bir LLVM destekli dilin (diğerlerinin yanı sıra C, veya Rust gibi) kaynak kodunu JavaScript koduyla aynı sanal alanda çalışan bir ikili dosyada derleyebilir. 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 'ı kodlarını Wasm'a derleyebilir.
İlk amacı, Rust, gibi diğer kaynak dilleri desteklemekle birlikte, C ve 'den derlemeyi desteklemektir. NET dilleri ve (TypeScript benzeri) de ortaya çıkıyor. MVP sürümünden sonra, WebAssembly'ı C# ( tarafından desteklenir), F# (Bolero ile desteklenir) gibi çöpten toplanan programlama dilleri için bir derleme hedefi yapacak çoklu iş parçacığı ve çöp toplamayı 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,Julia, ve Ruby dahil olmak üzere bir dizi başka dilin desteği vardır.
Sınırlamalar
- Genel olarak, WebAssembly, DOM ile doğrudan etkileşime izin vermez. Tüm etkileşim, JavaScript birlikte çalışması yoluyla akmalıdır.
- Çöp toplamanın olmaması (bununla ilgili planlar vardır)
- 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."
Webassebly'nin doğrudan Belge Nesne Modeli (DOM) erişimi yoktur. Bununla birlikte, örneğin Rust dilini kullanırken stdweb veya web_sys 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. Uygulamada WebAssembly, bir çalışan iş parçacığı geçici çözümü mevcutken "güvenli olmayan değerlendirme" olmadan Chrome'da kullanılamaz.
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ı. 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.
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. 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. 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.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.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.
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. 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 ). Yetenek tabanlı güvenlik tarafından kısıtlanmış dosya G/Ç gibi POSIX benzeri özellikler sağlar. Ayrıca önerilen birkaç ABI/API daha vardır.
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." 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".
Şartname
Ana bilgisayar ortamı
Genel standart, JavaScript API için temel özellikleri ve gömmeyle ilgili ayrıntıları sağlar.
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.
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.
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. 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.
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). Bu talimatlar, "sonlandırılmış işlem kodları" 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), 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.
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, 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 | 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.
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
. Derleyici ve kod çözücüye çevrimiçi olarak erişilebilir.
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
Kaynakça
- ^ "WebAssembly/design/Semantics.md". GitHub (İngilizce). 15 Haziran 2021 tarihinde kaynağından . 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.
- ^ "Understanding WebAssembly text format". MDN Web Docs. 5 Şubat 2022 tarihinde kaynağından . Erişim tarihi: 9 Aralık 2019.
- ^ "Introduction — WebAssembly 1.0". webassembly.github.io. 22 Kasım 2021 tarihinde kaynağından . Erişim tarihi: 18 Haziran 2019.
WebAssembly is an open standard...
- ^ "Introduction — WebAssembly 1.0". webassembly.github.io. 22 Kasım 2021 tarihinde kaynağından . Erişim tarihi: 18 Haziran 2019.
WebAssembly is a ... code format
- ^ a b "Conventions — WebAssembly 1.0". webassembly.github.io. 6 Mayıs 2019 tarihinde kaynağından . 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.
- ^ "Introduction — WebAssembly 1.0". webassembly.github.io. 22 Kasım 2021 tarihinde kaynağından . 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.
- ^ "Introduction — WebAssembly 1.1". webassembly.github.io. 22 Kasım 2021 tarihinde kaynağından . 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.
- ^ 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.
- ^ a b c "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. 19 Temmuz 2020 tarihinde kaynağından . Erişim tarihi: 28 Temmuz 2020.
- ^ a b c "Wasmer - The Universal WebAssembly Runtime". wasmer.io. 2 Mart 2021 tarihinde kaynağından . Erişim tarihi: 19 Şubat 2021.
Compile everything to WebAssembly. Run it on any OS or embed it into other languages.
- ^ "WebAssembly Core Specification". World Wide Web Consortium (W3). 6 Aralık 2019 tarihinde kaynağından . Erişim tarihi: 9 Aralık 2019.
- ^ "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 . Erişim tarihi: 9 Aralık 2019.
- ^ "WebAssembly Specification — WebAssembly 1.1". webassembly.github.io. 17 Mart 2021 tarihinde kaynağından . Erişim tarihi: 22 Mart 2021.
- ^ "Programming Languages Software Award". www.sigplan.org. 29 Ekim 2022 tarihinde kaynağından . Erişim tarihi: 3 Kasım 2022.
- ^ "Staring at the Sun: Dalvik vs. ASM.js vs. Native". blog.mozilla.org. 7 Aralık 2019 tarihinde kaynağından . 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.
- ^ Arjun, Jangda, Abhinav Powers, Bobby Berger, Emery Guha (25 Ocak 2019). Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code. OCLC 1106328738.
- ^ "WebAssembly Worker Based Threads - Chrome Platform Status". chromestatus.com. 19 Şubat 2022 tarihinde kaynağından . Erişim tarihi: 19 Şubat 2022.
- ^ "WebAssembly Specification — WebAssembly 2.0 (Draft 2022-09-01)". webassembly.github.io. 22 Eylül 2022 tarihinde kaynağından . Erişim tarihi: 9 Eylül 2022.
- ^ "WebAssembly 2.0 First Public Working Drafts | W3C News" (İngilizce). 9 Eylül 2022 tarihinde kaynağından . Erişim tarihi: 9 Eylül 2022.
- ^ "Non-Web Embeddings". WebAssembly. 15 Mayıs 2019 tarihinde kaynağından . Erişim tarihi: 15 Mayıs 2019.
- ^ "Non-Web Embeddings". GitHub / WebAssembly. 13 Kasım 2020 tarihinde kaynağından . Erişim tarihi: 15 Mayıs 2019.
- ^ "Wasmtime — a small and efficient runtime for WebAssembly & WASI". wasmtime.dev. 4 Aralık 2020 tarihinde kaynağından . Erişim tarihi: 18 Aralık 2020.
- ^ "Roadmap". 7 Aralık 2021 tarihinde kaynağından . Erişim tarihi: 7 Aralık 2021.
- ^ 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 ." (Tweet). Retrieved 22 Ekim 2019 – Twitter aracılığıyla.
- ^ "Developer's Guide - WebAssembly". webassembly.org. 19 Mayıs 2019 tarihinde kaynağından . Erişim tarihi: 10 Haziran 2019.
- ^ "Compiling a New C/C++ Module to WebAssembly". MDN Web Docs (İngilizce). 8 Haziran 2019 tarihinde kaynağından . Erişim tarihi: 10 Haziran 2019.
- ^ "Building to WebAssembly — Emscripten 1.38.33 documentation". emscripten.org. 24 Mart 2019 tarihinde kaynağından . Erişim tarihi: 10 Haziran 2019.
- ^ "Emscripting a C library to Wasm | Web". Google Developers (İngilizce). 1 Ağustos 2019 tarihinde kaynağından . Erişim tarihi: 10 Haziran 2019.
- ^ "LLVM 8.0.0 Release Notes — LLVM 8 documentation". releases.llvm.org. 22 Ekim 2019 tarihinde kaynağından . Erişim tarihi: 22 Ekim 2019.
- ^ "Frequently asked questions (FAQ) about Blazor". blazor.net. 18 Haziran 2018 tarihinde kaynağından . Erişim tarihi: 18 Haziran 2018.
- ^ AssemblyScript/assemblyscript, The AssemblyScript Project, 9 Eylül 2020, 11 Eylül 2020 tarihinde kaynağından , erişim tarihi: 9 Eylül 2020
- ^ "Bolero: F# in WebAssembly". fsbolero.io. 4 Haziran 2019 tarihinde kaynağından . Erişim tarihi: 25 Temmuz 2019.
- ^ "🛤 Garbage collection · Issue #16 · WebAssembly/proposals". GitHub (İngilizce). 18 Ocak 2020 tarihinde kaynağından . Erişim tarihi: 25 Temmuz 2019.
- ^ "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 . Erişim tarihi: 9 Eylül 2020.
- ^ "Julia in the Browser". nextjournal.com. 24 Mart 2019 tarihinde kaynağından . Erişim tarihi: 9 Nisan 2019.
- ^ "WebAssembly platform by tshort · Pull Request #2 · JuliaPackaging/Yggdrasil". GitHub (İngilizce). 30 Ekim 2022 tarihinde kaynağından . Erişim tarihi: 9 Nisan 2019.
- ^ Keno (22 Temmuz 2019), GitHub - Keno/julia-wasm: Running julia on wasm., 21 Kasım 2020 tarihinde kaynağından , erişim tarihi: 25 Temmuz 2019
- ^ "MRuby in Your Browser". ruby.dj. 8 Ağustos 2019 tarihinde kaynağından . Erişim tarihi: 25 Temmuz 2019.
- ^ "Wasm needs a better memory management story · Issue #1397 · WebAssembly/design". GitHub (İngilizce). 27 Mart 2021 tarihinde kaynağından . Erişim tarihi: 15 Şubat 2021.
- ^ "stdweb - Rust". docs.rs. 21 Şubat 2019 tarihinde kaynağından . 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.
- ^ "web_sys - Rust". docs.rs. 15 Mayıs 2020 tarihinde kaynağından . 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.
- ^ "WebAssembly/content-security-policy". GitHub (İngilizce). 12 Eylül 2020 tarihinde kaynağından . Erişim tarihi: 17 Şubat 2021.
- ^ "948834 - chromium - An open-source project to help move the web forward. - Monorail". bugs.chromium.org. 2 Haziran 2021 tarihinde kaynağından . Erişim tarihi: 17 Şubat 2021.
- ^ 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 . Erişim tarihi: 17 Şubat 2021.
- ^ a b c "In-browser mining: Coinhive and WebAssembly" (İngilizce). Forcepoint. 19 Nisan 2018. 9 Haziran 2019 tarihinde kaynağından . Erişim tarihi: 8 Haziran 2019.
- ^ "Changes in WebAssembly Could Render Meltdown and Spectre Browser Patches Useless" (İngilizce). . 24 Haziran 2018. 10 Temmuz 2019 tarihinde kaynağından . Erişim tarihi: 8 Haziran 2019.
- ^ "How opaque WebAssembly code could increase the risk of Spectre attacks online". (İngilizce). 25 Haziran 2018. 9 Haziran 2019 tarihinde kaynağından . Erişim tarihi: 9 Haziran 2019.
- ^ "Google Chrome 70 now supports WebAssembly threads to build multi-threaded web applications". Packt Pub. 30 Ekim 2018. 18 Nisan 2019 tarihinde kaynağından . Erişim tarihi: 9 Haziran 2019.
- ^ a b "The dark side of WebAssembly". . October 2018. 9 Haziran 2019 tarihinde kaynağından . Erişim tarihi: 8 Haziran 2019.
- ^ "Persistent drive-by cryptomining coming to a browser near you". Malwarebytes. 29 Kasım 2017. 15 Nisan 2019 tarihinde kaynağından . Erişim tarihi: 8 Haziran 2019.
- ^ "Recent Study Estimates That 50% of Websites Using WebAssembly Apply It for Malicious Purposes". InfoQ. 31 Ekim 2019 tarihinde kaynağından . Erişim tarihi: 3 Kasım 2019.
- ^ "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. . June 2019. ss. 23-42. doi:10.1007/978-3-030-22038-9_2. ISBN . 26 Temmuz 2022 tarihinde kaynağından (PDF). Erişim tarihi: 15 Şubat 2022.
- ^ Aaron Hilbig, Daniel Lehmann, and Michael Pradel (April 2021).
- ^ 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 . 30 Ekim 2022 tarihinde kaynağından . Erişim tarihi: 3 Kasım 2022.
- ^ "WebAssembly System Interface Repo". GitHub / WebAssembly. 10 Şubat 2020. 30 Ekim 2022 tarihinde kaynağından . Erişim tarihi: 3 Kasım 2022.
- ^ "Additional background on Capabilities". GitHub (İngilizce). bytecodealliance. 4 Mart 2022. 24 Şubat 2020 tarihinde kaynağından . Erişim tarihi: 3 Kasım 2022.
- ^ "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 . Erişim tarihi: 3 Kasım 2022.
- ^ . GitHub / WebAssembly. 12 Ocak 2020. 21 Ağustos 2022 tarihinde kaynağından arşivlendi.
- ^ "wasm-c-api Repo". GitHub / WebAssembly. 3 Şubat 2020. 31 Ekim 2022 tarihinde kaynağından . Erişim tarihi: 3 Kasım 2022.
- ^ a b "The "Wasmer" WebAssembly Runtime is Generally Available". InfoQ (İngilizce). 27 Şubat 2021 tarihinde kaynağından . Erişim tarihi: 19 Şubat 2021.
- ^ "Portability - WebAssembly". webassembly.org. 28 Temmuz 2020 tarihinde kaynağından . Erişim tarihi: 28 Temmuz 2020.
- ^ "Conventions — WebAssembly 1.0". webassembly.github.io. 21 Ekim 2019 tarihinde kaynağından . Erişim tarihi: 12 Kasım 2019.
- ^ "Introduction — WebAssembly 1.0". webassembly.github.io. 2 Haziran 2021 tarihinde kaynağından . Erişim tarihi: 17 Mayıs 2019.
- ^ "Instructions — WebAssembly 1.0". webassembly.github.io. 21 Ekim 2019 tarihinde kaynağından . Erişim tarihi: 12 Kasım 2019.
- ^ Thomas (19 Şubat 2021). "Final opcodes by tlively · Pull Request #452 · WebAssembly/simd · GitHub". Bytecode Alliance. 30 Ekim 2022 tarihinde kaynağından . Erişim tarihi: 12 Mayıs 2021 – GitHub vasıtasıyla.
- ^ Yury (19 Şubat 2021). "File wasm-tools/expr.rs at b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub". Bytecode Alliance. 22 Mayıs 2022 tarihinde kaynağından . Erişim tarihi: 12 Mayıs 2021 – GitHub vasıtasıyla.
- ^ "Update interpreter and text with finalized opcodes by ngzhian · Pull Request #486 · WebAssembly/simd". GitHub (İngilizce). 30 Ekim 2022 tarihinde kaynağından . Erişim tarihi: 14 Mayıs 2021.
- ^ "WebAssembly/simd". GitHub (İngilizce). 10 Mayıs 2021 tarihinde kaynağından . Erişim tarihi: 14 Mayıs 2021.
- ^ WebAssembly/relaxed-simd, WebAssembly, 3 Mayıs 2021, 17 Nisan 2022 tarihinde kaynağından , erişim tarihi: 14 Mayıs 2021
- ^ "How we made the JVM 40x faster". astojanov.github.io. 26 Aralık 2020 tarihinde kaynağından . Erişim tarihi: 17 Şubat 2021.
- ^ WebAssembly Community Group (January 2020). "WebAssembly Specification Release 1.0". 21 Ekim 2019 tarihinde kaynağından . Erişim tarihi: 13 Ocak 2020.
- ^ "Modules (Binary)". WebAssembly 1.0. 30 Ekim 2022 tarihinde kaynağından . Erişim tarihi: 3 Kasım 2022.
- ^ "WebAssembly Binary Toolkit (wabt) demos". webassembly.github.io. 30 Ekim 2022 tarihinde kaynağından . 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
- https://webassembly.org/ 9 Temmuz 2022 tarihinde Wayback Machine sitesinde .
- W3C Community Group 18 Haziran 2015 tarihinde Wayback Machine sitesinde .
- WebAssembly Design 1 Nisan 2021 tarihinde Wayback Machine sitesinde .
- "WebAssembly", MDN Web Docs (İngilizce), 13 Mayıs 2022 tarihinde kaynağından , erişim tarihi: 3 Kasım 2022 – with info on browser compatibility and specifications (WebAssembly JavaScript API)
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
WebAssembly bazen Wasm olarak da kisaltilir yurutulebilir programlar icin tasinabilir bir ikili kod bicimine karsilik gelen bir metin bicimidir Bunun yani sira bu tur programlar ve bunlarin ana bilgisayar ortami arasindaki etkilesimleri kolaylastirmak icin yazilim arabirimlerini de ifade eder WebAssemblyWebAssembly Logo svgParadigmasiyapisal TasarimciW3CGelistiriciW3CMozillaMicrosoftGoogleAppleIsletim sistemiCapraz platform WebAssembly nin temel amaci web sayfalarinda yuksek performansli uygulamalari mumkun hale getirmektir Ancak bunun sadece Web de kullanilacagina dair bir varsayimda bulunmaz veya Web e ozgu ozellikler saglamaz Bu nedenle diger ortamlarda da kullanilabilir Acik bir standarttir ve herhangi bir isletim sistemindeki herhangi bir dili desteklemeyi amaclar Pratikte zaten populer dillerin tumu WebAssembly yi az da olsa desteklemektedir WebAssembly ilk olarak 2015 2015 yilinda aciklandi ve ilk olarak Mart 2017 2017 03 yayinlandi 5 Aralik 2019 da World Wide Web Konsorsiyumu onerisi oldu 2021 de ACM SIGPLAN dan Programlama Dilleri Yazilim Odulu nu aldi World Wide Web Konsorsiyumu W3C Mozilla Microsoft Google Apple Fastly Intel ve Red Hat in destegiyle standartlarini korumaktadir TarihceWebAssembly ilk olarak 2015 te duyuruldu Unity nin Angry Bots unun Firefox Google Chrome ve Microsoft Edge de yurutulmesiyle de ilk gosterimi yapildi WebAssembly nin oncu teknolojiler Mozilla dan asm js ve Google Native Client idi ve ilk uygulama asm js ozellik kumesine dayaniyordu asm js teknolojisi zaten yerel kod yurutme hizlarina yakin bir hiz saglar ve WebAssembly yi desteklemeyen veya guvenlik nedeniyle devre disi birakilmis tarayicilar icin uygun bir alternatif olarak kabul edilebilir Mart 2017 de minimum uygulanabilir urun MVP tasariminin bittigi ilan edildi ve onizleme asamasi sona erdi Eylul 2017 nin sonlarinda Safari 11 piyasaya WebAssembly destegiyle suruldu WebAssembly Calisma Grubu Subat 2018 de Temel Spesifikasyon JavaScript Arayuzu ve Web API icin uc genel calisma taslagi yayinladi Chrome 75 Haziran 2019 da WebAssembly is parcaciklari varsayilan olarak etkinlestirilmis olarak piyasaya suruldu Nisan 2022 den bu yana WebAssembly 2 0 taslak durumundadir Bu bir ozellik degisikligi degildir Bazi uzantilari ana surume entegre etmek icindir UygulamalarWebAssembly amaci baslangicta web tarayicisinda yerel kod yurutme hizina yakin bir hiz saglamak olsa da bunun disinda baska alanlarda da onemli hale gelmistir WebAssembly nin calisma zamani ortamlari RE ana bilgisayar uygulamalarina yerlestirilebilen dusuk seviyeli sanal yigin makineleri JVM veya Flash VM ye benzer oldugundan bazilari Wasmtime ve Wasmer gibi bagimsiz calisma zamani ortamlarinin bir yolunu buldu Internet tarayicilari Mozilla Kasim 2017 de WebAssembly Edge 16 da varsayilan olarak etkinlestirildikten sonra tum buyuk tarayicilarda destegi acikladi Bu destege iOS ve Android icin mobil web tarayicilari da dahildir Ekim 2022 2022 10 itibariyla yuklu tarayicilarin 96 si WebAssembly yi surum 1 0 destekler Daha eski tarayicilar icin Wasm bir JavaScript polyfill tarafindan asm js ye de derlenebilir DerleyicilerWebAssembly uygulamalari genellikle onceden AOT veya tam zamaninda JIT derleme kullanir Ama bir yorumlayici da kullanabilir Ilk uygulamalar web tarayicilarina yonelik gelistirilmis olsa da Wasmer Wasmtime veya WAMR wasm3 WAVM ve digerleri dahil olmak uzere genel amacli kullanim icin tarayici olmayan uygulamalar da vardir WebAssembly yurutulebilir dosyalari onceden derlendiginden gelistirme yapmak icin cesitli programlama dilleri kullanmak mumkundur Bu ya dogrudan Wasm a derleme yoluyla ya da Wasm da karsilik gelen sanal makinelerin uygulanmasi yoluyla elde edilir Wasm i bir derleme hedefi olarak destekledigi bildirilen yaklasik 40 programlama dili vardir Emscripten Binaryen ve LLVM yi arka uc olarak kullanarak C ve C i Wasm a derler Emscripten SDK herhangi bir LLVM destekli dilin digerlerinin yani sira C C veya Rust gibi kaynak kodunu JavaScript koduyla ayni sanal alanda calisan bir ikili dosyada derleyebilir Emscripten WebGL gibi yaygin olarak kullanilan birkac ortam arabirimi icin baglamalar saglar Clang derleyicisi surum 8 den itibaren C ve C i kodlarini Wasm a derleyebilir Ilk amaci Rust gibi diger kaynak dilleri desteklemekle birlikte C ve C den derlemeyi desteklemektir NET dilleri ve TypeScript benzeri de ortaya cikiyor MVP surumunden sonra WebAssembly i C tarafindan desteklenir F Bolero ile desteklenir gibi copten toplanan programlama dilleri icin bir derleme hedefi yapacak coklu is parcacigi ve cop toplamayi destekleme planlari vardir Blazor un yardimi Python ve hatta tarayicinin tam zamaninda derleme hizinin cok yavas oldugu dusunulen JavaScript Python Julia ve Ruby dahil olmak uzere bir dizi baska dilin destegi vardir SinirlamalarGenel olarak WebAssembly DOM ile dogrudan etkilesime izin vermez Tum etkilesim JavaScript birlikte calismasi yoluyla akmalidir Cop toplamanin olmamasi bununla ilgili planlar vardir Guvenlik endiseleri asagida tartisilmistir WebAssembly masaustlerinde ve mobil cihazlarda desteklenir Ama ikincisinde pratikte Unity oyun motoru gibi kucuk olmayan bellek tahsisleri icin bircok uygulamanin mobil tarayicilarda guvenilir bir sekilde dagitilmasini imkansiz kilan ciddi sinirlamalar vardir Su anda yaklasik 300 MB den fazla bellek ayirma Chrome a ozgu gecici cozumlere basvurmadan Android de Chrome da veya iOS ta Safari de guvenilir degildir Webassebly nin dogrudan Belge Nesne Modeli DOM erisimi yoktur Bununla birlikte ornegin Rust dilini kullanirken stdweb veya web sys araciligiyla bunun icin proxy islevleri olusturmak mumkundur Tum buyuk web tarayicilari Icerik Guvenlik Politikasi belirtilmemisse veya guvenli olmayan degerlendirme kullaniliyorsa WebAssembly ye izin verir ancak bunun disinda buyuk web tarayicilari farkli davranir Uygulamada WebAssembly bir calisan is parcacigi gecici cozumu mevcutken guvenli olmayan degerlendirme olmadan Chrome da kullanilamaz Guvenlik endiseleriHaziran 2018 de bir guvenlik arastirmacisi paylasilan bellege sahip is parcaciklari icin destek eklendikten sonra Spectre ve Meltdown guvenlik aciklarina yonelik tarayici azaltmalarini atlatmak icin WebAssembly kullanma olasiligini sundu Bu endise nedeniyle WebAssembly gelistiricileri ozelligi beklemeye aldi Ancak gelecekteki bu dil uzantilarini kesfetmek icin Google Chrome Ekim 2018 de WebAssembly is parcacigi teklifi icin deneysel destek ekledi WebAssembly kotu amacli yazilim yazarlari dolandiricilar ve kimlik avi saldirganlari icin kanitlari gizlemeyi daha kolay sagladigi icin elestirilmistir WebAssembly kullanicinin makinesinde yalnizca kotu amacli yazilim tespitini zorlastiran derlenmis biciminde bulunur WebAssembly nin hizi ve gizlenebilirligi web sitesi ziyaretcisinin cihazinda gizli kripto madenciliginde kullanilmasina yol acmistir Web sitesi ziyaretcilerinin tarayicilarinda kripto para madenciligini kolaylastiran artik feshedilmis bir hizmet olan Coinhive madencilerinin WebAssembly kullandigini ve yerel bir Madencinin performansinin yaklasik 65 i ile calistigini iddia ediyor Technische Universitat Braunschweig in Haziran 2019 da yaptigi bir arastirma Alexa ilk 1 de WebAssembly kullanimini analiz etti Milyonlarca web sitesi ve yaygin kullanimin kotu amacli kripto madenciligi icin oldugunu ve bu kotu amacli yazilimin incelenen WebAssembly kullanan web sitelerinin yarisindan fazlasini olusturdugunu tespit etti Universitat Stuttgart tan Nisan 2021 de yapilan bir arastirma o zamandan beri kripto madenciliginin marjinallestirildigini ve Alexa nin en iyi 1 milyon web sitesi de dahil olmak uzere cok cesitli kaynaklardan toplanan tum WebAssembly modullerinin 1 inin altina dustugunu buldu Buyuk miktarda kodu etkili bir sekilde gizleme yetenegi Privacy Badger gibi web izlemeyi engelleyen reklam engelleme ve gizlilik araclarini devre disi birakmak icin de kullanilabilir WebAssembly yalnizca yapilandirilmis kontrol akisini desteklediginden sembolik yurutme dahil guvenlik dogrulama tekniklerine uygundur Bu yondeki mevcut cabalar Manticore sembolik yurutme motorunu icerir WASIWebAssembly Sistem Arayuzu WASI Mozilla tarafindan herhangi bir platforma tasinabilir olmasi amaclanan basit bir arayuzdur ABI ve API Yetenek tabanli guvenlik tarafindan kisitlanmis dosya G C gibi POSIX benzeri ozellikler saglar Ayrica onerilen birkac ABI API daha vardir WASI gelistirilirken CloudABI ve Capsicum dan esinlenilmistir Docker in kurucularindan Solomon Hykes 2019 da WASI hakkinda sunlari yazmistir Eger WASM WASI 2008 de olsaydi Docker i yaratmamiz gerekmezdi Iste bu kadar onemli Sunucudaki WebAssembly bilgi islemin gelecegidir 1 0 surumundeki Wasmer yazilim kapsayiciligi saglar Linux macOS Windows ve web tarayicilari gibi isletim sistemleri de dahil olmak uzere herhangi bir yerde degisiklik yapilmadan calisan evrensel ikili dosyalar olustururuz Wasm guvenli yurutme icin varsayilan olarak uygulamalari otomatik olarak sandbox lar SartnameAna bilgisayar ortami Genel standart JavaScript API icin temel ozellikleri ve gommeyle ilgili ayrintilari saglar Sanal makine Wasm kodu ikili kod yani bayt kodu tasinabilir bir sanal yigin makinesinde VM calistirilmak uzere tasarlanmistir VM JavaScript ten daha hizli ayristirmak ve yurutmek ve kompakt bir kod temsiline sahip olacak sekilde tasarlanmistir Wasm ikili kodu tarafindan beklenebilecek harici bir islevsellik syscalls gibi standart tarafindan sart kosulmamistir Bunun yerine VM uygulamasinin icinde calistigi ana bilgisayar ortami tarafindan moduller araciligiyla arabirim saglamanin bir yolunu saglar Wasm programi Bir Wasm programi cesitli Wasm tanimli degerlerin ve program tipi tanimlarinin koleksiyonlarini iceren ayri bir modul olacak sekilde tasarlanmistir Bunlar her ikisi de ortak bir yapiya sahip olan ikili veya metin biciminde asagiya bakiniz ifade edilir Komut seti Bir Wasm programinin ikili formati icin temel standart VM tarafindan yurutulen islem turlerinin tam olarak nasil yurutulmeleri gerektigini belirtmeden belirli ikili kodlamalarindan olusan bir talimat seti mimarisini ISA tanimlar Talimat listesi standart bellek yukleme depolama talimatlarini sayisal parametrik akis talimati turlerinin kontrolunu ve Wasm e ozgu degisken talimatlari icerir Orijinal standartta MVP kullanilan islem kodu sayisi 256 olasi islem kodunun 200 unden biraz daha azdi WebAssembly nin sonraki surumleri islem kodlarinin sayisini 200 un biraz uzerine cikardi WebAssembly SIMD onerisi paralel isleme icin 128 bit SIMD icin alternatif bir islem kodu oneki 0xfd sunar SIMD onekinin siralanmasi ve SIMD onekinden sonra gecerli olan bir islem kodu bir SIMD islem kodu olusturur SIMD islem kodlari minimum gecerli urun MVP SIMD ozelligi icin ek 236 talimat getirir toplam yaklasik 436 talimat icin Bu talimatlar sonlandirilmis islem kodlari Google in V8 inde Google Chrome da ve Mozilla Firefox taki ilgili motorda ancak web tarayicilarinin kararli surumlerinde etkinlestirilmemistir uygulanir ve ayrica bazilari vardir daha sonra SIMD MVP sonrasi icin talimatlar icin ek teklif ve ayrica masada ayri bir rahat simd teklifi var Bu SIMD islem kodlari ayrica tasinabilirdir ve x64 ve ARM gibi yerel komut setlerine cevrilir Buna karsilik ne Java nin JVM si ne de CIL opcode duzeyinde yani standartta SIMD yi desteklemez her ikisi de SIMD hizlandirma saglayan bazi paralel API lere sahiptir Java icin tasinabilir olmayan yani ARM veya akilli telefonlarda kullanilamayan x64 SIMD icin gercekler ekleyen bir uzanti vardir Akilli telefonlar SIMD ile montaj kodunu cagirarak SIMD yi destekleyebilir ve C da benzer bir destege sahiptir Kod gosterimi Mart 2017 de WebAssembly Topluluk Grubu ilk MVP ikili bicim JavaScript API ve referans yorumlayici uzerinde fikir birligine vardi Insanlar tarafindan kullanilmak uzere tasarlanmayan bir WebAssembly ikili bicimini wasm ve S ifadeleri ile geleneksel derleme dilleri arasinda bir capraza benzeyen insan tarafindan okunabilen bir WebAssembly metin bicimini wat tanimlar Asagidaki tablo C ile yazilmis bir faktoriyel fonksiyonun bir ornegini ve derlemeden sonra karsilik gelen WebAssembly kodunu gostermektedir wat metin bicimi WebAssembly nin insan tarafindan okunabilir bir metin gosterimi ve wasm Web tarayicisi veya WebAssembly i destekleyen calisma zamani ortami tarafindan yurutulen ikili bicimi asagida onaltilik olarak ifade edilen ham bayt kodu C kaynak kodu ve ilgili WebAssembly C kaynak kodu WebAssembly wat metin bicimi WebAssembly wasm ikili bicimiint 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 Tum tam sayi sabitleri alan acisindan verimli degisken uzunluklu bir LEB128 kodlamasi kullanilarak kodlanir WebAssembly metin bicimi S ifadeleri kullanilarak katlanmis bir bicimde daha kuralli olarak yazilir Talimatlar ve ifadeler icin bu format tamamen sozdizimsel sekerdir ve dogrusal formatla davranissal farkliliklari yoktur wasm2wat araciligiyla yukaridaki kod su sekilde 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 modulun derleyici tarafindan ortuk olarak olusturuldugunu unutmayin Isleve aslinda ikili dosyadaki tur tablosunun bir girisi tarafindan basvurulur dolayisiyla bir tur bolumu ve kod cozucu tarafindan yayilan type Derleyici ve kod cozucuye cevrimici olarak erisilebilir NotlarAyrica bakinizMimari Tarafsiz Dagitim Formati ANDF UNCOL Java bayt kodu Ortak dil calismasi LLVM Derleme Yazilim tasinabilirligiNotlar According to official documentation the Emscripten SDK may be used to create wasm files which then may be executed in a web browser Even though Emscripten can consume various languages when using Clang some problems may arise Kaynakca WebAssembly design Semantics md GitHub Ingilizce 15 Haziran 2021 tarihinde kaynagindan Erisim tarihi 23 Subat 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 Understanding WebAssembly text format MDN Web Docs 5 Subat 2022 tarihinde kaynagindan Erisim tarihi 9 Aralik 2019 Introduction WebAssembly 1 0 webassembly github io 22 Kasim 2021 tarihinde kaynagindan Erisim tarihi 18 Haziran 2019 WebAssembly is an open standard Introduction WebAssembly 1 0 webassembly github io 22 Kasim 2021 tarihinde kaynagindan Erisim tarihi 18 Haziran 2019 WebAssembly is a code format a b Conventions WebAssembly 1 0 webassembly github io 6 Mayis 2019 tarihinde kaynagindan Erisim tarihi 17 Mayis 2019 WebAssembly is a programming language that has multiple concrete representations its binary format and the text format Both map to a common structure Introduction WebAssembly 1 0 webassembly github io 22 Kasim 2021 tarihinde kaynagindan Erisim 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 Introduction WebAssembly 1 1 webassembly github io 22 Kasim 2021 tarihinde kaynagindan Erisim tarihi 19 Subat 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 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 a b c Outside the web standalone WebAssembly binaries using Emscripten V8 v8 dev 19 Temmuz 2020 tarihinde kaynagindan Erisim tarihi 28 Temmuz 2020 a b c Wasmer The Universal WebAssembly Runtime wasmer io 2 Mart 2021 tarihinde kaynagindan Erisim tarihi 19 Subat 2021 Compile everything to WebAssembly Run it on any OS or embed it into other languages WebAssembly Core Specification World Wide Web Consortium W3 6 Aralik 2019 tarihinde kaynagindan Erisim tarihi 9 Aralik 2019 WebAssembly 1 0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers infoq com 25 Kasim 2021 tarihinde kaynagindan Erisim tarihi 9 Aralik 2019 WebAssembly Specification WebAssembly 1 1 webassembly github io 17 Mart 2021 tarihinde kaynagindan Erisim tarihi 22 Mart 2021 Programming Languages Software Award www sigplan org 29 Ekim 2022 tarihinde kaynagindan Erisim tarihi 3 Kasim 2022 Staring at the Sun Dalvik vs ASM js vs Native blog mozilla org 7 Aralik 2019 tarihinde kaynagindan Erisim tarihi 7 Aralik 2019 Even discarding the one score where asm js did better it executes at around 70 of the speed of native C code Arjun Jangda Abhinav Powers Bobby Berger Emery Guha 25 Ocak 2019 Not So Fast Analyzing the Performance of WebAssembly vs Native Code OCLC 1106328738 WebAssembly Worker Based Threads Chrome Platform Status chromestatus com 19 Subat 2022 tarihinde kaynagindan Erisim tarihi 19 Subat 2022 WebAssembly Specification WebAssembly 2 0 Draft 2022 09 01 webassembly github io 22 Eylul 2022 tarihinde kaynagindan Erisim tarihi 9 Eylul 2022 WebAssembly 2 0 First Public Working Drafts W3C News Ingilizce 9 Eylul 2022 tarihinde kaynagindan Erisim tarihi 9 Eylul 2022 Non Web Embeddings WebAssembly 15 Mayis 2019 tarihinde kaynagindan Erisim tarihi 15 Mayis 2019 Non Web Embeddings GitHub WebAssembly 13 Kasim 2020 tarihinde kaynagindan Erisim tarihi 15 Mayis 2019 Wasmtime a small and efficient runtime for WebAssembly amp WASI wasmtime dev 4 Aralik 2020 tarihinde kaynagindan Erisim tarihi 18 Aralik 2020 Roadmap 7 Aralik 2021 tarihinde kaynagindan Erisim tarihi 7 Aralik 2021 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 Tweet Retrieved 22 Ekim 2019 Twitter araciligiyla Developer s Guide WebAssembly webassembly org 19 Mayis 2019 tarihinde kaynagindan Erisim tarihi 10 Haziran 2019 Compiling a New C C Module to WebAssembly MDN Web Docs Ingilizce 8 Haziran 2019 tarihinde kaynagindan Erisim tarihi 10 Haziran 2019 Building to WebAssembly Emscripten 1 38 33 documentation emscripten org 24 Mart 2019 tarihinde kaynagindan Erisim tarihi 10 Haziran 2019 Emscripting a C library to Wasm Web Google Developers Ingilizce 1 Agustos 2019 tarihinde kaynagindan Erisim tarihi 10 Haziran 2019 LLVM 8 0 0 Release Notes LLVM 8 documentation releases llvm org 22 Ekim 2019 tarihinde kaynagindan Erisim tarihi 22 Ekim 2019 Frequently asked questions FAQ about Blazor blazor net 18 Haziran 2018 tarihinde kaynagindan Erisim tarihi 18 Haziran 2018 AssemblyScript assemblyscript The AssemblyScript Project 9 Eylul 2020 11 Eylul 2020 tarihinde kaynagindan erisim tarihi 9 Eylul 2020 Bolero F in WebAssembly fsbolero io 4 Haziran 2019 tarihinde kaynagindan Erisim tarihi 25 Temmuz 2019 Garbage collection Issue 16 WebAssembly proposals GitHub Ingilizce 18 Ocak 2020 tarihinde kaynagindan Erisim tarihi 25 Temmuz 2019 Pyodide Bringing the scientific Python stack to the browser Mozilla Hacks the Web developer blog Mozilla Hacks the Web developer blog Ingilizce 3 Eylul 2020 tarihinde kaynagindan Erisim tarihi 9 Eylul 2020 Julia in the Browser nextjournal com 24 Mart 2019 tarihinde kaynagindan Erisim tarihi 9 Nisan 2019 WebAssembly platform by tshort Pull Request 2 JuliaPackaging Yggdrasil GitHub Ingilizce 30 Ekim 2022 tarihinde kaynagindan Erisim tarihi 9 Nisan 2019 Keno 22 Temmuz 2019 GitHub Keno julia wasm Running julia on wasm 21 Kasim 2020 tarihinde kaynagindan erisim tarihi 25 Temmuz 2019 MRuby in Your Browser ruby dj 8 Agustos 2019 tarihinde kaynagindan Erisim tarihi 25 Temmuz 2019 Wasm needs a better memory management story Issue 1397 WebAssembly design GitHub Ingilizce 27 Mart 2021 tarihinde kaynagindan Erisim tarihi 15 Subat 2021 stdweb Rust docs rs 21 Subat 2019 tarihinde kaynagindan Erisim 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 web sys Rust docs rs 15 Mayis 2020 tarihinde kaynagindan Erisim 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 WebAssembly content security policy GitHub Ingilizce 12 Eylul 2020 tarihinde kaynagindan Erisim tarihi 17 Subat 2021 948834 chromium An open source project to help move the web forward Monorail bugs chromium org 2 Haziran 2021 tarihinde kaynagindan Erisim tarihi 17 Subat 2021 a b No way to use WebAssembly on Chrome without unsafe eval Issue 7 WebAssembly content security policy GitHub Ingilizce 18 Mart 2021 tarihinde kaynagindan Erisim tarihi 17 Subat 2021 a b c In browser mining Coinhive and WebAssembly Ingilizce Forcepoint 19 Nisan 2018 9 Haziran 2019 tarihinde kaynagindan Erisim tarihi 8 Haziran 2019 Changes in WebAssembly Could Render Meltdown and Spectre Browser Patches Useless Ingilizce 24 Haziran 2018 10 Temmuz 2019 tarihinde kaynagindan Erisim tarihi 8 Haziran 2019 How opaque WebAssembly code could increase the risk of Spectre attacks online Ingilizce 25 Haziran 2018 9 Haziran 2019 tarihinde kaynagindan Erisim tarihi 9 Haziran 2019 Google Chrome 70 now supports WebAssembly threads to build multi threaded web applications Packt Pub 30 Ekim 2018 18 Nisan 2019 tarihinde kaynagindan Erisim tarihi 9 Haziran 2019 a b The dark side of WebAssembly October 2018 9 Haziran 2019 tarihinde kaynagindan Erisim tarihi 8 Haziran 2019 Persistent drive by cryptomining coming to a browser near you Malwarebytes 29 Kasim 2017 15 Nisan 2019 tarihinde kaynagindan Erisim tarihi 8 Haziran 2019 Recent Study Estimates That 50 of Websites Using WebAssembly Apply It for Malicious Purposes InfoQ 31 Ekim 2019 tarihinde kaynagindan Erisim tarihi 3 Kasim 2019 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 June 2019 ss 23 42 doi 10 1007 978 3 030 22038 9 2 ISBN 978 3 030 22037 2 26 Temmuz 2022 tarihinde kaynagindan PDF Erisim tarihi 15 Subat 2022 Aaron Hilbig Daniel Lehmann and Michael Pradel April 2021 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 Ingilizce Los Angeles CA USA ACM 53 65 doi 10 1145 3167082 ISBN 978 1 4503 5586 5 30 Ekim 2022 tarihinde kaynagindan Erisim tarihi 3 Kasim 2022 WebAssembly System Interface Repo GitHub WebAssembly 10 Subat 2020 30 Ekim 2022 tarihinde kaynagindan Erisim tarihi 3 Kasim 2022 Additional background on Capabilities GitHub Ingilizce bytecodealliance 4 Mart 2022 24 Subat 2020 tarihinde kaynagindan Erisim tarihi 3 Kasim 2022 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 kaynagindan Erisim tarihi 3 Kasim 2022 GitHub WebAssembly 12 Ocak 2020 21 Agustos 2022 tarihinde kaynagindan arsivlendi wasm c api Repo GitHub WebAssembly 3 Subat 2020 31 Ekim 2022 tarihinde kaynagindan Erisim tarihi 3 Kasim 2022 a b The Wasmer WebAssembly Runtime is Generally Available InfoQ Ingilizce 27 Subat 2021 tarihinde kaynagindan Erisim tarihi 19 Subat 2021 Portability WebAssembly webassembly org 28 Temmuz 2020 tarihinde kaynagindan Erisim tarihi 28 Temmuz 2020 Conventions WebAssembly 1 0 webassembly github io 21 Ekim 2019 tarihinde kaynagindan Erisim tarihi 12 Kasim 2019 Introduction WebAssembly 1 0 webassembly github io 2 Haziran 2021 tarihinde kaynagindan Erisim tarihi 17 Mayis 2019 Instructions WebAssembly 1 0 webassembly github io 21 Ekim 2019 tarihinde kaynagindan Erisim tarihi 12 Kasim 2019 Thomas 19 Subat 2021 Final opcodes by tlively Pull Request 452 WebAssembly simd GitHub Bytecode Alliance 30 Ekim 2022 tarihinde kaynagindan Erisim tarihi 12 Mayis 2021 GitHub vasitasiyla Yury 19 Subat 2021 File wasm tools expr rs at b5c3d98e40590512a3b12470ef358d5c7b983b15 bytecodealliance wasm tools GitHub Bytecode Alliance 22 Mayis 2022 tarihinde kaynagindan Erisim tarihi 12 Mayis 2021 GitHub vasitasiyla Update interpreter and text with finalized opcodes by ngzhian Pull Request 486 WebAssembly simd GitHub Ingilizce 30 Ekim 2022 tarihinde kaynagindan Erisim tarihi 14 Mayis 2021 WebAssembly simd GitHub Ingilizce 10 Mayis 2021 tarihinde kaynagindan Erisim tarihi 14 Mayis 2021 WebAssembly relaxed simd WebAssembly 3 Mayis 2021 17 Nisan 2022 tarihinde kaynagindan erisim tarihi 14 Mayis 2021 How we made the JVM 40x faster astojanov github io 26 Aralik 2020 tarihinde kaynagindan Erisim tarihi 17 Subat 2021 WebAssembly Community Group January 2020 WebAssembly Specification Release 1 0 21 Ekim 2019 tarihinde kaynagindan Erisim tarihi 13 Ocak 2020 Modules Binary WebAssembly 1 0 30 Ekim 2022 tarihinde kaynagindan Erisim tarihi 3 Kasim 2022 WebAssembly Binary Toolkit wabt demos webassembly github io 30 Ekim 2022 tarihinde kaynagindan Erisim tarihi 3 Kasim 2022 Bu madde bir Ozgur icerik calismasindan metin icermektedir Metin suradan alinmistir Dis baglantilarhttps webassembly org 9 Temmuz 2022 tarihinde Wayback Machine sitesinde W3C Community Group 18 Haziran 2015 tarihinde Wayback Machine sitesinde WebAssembly Design 1 Nisan 2021 tarihinde Wayback Machine sitesinde WebAssembly MDN Web Docs Ingilizce 13 Mayis 2022 tarihinde kaynagindan erisim tarihi 3 Kasim 2022 with info on browser compatibility and specifications WebAssembly JavaScript API