WebAssembly: значення, переваги, випадки використання тощо
Потрапили в ажіотаж щодо WebAssembly, але точно не знаєте, що це? Ось низький рівень.

WebAssembly або Wasm — це формат двійкового коду для створення програм, які можуть виконуватися на будь-якій архітектурі комп’ютера.
Система складається з віртуальної машини та компілятора, який перекладає комп’ютерний код з мов програмування, таких як C або C++, у зрозумілий людині формат .wat і двійковий .wasm.
Початкова мета WebAssembly полягала в тому, щоб дозволити програмістам розробляти високопродуктивні програми для веб-сторінок, забезпечуючи майже рідну швидкість виконання в браузері. Але тепер, здається, ця технологія розвивається за межі браузерів і переходить у хмару.
Цей посібник показує вам усе, що вам потрібно знати про цю технологію, що розвивається, її сильні та слабкі сторони, а також її майбутній потенціал.
Що таке WebAssembly?
WebAssembly це формат двійкового коду, який працює на віртуальній машині та може компілюватися різними мовами. Він розроблений як портативний і може працювати у веб-браузері або як серверний додаток.
Вперше випущений у 2017 році, WebAssembly є рекомендацією W3C з 2019 року та підтримується численними учасниками, зокрема Mozilla, Google, Microsoft, Red Hat та багатьма іншими.
Початкова мета полягала в тому, щоб розвинути швидкість виконання, яка була б майже рідною, як у програмах C/C++ у браузері. Він також призначений як безпечний веб-стандарт із відкритим стандартом, який можна налагодити та не має версії, який є зворотно сумісним і сумісним з JavaScript.
Як працює WebAssembly?
WebAssembly розроблено як механізм виконання, наприклад Java або JavaScript, який можна вбудувати в браузер або серверне середовище для запуску комп’ютерного коду, скомпільованого у двійковому форматі .wasm або текстовому форматі .wat.
Щоб написати код для виконання WebAssembly, розробник пише програму будь-якою з численних підтримуваних мов. Потім скомпілюйте його за допомогою компілятора WebAssembly або AOT (завчасно), або JIT (точно вчасно).
Цей код може виконувати більшу частину роботи в середовищі виконання, але він не може отримати доступ або змінити об’єкти DOM браузера. Будь-яка така взаємодія має проходити через JavaScript.
Як створити зразок програми WebAssembly
Створити просту програму Wasm для веб-браузера можна лише за кілька кроків, як ви бачите нижче:
- Завантажити та встановити Emscripten SDK.
- Напишіть свій зразок helloworld.c або зробіть це в C++/Rust, якщо хочете.
- прогін emcc helloworld.c -s WASM=1 -s helloworld.html у терміналі, щоб скомпілювати код до WebAssembly за допомогою Emscripten. Він створить двійкові файли Wasm, HTML і JavaScript, які вам потрібні (клейовий код).
- Обслуговуйте сторінку helloworld.html через веб-браузер.
Переваги WebAssembly
Є багато причин для прийняття WebAssembly та пов’язаних з нею технологій, зокрема:
- Продуктивність, близька до рідної – WebAssembly має такий низькорівневий дизайн, що пропонує продуктивність, подібну до низькорівневих мов, таких як C і C++.
- Безпека – Система створена для забезпечення безпеки шляхом ізоляції у віртуальному середовищі з обмеженим доступом до системи.
- Відкрити стандарт – Багато організацій та окремих осіб роблять внесок у WebAssembly, і це офіційна рекомендація W3C.
- полегшений – WebAssembly компілюється в двійковий код для виконання у віртуальній машині. Цей код портативний і не потребує системних файлів і не постачається разом із ними.
- Багатомовна підтримка – Понад 50 мов можна компілювати в WebAssembly.
- Незалежна платформа – Віртуальна машина WebAssembly розроблена для кожної архітектури, щоб представляти однакове середовище виконання. Все, що повинен зробити розробник, це написати код для WebAssembly.
Обмеження WebAssembly
- В роботі – Стандарт все ще розробляється, тому багато функцій і вдосконалень ще попереду.
- Немає вивозу сміття – У WebAssembly все ще не вистачає збирання сміття, хоча незабаром це може бути реалізовано.
- Немає доступу до DOM – Ви не можете отримати доступ до DOM веб-браузера безпосередньо з WebAssembly, вам потрібно буде пройти через JavaScript.
WebAssembly проти Java
Java є начебто найпершою реалізацією WebAssembly. Він був розроблений як мова для одноразового запису та запуску будь-де, але на цьому шляху виникло багато проблем.
Як і Java, WebAssembly використовує RE (Runtime Environment) для виконання свого коду, але на відміну від Java, ви можете написати WebAssembly на вашій мові.
WebAssembly проти JavaScript
WebAssembly виконується у браузері чи іншому хост-середовищі, як JavaScript. Однак якщо JavaScript доставляється в середовище виконання в текстовому форматі та компілюється вчасно, WebAssembly має як текстовий, так і двійковий формати.
У веб-браузерах JavaScript має доступ до DOM, а WebAssembly — ні. Однак, коли справа доходить до швидкості виконання, WebAssembly перевершує JavaScript завдяки швидкості виконання коду, майже наближеній до нативного.
Швидкість — це те, де WebAssembly сяє, і тому він ідеально підходить для багатьох застосувань. Ви можете завантажити WebAssembly у браузер за допомогою JavaScript, і два коди можуть працювати разом і спільно використовувати ресурси.
WebAssembly Vs Docker Vs Kubernetes
Docker і Kubernetes є двома популярними технологіями хмарних обчислень. Docker — це контейнерна технологія, яка дозволяє розробникам пакувати програму з усіма її системними залежностями в єдиний пакет. Це дозволяє легко розгорнути програму в будь-якому хмарному середовищі за секунду або менше.
З іншого боку, Kubernetes — це система з відкритим вихідним кодом для керування та розгортання контейнерних програм, таких як Docker, CRI-O, контейнер і будь-яка реалізація Kubernetes CRI (Container Runtime Interface). Kubernetes також дозволяє легко масштабувати розгортання хмари на кількох серверах або віртуальних машинах.
З цієї точки зору WebAssembly більше схожий на Docker і може працювати як контейнерна хмарна програма за допомогою Kubernetes. Він також має багато переваг перед Docker, але, ймовірно, не замінить його.
За межами браузера
На початку були веб-сервери. Ви повинні були виділити повну машину як сервер. Потім з’явилися віртуальні машини, або віртуальні машини, які дозволяли серверу працювати лише на одному або кількох потоках ЦП. Тим не менш, вам потрібно було мати спеціальну віртуальну машину.
Хмарні обчислення зробив можливим запуск і запуск серверів лише за потреби завдяки контейнеризації програм. Це призвело до скорочення витрат, оскільки вам потрібно було платити лише за те, що ви використовуєте – жодних спеціальних машин. Але є ще кілька проблем.
По-перше, файли докерів можуть мати розмір у кілька гігабайт, і це означає невелику затримку під час запуску та інші проблеми з керуванням. Подібний файл Wasm, однак, може мати лише кілька МБ, оскільки це попередньо скомпільований двійковий файл. Це дає йому набагато швидший час запуску, ніж Docker, що ідеально підходить для певних критичних за часом програм.
По-друге, дизайн WebAssembly означає, що розробнику не потрібно керувати системними ресурсами та призначати їх, він може просто перейти до суті, використовуючи мову програмування, яку він вибере.
Ці функції роблять WebAssembly ідеальним для запуску хмарних мікросервісів, хоча додатки Docker все ще кращі для програм, які потребують більшого контролю над операційним середовищем і файловою системою.
Для отримання додаткової інформації проекти, як WasmCloud та WasmEdge розвивають WebAssembly у життєздатну обчислювальну платформу.
Варіанти використання Wasm
Існує багато варіантів використання WebAssembly, враховуючи його особливість. Їх можна розділити на три великі групи; налаштування в браузері, поза браузером і гібридні налаштування.
Тип у веб-переглядачі зрозумілий сам за себе, а тип поза браузером стосується здебільшого серверів, Інтернету речей і хмарних розгортань, тоді як гібридний стосується суміші двох.
Нижче наведено приклади використання, у яких Wasm може досягти успіху:
- Вже існує високопродуктивний код – Старий, але чудовий код, який можна просто перенести на WebAssembly.
- Новий високопродуктивний код – Ті, які вам доведеться розробити та реалізувати з нуля.
- Перенесення настільних програм в Інтернет – Це може відкрити нову породу веб-рішень для робочого столу, наприклад веб-редагування відео.
- Хмарні обчислення – Працювати разом з Docker і Kubernetes для нових можливостей.
Нижче наведено огляд конкретних програм і сценаріїв, у яких Wasm може досягти успіху:
- Редагування відео та зображень
- Дизайн ігор
- AI-додатки
- Програми віртуальної та доповненої реальності
- Музичні додатки
- P2P програми
- Серверні програми
- Хмарні/кластерні обчислення
- Автоматизований дизайн
- Моделювання платформи ОС
- Шифрування
- Локальний веб-сервер
- Програми віддаленого робочого столу
- Наукові візуалізації
- Гібридні власні програми на смартфонах
- На пристроях IoT
Список підтримуваних мов і фреймворків
Понад 50 мов компілюються до WebAssembly, і ось деякі з найпопулярніших:
- C
- C + +
- R
- рубін
- Швидко
- Go
- Котлін
- Іржа
- PHP
- Блазор – Фреймворк для розробників .NET.
- JwebAssembly – Компілятор для байт-коду Java та споріднених мов, таких як JRuby, Jython, Groovy, Scala та Kotlin.
- тис – Платформа Rust для створення багатопоточних веб-програм за допомогою WebAssembly.
- AssemblyScript – Мова, спеціально розроблена для створення коду WebAssembly.
- Зерно – Строго типізована функціональна мова.
- Мотоко
Ви можете знайти більше мов тут.
Список середовищ виконання та інструментів WebAssembly
- Усі основні браузери підтримують Wasm
- Pyodide – Середовище виконання Python у браузері з науковим стеком Python, включаючи Pandas, NumPy, SciPy.
- wamr
- вага – Для мікросервісів і веб-додатків
- Васі – Модульний інтерфейс системи
- WasmTime – Швидке та безпечне середовище виконання WebAssembly.
- Васмер
- Lucet
- wasmCloud – Хмарне середовище
- Крустлет – Кублети Kubernetes для запуску Wasm, написані на Rust.
- WasmEdge – Хмарне та крайове середовище виконання
Висновок
Ми підійшли до кінця нашої подорожі до WebAssembly та того, що вона містить для обчислень. І, як бачите, це багатообіцяюче.
Хоча це все ще триває, але постійно розвивається. І якщо вам цікаво, ви можете знайти більше інформації тут, тут та тут.





