WebAssembly або wasm — незалежний від браузера універсальний низькорівневий проміжний код для виконання в браузері застосунків, скомпільованих з різних мов програмування. Серед основних завдань WebAssembly виділяється забезпечення перенесення між браузерами, передбачуваність поведінки та ідентичності виконання коду на різних платформах. Використання WebAssembly також дозволить істотно скоротити розмір застосунків, завдяки компактному проміжному коду, і збільшити швидкість декодування.
WebAssembly | |
---|---|
Парадигма | Expression-oriented |
Дата появи | 2015 |
Останній реліз | 2.0 (1 червня 2022) |
Система типізації | статична |
Під впливом від | asm.jsd і Google Native Clientd |
Платформа | платформо-незалежна |
Ліцензія | Apache License |
Звичайні розширення файлів | .wast або .wasm |
Репозиторій вихідного коду | github.com/WebAssembly/spec github.com/WebAssembly/design |
Вебсайт | webassembly.org |
WebAssembly у Вікісховищі |
Робоча група зі стандартизації технології WebAssembly сформована при організації W3C з представників проектів Google Chrome, Microsoft Edge, Firefox і WebKit.
Особливості Редагувати
З особливостей WebAssembly, що дозволяють домогтися вищої продуктивності, в порівнянні з JavaScript, виділяється:
- компактніше представлення WebAssembly дозволяє скоротити час завантаження, у порівнянні із завантаженням навіть стисненого JavaScript;
- декодування WebAssembly займає значно менше часу в порівнянні з парсингом програмного коду JavaScript;
- компіляція і оптимізація виконуються швидше, бо WebAssembly ближчий до машинного коду і вже пройшов стадії оптимізації на етапі компіляції розробником;
- не потрібно виконання операції повторної оптимізації, що враховує статистику про змінні, отриману при виконанні застосунку, бо в WebAssembly спочатку присутня інформація про типи, яку JavaScript змушений обчислювати на ходу в залежності від контексту;
- виконання WebAssembly займає менше часу, бо можна обійтися без хитрощів і прийомів, які повинен використовувати розробник для підвищення швидкодії JavaScript. Крім того, бінарний формат WebAssembly значно ближчий до машинного коду;
- у WebAssembly не потрібно застосування збирача сміття, бо застосовується явне управління пам'яттю.
Відпочатку WebAssembly створювався на основі розробок asm.js та PNaCl. Основна відмінність від Asm.js полягає в тому, що WebAssembly є бінарним форматом, що не зав'язується на JavaScript і дозволяє виконувати в браузері низькорівневий проміжний код. На відміну від PNaCl, проміжний код WASM не є машинним кодом і не ізольований в окремій віртуальній машині, а виконується зі схожим на JavaScript рівнем ізоляції.
Для розробників підготовлено інструментарій для компіляції модулів WebAssembly з коду мовами C/C++. Наприклад, для компіляції С/C++/asm.js в WebAssembly можна використовувати Emscripten або створений на його основі спеціальний компілятор Binaryen. Для перетворення тестового формату в бінарний поставляється транслятор WABT.
Історія Редагувати
WebAssembly був анонсований 17 червня 2015, а 15 березня 2016 був показаний робочий Angry Bots на Unity у Firefox, Chromium, Google Chrome, та Microsoft Edge.
У лютому 2017 робоча група зі стандартизації WebAssembly вирішила, що бінарний формат і початковий WebAssembly API досягли рівня MVP (мінімально життєздатний продукт), що дає розробникам браузерів зелене світло на включення WebAssembly за умовчанням.
WebAssembly включений за умовчанням у браузерах Firefox 52 та Chrome 57 у березні 2017.
Примітки Редагувати
- http://webassembly.org/roadmap/
- Release 2.0 — 2022.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
- ↑ Bright, Peter (18 червня 2015). . Ars Technica. Condé Nast. Архів оригіналу за 21 листопада 2015. Процитовано 16 березня 2017.
- . Архів оригіналу за 16 березня 2017. Процитовано 16 березня 2017.
- . ②ality — JavaScript and more. 18 червня 2015. Архів оригіналу за 5 лютого 2016. Процитовано 16 березня 2017.
- . GitHub / WebAssembly / design. 11 червня 2015. Архів оригіналу за 21 листопада 2021. Процитовано 17 березня 2017.
- Wagner, Luke (14 березня 2016). . Mozilla Hacks. Архів оригіналу за 11 серпня 2017. Процитовано 17 березня 2017.
- Thompson, Seth (15 березня 2016). . V8 Blog. Архів оригіналу за 31 березня 2017. Процитовано 17 березня 2017.
- Zhu, Limin (15 березня 2016). . Microsoft Edge dev blog. Архів оригіналу за 18 серпня 2021. Процитовано 17 березня 2017.
- . Архів оригіналу за 9 березня 2017. Процитовано 16 березня 2017.
- . Архів оригіналу за 27 травня 2017. Процитовано 16 березня 2017.
- . Архів оригіналу за 16 березня 2017. Процитовано 16 березня 2017.
Посилання Редагувати
- Офіційний сайт
- WebAssembly Community Group [ 18 червня 2015 у Wayback Machine.]
- WebAssembly Design [ 1 квітня 2021 у Wayback Machine.]