Базовая книга о технологии WebAssembly, позволяющей писать браузерный код на многих распространённых языках программирования и интегрировать этот код с JavaScript. В книге избран проектный подход и рассказано, как при помощи библиотек и функций WebAssembly переносить и переиспользовать в веб-приложениях код на C++, Rust и языках для платформы .NET. Рассмотрено, как создавать децентрализованные приложения и средства для периферийных вычислений с повышенными требованиями к безопасности, производительности и интероперабельности при работе в браузере. Особое внимание уделено библиотеке Tensorflow.js, поддерживающей глубокое обучение в браузере на основе пользовательских запросов.
Для веб-разработчиков и исследователей языков программирования
Эффективный кроссплатформенный код
Перед вами подробное и доступное введение в одну из наиболее революционных технологий современной IT-индустрии.
Исходно язык WebAssembly возник как средство, позволяющее внедрять в браузер иные языки кроме JavaScript, а сегодня превратился в многофункциональный набор инструментов, обеспечивающих переносимость, высокую производительность, безопасность и многоразовость браузерного кода. Сегодня на WebAssembly можно писать для разнообразных платформ, и их круг постоянно расширяется.
Предлагается поступательное введение в технологию: в рамках книги разобрано несколько постепенно усложняющихся примеров, в которых вы научитесь при помощи WebAssembly внедрять в браузер код C++, Rust, .NET, интегрировать в веб-приложение библиотеку машинного обучения Tensorflow.js. Изложенный материал будет полезен при разработке встраиваемых систем, в научных вычислениях, при создании стартапов и повышении производительности и интероперабельности имеющихся продуктов.
- Как WebAssembly способствует улучшенной переносимости кода с платформы на платформу
- Как переиспользовать имеющиеся программные ресурсы и развертывать их в разных средах и контекстах
- Как WebAssembly повышает устойчивость приложения к известным уязвимостям
- Как WebAssembly помогает развертывать унаследованный код в веб-приложениях
- Как расширить пользовательскую аудиторию веб-приложения
- Как при помощи WebAssembly писать децентрализованные приложения и выполнять периферийные вычисления
- Как интегрировать JavaScript с другими языками для повышения производительности, безопасности и быстродействия приложений и сайтов
Книгу “WebAssembly. Практическое руководство” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Предисловие…………………………………………………………………………………………….. 9
Условные обозначения, используемые в этой книге………………………………………………………………. 10
Использование примеров программного кода………………………………………………………………………… 11
Онлайн-обучение O’Reilly…………………………………………………………………………………………………………. 11
Как с нами связаться………………………………………………………………………………………………………………….. 11
Благодарности…………………………………………………………………………………………………………………………… 12
Глава 1. Знакомство с WebAssembly……………………………………………………….. 15
Что WebAssembly может вам предложить……………………………………………………………………………….. 15
История развития веба………………………………………………………………………………………………………………. 18
Истоки JavaScript……………………………………………………………………………………………………………………….. 19
Эволюция веб-платформ…………………………………………………………………………………………………………… 21
Native Client (NaCl)…………………………………………………………………………………………………………………….. 24
asm.js…………………………………………………………………………………………………………………………………………… 26
Появление WebAssembly…………………………………………………………………………………………………………… 28
Глава 2. Нечто вроде “Hello, World”………………………………………………………. 31
Текстовый формат WebAssembly — Wat (WebAssembly Text Format)………………………………….. 32
Преобразование Wat в Wasm……………………………………………………………………………………………………. 36
Выполнение Wasm в Repl………………………………………………………………………………………………………….. 38
Выполнение WebAssembly в браузере…………………………………………………………………………………….. 39
Глава 3. Модули в WebAssembly…………………………………………………………….. 43
Структура модуля……………………………………………………………………………………………………………………… 44
Изучение секций модуля……………………………………………………………………………………………………………. 46
Работа с модулями…………………………………………………………………………………………………………………….. 49
Будущая интеграция с модулями ES6……………………………………………………………………………………… 55
Глава 4. Память в WebAssembly……………………………………………………………… 57
Типизированные массивы…………………………………………………………………………………………………………. 58
Объекты Memory в WebAssembly……………………………………………………………………………………………… 62
Использование Memory API в WebAssembly……………………………………………………………………………. 65
И напоследок строки…………………………………………………………………………………………………………………. 70
Глава 5. Совместное использование C++ и WebAssembly……………………….. 77
Функции в C………………………………………………………………………………………………………………………………… 78
Всё усложняется………………………………………………………………………………………………………………………… 87
C/C++ и Webassembly………………………………………………………………………………………………………………… 95
Наконец-то “Hello, World!” на WebAssembly…………………………………………………………………………. 101
Глава 6. Применение WebAssembly: традиционный код под браузером.. 105
Программа “Hello, World!” — теперь настоящая…………………………………………………………………… 106
Перенос стороннего кода………………………………………………………………………………………………………… 111
Проект libsodium………………………………………………………………………………………………………………………. 125
Глава 7. Таблицы в WebAssembly…………………………………………………………. 127
Статическое и динамическое связывание……………………………………………………………………………… 127
Создание объектов Table в модулях………………………………………………………………………………………. 132
Динамическое связывание в WebAssembly……………………………………………………………………………. 135
Глава 8. WebAssembly в серверных приложениях…………………………………. 139
Нативные расширения для Node.js………………………………………………………………………………………… 140
WebAssembly и Node.js……………………………………………………………………………………………………………. 144
“Атака на цепочку поставок”………………………………………………………………………………………………….. 147
WebAssembly и Deno……………………………………………………………………………………………………………….. 148
Взгляд в будущее……………………………………………………………………………………………………………………… 152
Глава 9. WebAssembly за работой: TensorFlow.js…………………………………… 155
Аппаратная платформа…………………………………………………………………………………………………………… 156
Playground…………………………………………………………………………………………………………………………………. 157
TensorFlow.js…………………………………………………………………………………………………………………………….. 158
Серверный модуль на WebAssembly……………………………………………………………………………………… 161
Глава 10. Rust………………………………………………………………………………………. 165
Введение в Rust………………………………………………………………………………………………………………………… 166
Rust и WebAssembly…………………………………………………………………………………………………………………. 171
wasm-bindgen……………………………………………………………………………………………………………………………. 175
Разработка кода для входа и выхода из браузера……………………………………………………………….. 182
Глава 11. Системный интерфейс WebAssembly (WASI)…………………………. 189
Системный интерфейс WebAssembly (WASI)………………………………………………………………………… 189
Безопасность на основе возможностей………………………………………………………………………………….. 198
Полная картина WebAssembly……………………………………………………………………………………………….. 202
Глава 12. Расширение платформы WebAssembly………………………………….. 207
Время выполнения WASI………………………………………………………………………………………………………… 208
Множественные возвращаемые значения……………………………………………………………………………… 212
Ссылочные типы……………………………………………………………………………………………………………………… 214
Связывание модулей……………………………………………………………………………………………………………….. 218
Тестирование функций……………………………………………………………………………………………………………. 223
Другие предложения……………………………………………………………………………………………………………….. 226
Глава 13. WebAssembly и .NET……………………………………………………………… 229
.NET и Wasmtime……………………………………………………………………………………………………………………… 230
Blazor………………………………………………………………………………………………………………………………………… 234
Платформа Uno………………………………………………………………………………………………………………………… 245
Глава 14. Использование AssemblyScript и WebAssembly………………………. 251
“Вовсе не компилятор TypeScript для WebAssembly”…………………………………………………………… 253
Простой пример……………………………………………………………………………………………………………………….. 255
Сборка “мусора” и среда выполнения AssemblyScript…………………………………………………………. 260
Стандартная библиотека ассемблера…………………………………………………………………………………… 261
Загрузчик AssemblyScript………………………………………………………………………………………………………… 262
Глава 15. Прикладной WebAssembly: в облаке и на границах………………. 267
Кратко о моем опыте работы…………………………………………………………………………………………………. 267
Наша отрасль развивается……………………………………………………………………………………………………… 269
Fastly Compute@Edge……………………………………………………………………………………………………………… 274
Krustlet………………………………………………………………………………………………………………………………………. 276
Suborbital…………………………………………………………………………………………………………………………………… 277
WasmEdge…………………………………………………………………………………………………………………………………. 279
wasmCloud………………………………………………………………………………………………………………………………… 282
Глава 16. Прикладной WebAssembly: децентрализованные приложения 287
Централизация против децентрализации……………………………………………………………………………… 287
От Bitcoin к Ethereum……………………………………………………………………………………………………………….. 289
Как вы решаете проблему, подобную проблеме остановки?………………………………………………. 291
ewasm………………………………………………………………………………………………………………………………………… 293
Polkadot…………………………………………………………………………………………………………………………………….. 295
InterPlanetary File System (IPFS)……………………………………………………………………………………………… 296
Глава 17. WebAssembly и другие языки программирования…………………. 305
TinyGo……………………………………………………………………………………………………………………………………….. 305
Artichoke……………………………………………………………………………………………………………………………………. 311
Swift…………………………………………………………………………………………………………………………………………… 312
Java……………………………………………………………………………………………………………………………………………. 315
Kotlin…………………………………………………………………………………………………………………………………………. 318
Zig………………………………………………………………………………………………………………………………………………. 318
Grain………………………………………………………………………………………………………………………………………….. 322
И что теперь?……………………………………………………………………………………………………………………………. 323
Приложение. Установка инструментов WebAssembly…………………………… 325
Установка WebAssembly Binary Toolkit (WABT)………………………………………………………………….. 325
Установка LLVM……………………………………………………………………………………………………………………… 325
Установка Emscripten………………………………………………………………………………………………………………. 326
Установка Wasm3……………………………………………………………………………………………………………………. 326
Установка Wasmtime………………………………………………………………………………………………………………. 327
Установка Wasmer…………………………………………………………………………………………………………………… 327
Установка инструментов Rust………………………………………………………………………………………………… 327
Установка инструментов .NET……………………………………………………………………………………………….. 328
Установка AssemblyScript……………………………………………………………………………………………………….. 329
Установка IPFS………………………………………………………………………………………………………………………… 329
Установка TinyGo……………………………………………………………………………………………………………………. 329
Установка Artichoke………………………………………………………………………………………………………………… 329
Установка SwiftWasm……………………………………………………………………………………………………………… 329
Установка Zig и Grain………………………………………………………………………………………………………………. 330
Предметный указатель…………………………………………………………………………. 331
Об авторе……………………………………………………………………………………………… 335
Об изображении на обложке………………………………………………………………… 336
-
WebAssembly. Практическое руководство
930 ₽
725 ₽
Брайан Слеттен (Brian Sletten) – широко эрудированный программист. Разрабатывал приложения для розничной торговли, банковской сферы, издательского дела, онлайн-игр, оборонной сферы, финансов, гостиничного бизнеса и здравоохранения. За годы работы научился сочетать надёжные решения нетривиальных задач с внедрением самых передовых технологий. Именно поэтому он высоко оценивает потенциал WebAssembly.