WebAssembly — portativ ikili kod formatını və çalışdırıla bilən proqramlar[4] üçün müvafiq mətn formatını, həmçinin bu cür proqramlar və onların əsas mühiti arasında qarşılıqlı əlaqəni asanlaşdırmaq üçün proqram interfeyslərini təyin edən proqramlaşdırma dili.[5][6]
| WebAssembly | |
|---|---|
| | |
| Paradiqmalar | Strukturlu proqramlaşdırma |
| Yaradılma tarixi | 2015[2] |
| Müəlliflər | W3C |
| W3C, Microsoft, Google, Mozilla, Apple Inc. | |
| Fayl sonluğu |
.wast və ya .wasm[3] |
| Sonuncu versiyası |
|
| Təsirlənib | asm.js[d], Google Native Client[d] |
| Lisenziya | Apache lisenziyası[d] |
| webassembly.org | |
WebAssembly-nin əsas məqsədi veb səhifələrdə yüksək performanslı tətbiqləri istifadəyə verməkdir, lakin o, vebə özəl fərziyyələr irəli sürmür və ya vebə özəl xüsusiyyətlər təmin etmir, ona görə də digər mühitlərdə də istifadə oluna bilər.[7] WebAssembly açıq standartdır[8][9] və istənilən əməliyyat sistemində istənilən dili dəstəkləməyi hədəfləyir[10] və praktikada ən populyar dillərin hamısı artıq ən azı müəyyən səviyyədə dəstəyə malikdir.
2015-ci ildə elan edilən və ilk dəfə 2017-ci ilin martında buraxılan WebAssembly 5 dekabr 2019-cu ildə W3C-nin tövsiyəsi oldu[11][12][13] və 2021-ci ildə ACM SIGPLAN-ın "Proqramlaşdırma i Proqramı Mükafatı"nı qazandı.[14] W3C Mozilla, Microsoft, Google, Apple, Fastly, Intel və Red Hat şirkətlərinin töhfələri ilə standartı idarə edir.[15][16]
WebAssembly, 1950-ci illərə aid bir termin olan assembler dili anlayışını oyandırmaq üçün adlandırılmışdır. Adı, istifadəçinin veb-brauzeri vasitəsilə veb-sayt istifadəçisinin kompüteri tərəfindən müştəri tərəfində icra ediləcəyi assemblerə bənzər proqramlaşdırmanın gətirilməsini təklif edir. Bunu həyata keçirmək üçün WebAssembly həqiqi assembler dilindən daha çox aparatdan asılı olmayan dil olmalıdır.
WebAssembly ilk dəfə 2015-ci ildə elan edildi[17] və ilk nümayişi Firefox,[18] Google Chrome[19] və Microsoft Edge-də[20] Unity-nin "Angry Bots" oyununu çalışdıra bilməsi idi. Əvvəlki texnologiyalar Mozilla-nın asm.js-i və Google Native Client[21][22] idi və ilk tətbiqi asm.js funksiyalar dəstinə əsaslanırdı.[23] asm.js texnologiyası onsuz da lokal kodun icra sürətini təmin edir[24][25] və WebAssembly-i dəstəkləməyən və ya təhlükəsizlik səbəbi ilə onu söndürən brauzerlər üçün əlverişli alternativ hesab edilə bilər.
2017-ci ilin mart ayında hazıra yaxın məhsulun dizaynının tamamlandığı elan edildi və ilkin test mərhələsi başa çatdı.[26] 2017-ci ilin sentyabr ayının sonunda Safari 11 WebAssembly dəstəyi ilə birlikdə buraxıldı. 2018-ci ilin fevral ayında WebAssembly İşçi Qrupu Əsas Spesifikasiya, JavaScript İnterfeysi və Veb API üçün üç ictimai iş layihəsini dərc etdi.[27][28][29][30]
2019-cu ilin iyun ayında Chrome 75 versiyasına defolt olaraq aktivləşdirilmiş WebAssembly tredləri funksiyası əlavə edildi.[31]
2022-ci ilin aprel ayından WebAssembly 2.0 qaralama statusundadır ki,[32][33] bu da SIMD ilə əlaqəli bir çox təlimat və yeni v128 data tipi, funksiyalar üçün çoxsaylı dəyər döndürmək imkanı və kütləvi yaddaşın işə salınması/kopyalanması xüsusiyyətini əlavə edir.
| C mənbə kodu | WebAssembly .wat mətn formatı | WebAssembly .wasm binar formatı |
|---|---|---|
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 06 01 60 01 7E 01 7E
03 02 01 00
0A 17 01
15 00
20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B
0B |
- ↑ Release 2.0. 2022.
- ↑ http://webassembly.org/roadmap/.
- ↑ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming.
- ↑ Mozilla. "Understanding WebAssembly text format". MDN Web Docs (ingilis). 5 fevral 2022 tarixində arxivləşdirilib. İstifadə tarixi: 9 dekabr 2019.
- ↑ "Introduction — WebAssembly 1.0". webassembly.github.io. 22 noyabr 2021 tarixində arxivləşdirilib. İstifadə tarixi: 18 iyun 2019.
- ↑ "Conventions — WebAssembly 1.0". webassembly.github.io. 6 may 2019 tarixində arxivləşdirilib. İstifadə tarixi: 17 may 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.1". webassembly.github.io. 22 noyabr 2021 tarixində arxivləşdirilib. İstifadə tarixi: 19 fevral 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, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF. "Bringing the Web Up to Speed with WebAssembly". SIGPLAN Notices. 52 (6). 14 iyun 2017: 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.
- ↑ "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. 19 iyul 2020 tarixində arxivləşdirilib. İstifadə tarixi: 28 iyul 2020.
- ↑ "Wasmer – The Universal WebAssembly Runtime". wasmer.io. 2 mart 2021 tarixində arxivləşdirilib. İstifadə tarixi: 19 fevral 2021.
Compile everything to WebAssembly. Run it on any OS or embed it into other languages.
- ↑ World Wide Web Consortium. "WebAssembly Core Specification". World Wide Web Consortium (W3). 6 dekabr 2019 tarixində arxivləşdirilib. İstifadə tarixi: 9 dekabr 2019.
- ↑ Couriol, Bruno. "WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers". infoq.com. 25 noyabr 2021 tarixində arxivləşdirilib. İstifadə tarixi: 9 dekabr 2019.
- ↑ "WebAssembly Specification — WebAssembly 1.1". webassembly.github.io. 22 sentyabr 2022 tarixində arxivləşdirilib. İstifadə tarixi: 22 mart 2021.
- ↑ "Programming Languages Software Award". www.sigplan.org. 29 oktyabr 2022 tarixində arxivləşdirilib. İstifadə tarixi: 7 noyabr 2023.
- ↑ Bright, Peter. "The Web is getting its bytecode: WebAssembly". Ars Technica. Condé Nast. 18 iyun 2015. 11 aprel 2019 tarixində arxivləşdirilib. İstifadə tarixi: 7 noyabr 2023.
- ↑ "New Bytecode Alliance Brings the Security, Ubiquity, and Interoperability of the Web to the World of Pervasive Computing". Mozilla (ingilis). 12 noyabr 2019. 10 dekabr 2019 tarixində arxivləşdirilib. İstifadə tarixi: 27 may 2019.
- ↑ "Launch bug". GitHub / WebAssembly / design. 11 iyun 2015. 21 noyabr 2021 tarixində arxivləşdirilib. İstifadə tarixi: 7 noyabr 2023.
- ↑ Wagner, Luke. "A WebAssembly Milestone: Experimental Support in Multiple Browsers". Mozilla Hacks. 14 mart 2016. 11 avqust 2017 tarixində arxivləşdirilib. İstifadə tarixi: 7 noyabr 2023.
- ↑ Thompson, Seth. "Experimental support for WebAssembly in V8". V8 Blog. 15 mart 2016. 9 fevral 2018 tarixində arxivləşdirilib. İstifadə tarixi: 7 noyabr 2023.
- ↑ Zhu, Limin. "Previewing WebAssembly experiments in Microsoft Edge". Microsoft Edge dev blog. 15 mart 2016. 18 avqust 2021 tarixində arxivləşdirilib. İstifadə tarixi: 7 noyabr 2023.
- ↑ Lardinois, Frederic. "Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web". TechCrunch (ingilis). 17 iyun 2015. 17 yanvar 2018 tarixində arxivləşdirilib. İstifadə tarixi: 24 dekabr 2017.
- ↑ Avram, Abel. "Google Is to Remove Support for PNaCl". InfoQ. 31 may 2017. 23 dekabr 2017 tarixində arxivləşdirilib. İstifadə tarixi: 22 dekabr 2017.
- ↑ "WebAssembly: a binary format for the web". ②ality – JavaScript and more. 18 iyun 2015. 6 noyabr 2023 tarixində arxivləşdirilib. İstifadə tarixi: 7 noyabr 2023.
- ↑ "Staring at the Sun: Dalvik vs. ASM.js vs. Native". blog.mozilla.org. avqust 2013. 7 dekabr 2019 tarixində arxivləşdirilib. İstifadə tarixi: 7 dekabr 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. Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code. 25 yanvar 2019. OCLC 1106328738.
- ↑ Krill, Paul. "WebAssembly is now ready for browsers to use". InfoWorld (ingilis). 6 mart 2017. 1 aprel 2020 tarixində arxivləşdirilib. İstifadə tarixi: 23 dekabr 2017.
- ↑ "WebAssembly First Public Working Drafts". W3C. 15 fevral 2018. 16 iyul 2021 tarixində arxivləşdirilib. İstifadə tarixi: 20 aprel 2018.
- ↑ "WebAssembly Core Specification". W3C. 15 fevral 2018. 8 mart 2021 tarixində arxivləşdirilib. İstifadə tarixi: 20 aprel 2018.
- ↑ "WebAssembly JavaScript Interface". W3C. 15 fevral 2018. 30 noyabr 2020 tarixində arxivləşdirilib. İstifadə tarixi: 20 aprel 2018.
- ↑ "WebAssembly Web API". W3C. 15 fevral 2018. 19 aprel 2021 tarixində arxivləşdirilib. İstifadə tarixi: 20 aprel 2018.
- ↑ "WebAssembly Worker Based Threads – Chrome Platform Status". chromestatus.com. 19 fevral 2022 tarixində arxivləşdirilib. İstifadə tarixi: 19 fevral 2022.
- ↑ "WebAssembly Specification — WebAssembly 2.0 (Draft 2022-09-01)". webassembly.github.io. 22 sentyabr 2022 tarixində arxivləşdirilib. İstifadə tarixi: 9 sentyabr 2022.
- ↑ "WebAssembly 2.0 First Public Working Drafts | W3C News" (ingilis). 19 aprel 2022. 9 sentyabr 2022 tarixində arxivləşdirilib. İstifadə tarixi: 9 sentyabr 2022.
- webassembly.org — rəsmi saytı
- W3C Community Group
- WebAssembly Design
- .wasm is WebAssembly Binary File
- "WebAssembly", MDN Web Docs (ingilis) – with info on browser compatibility and specifications (WebAssembly JavaScript API)