======Веб-сборка===== WebAssembly — это новый тип кода, который можно запускать в современных веб-браузерах. Это низкоуровневый ассемблерный язык с компактным двоичным форматом, который работает с производительностью, близкой к исходной, и предоставляет такие языки, как C/C++, C# и Rust. с целью компиляции, чтобы их можно было запускать в Интернете. Он также предназначен для работы вместе с JavaScript, что позволяет им работать вместе. =====В двух словах===== WebAssembly имеет огромное значение для веб-платформы — он предоставляет возможность запускать в Интернете код, написанный на нескольких языках, со скоростью, близкой к естественной, при этом клиентские приложения работают в Интернете, что раньше было невозможно. WebAssembly предназначен для дополнения и работы вместе с JavaScript — с помощью API-интерфейсов JavaScript WebAssembly вы можете загружать модули WebAssembly в приложение JavaScript и совместно использовать функциональность между ними. Это позволяет вам воспользоваться преимуществами производительности и мощи WebAssembly, а также выразительности и гибкости JavaScript в одних и тех же приложениях, даже если вы не знаете, как писать код WebAssembly. И что еще лучше, он разрабатывается как веб-стандарт через [[https://www.w3.org/wasm/|рабочую группу W3C WebAssembly]] и [[https://www.w3.org/community/webassembly/|группу сообщества]] при активном участии всех основных поставщиков браузеров. =====Путеводители===== {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:concepts| Концепции веб-сборки ]]** Начните с прочтения общих концепций, лежащих в основе WebAssembly — что это такое, почему это так полезно, как оно вписывается в веб-платформу (и за ее пределами) и как ее использовать. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:c_to_wasm-2| Компиляция нового модуля C/C++ в WebAssembly ]]** Написав код на C/C++, вы можете затем скомпилировать его в Wasm с помощью такого инструмента, как [[https://emscripten.org/|Emscripten]] . Давайте посмотрим, как это работает. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:existing_c_to_wasm| Компиляция существующего модуля C в WebAssembly ]]** Основной вариант использования WebAssembly — взять существующую экосистему библиотек C и позволить разработчикам использовать их в Интернете. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:rust_to_wasm-2| Компиляция из Rust в WebAssembly ]]** Если вы написали код на Rust, вы можете скомпилировать его в WebAssembly! В этом руководстве вы узнаете все, что вам нужно знать, чтобы скомпилировать проект Rust в Wasm и использовать его в существующем веб-приложении. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:loading_and_running| Загрузка и запуск кода WebAssembly ]]** Если у вас есть модуль Wasm, в этой статье рассказывается, как его получить, скомпилировать и создать экземпляр, сочетая API [[software:development:web:docs:webassembly:javascript_interface|JavaScript WebAssembly]] с API-интерфейсами [[software:development:web:docs:web:api:Fetch_API|Fetch]] или [[software:development:web:docs:web:api:XMLHttpRequest|XHR]]. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:Using_the_JavaScript_API| Использование API JavaScript WebAssembly ]]** Загрузив модуль Wasm, вы захотите его использовать. В этой статье мы покажем вам, как использовать WebAssembly через API JavaScript WebAssembly. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:Exported_functions| Экспортированные функции WebAssembly ]]** Экспортированные функции WebAssembly — это отражения функций WebAssembly в JavaScript, которые позволяют вызывать код WebAssembly из JavaScript. В этой статье описывается, что они из себя представляют. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:Understanding_the_text_format| Понимание текстового формата WebAssembly ]]** В этой статье объясняется текстовый формат Wasm. Это низкоуровневое текстовое представление модуля Wasm, отображаемое в инструментах разработчика браузера при отладке. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:Text_format_to_Wasm-2| Преобразование текстового формата WebAssembly в Wasm ]]** В этой статье представлено руководство по преобразованию модуля WebAssembly, написанного в текстовом формате, в двоичный файл Wasm. =====Справочник по API===== {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:Reference| Справочник инструкций WebAssembly ]]** Справочная документация с интерактивными примерами набора операторов WebAssembly. {{:software:development:web:book_icon_left.png?32|}}**[[software:development:web:docs:webassembly:JavaScript_interface| JavaScript-интерфейс WebAssembly ]]** Этот объект действует как пространство имен для всех функций, связанных с WebAssembly. [[software:development:web:docs:webassembly:JavaScript_interface:Global| WebAssembly.Global() ]]\\ Объект **WebAssembly.Global** представляет собой экземпляр глобальной переменной, доступный как из **JavaScript**, так и импортируемый/экспортируемый в один или несколько [[software:development:web:docs:webassembly:JavaScript_interface:Module|WebAssembly.Module]] экземпляров. Это позволяет динамически связывать несколько модулей. [[software:development:web:docs:webassembly:JavaScript_interface:Module| WebAssembly.Module() ]]\\ Объект **WebAssembly.Module** содержит код **WebAssembly** без сохранения состояния, который уже скомпилирован браузером и может эффективно [[software:development:web:docs:web:api:Worker:postMessage|использоваться совместно с Workers]] и создаваться несколько раз. [[software:development:web:docs:webassembly:JavaScript_interface:Instance| WebAssembly.Instance() ]]\\ Объект **WebAssembly.Instance** — это исполняемый экземпляр файла **Module.Instance** объекты содержат все [[software:development:web:docs:WebAssembly:Exported_functions|экспортированные функции WebAssembly]], которые позволяют вызывать код **WebAssembly** из **JavaScript**. [[software:development:web:docs:webassembly:JavaScript_interface:compile| WebAssembly.compile() ]]\\ Функция **WebAssembly.compile()** компилирует двоичный код **WebAssembly** в **WebAssembly.Module** объект. [[software:development:web:docs:webassembly:JavaScript_interface:compileStreaming| WebAssembly.compileStreaming() ]]\\ Функция **WebAssembly.compileStreaming()** компилирует **WebAssembly.Module** непосредственно из потокового базового источника. [[software:development:web:docs:webassembly:JavaScript_interface:instantiate| WebAssembly.instantiate() ]]\\ Функция **WebAssembly.instantiate()** позволяет компилировать и создавать экземпляры кода **WebAssembly**. [[software:development:web:docs:webassembly:JavaScript_interface:instantiateStreaming| WebAssembly.instantiateStreaming() ]]\\ Функция **WebAssembly.instantiateStreaming()** является основным **API** для компиляции и создания экземпляра кода **WebAssembly**, возвращая как a, **Module** так и его первый файл **Instance**. [[software:development:web:docs:webassembly:JavaScript_interface:validate| WebAssembly.validate() ]]\\ Функция **WebAssembly.validate()** проверяет заданный типизированный массив двоичного кода **WebAssembly**. [[software:development:web:docs:webassembly:JavaScript_interface:Memory| WebAssembly.Memory() ]]\\ Объект **WebAssembly.Memory** — это объект изменяемого размера **ArrayBuffer**, который содержит необработанные байты памяти, к которым обращается объект **Instance**. [[software:development:web:docs:webassembly:JavaScript_interface:Table| WebAssembly.Table() ]]\\ Объект **WebAssembly.Table** представляет собой типизированный массив изменяемого размера непрозрачных значений, таких как ссылки на функции, к которым обращается объект **Instance**. [[software:development:web:docs:webassembly:JavaScript_interface:Tag| WebAssembly.Tag() ]]\\ Объект **WebAssembly.Tag** определяет тип исключения **WebAssembly**, которое может быть выброшено в код **WebAssembly** или из него. [[software:development:web:docs:webassembly:JavaScript_interface:Exception| WebAssembly.Exception() ]]\\ Объект **WebAssembly.Exception** представляет собой исключение во время выполнения, генерируемое из **WebAssembly** в **JavaScript** или генерируемое из **JavaScript** в обработчик исключений **WebAssembly**. [[software:development:web:docs:webassembly:JavaScript_interface:CompileError| WebAssembly.CompileError() ]]\\ Создает новый **CompileError** объект **WebAssembly**. [[software:development:web:docs:webassembly:JavaScript_interface:LinkError| WebAssembly.LinkError() ]]\\ Создает новый **LinkError** объект **WebAssembly**. [[software:development:web:docs:webassembly:JavaScript_interface:RuntimeError| WebAssembly.RuntimeError() ]]\\ Создает новый **RuntimeError** объект **WebAssembly**. =====Ссылки и Дополнения===== * [[https://ru.wikipedia.org/wiki/WebAssembly|О WebAssembly]] * [[https://webassembly.org/|webassembly.org]] * [[https://www.w3.org/community/webassembly/|W3C WebAssembly Community Group]] * [[https://web.dev/articles/emscripting-a-c-library|Emscripting a C Library to Wasm]] * [[https://github.com/JasonWeathersby/WASMSobel|WASMSobel]] * См. MDN репозиторий [[https://github.com/mdn/webassembly-examples/|webassembly-examples]] для получения ряда других примеров. * См. wiki репозиторий [[https://gitlab.book51.ru/wiki/webassembly-examples.git|webassembly-examples]] для получения ряда других примеров. * {{ :software:development:web:docs:webassembly-examples-main.zip |Загрузить примеры веб-сборки}}