Искусство WebAssembly

Александр Шитик
Александр Шитик

Пишу свои посты и книги, делаю обзоры на фильмы и книги. Эксперт в области космологии и астрономии, IT, продуктивности и планирования.

Искусство WebAssembly
Рик Баттальини книга
Жанры: Программирование
Год издания: 2022
Год прочтения: 2025
Моя оценка: Нормальная
Количество прочтений: 1
Количество страниц: 312
Конспект (страниц): 14
Первоначальный язык издания: Английский
Переводы на другие языки: Русский

Общее описание

Книга объёмом 312 страниц состоит из 11 глав. Помимо текста, в ней содержится большое количество кода. Также встречается немало графических иллюстраций, поясняющих те или иные примеры. Уровень чтения — сложный. В конце каждой главы дано краткое резюме.

Краткий обзор

Первые две главы — это своего рода знакомство с технологией. Автор объясняет, зачем нужна WebAssembly и где она применяется, а также показывает способы взаимодействия с ней. Вводится формат WebAssembly Text (WAT), и разбирается первая программа — "Hello, world!". Именно WAT используется почти на протяжении всей книги.

Следующая глава посвящена функциям и более плотной интеграции с JavaScript. Рассматриваются типы данных, работа с переменными (глобальными и локальными), условные конструкции (if/else), циклы и ветвление. Некоторые из этих тем затрагиваются уже во второй главе.

Далее идёт преимущественно теоретическая глава, посвящённая работе с числами. Если вы когда-либо сталкивались с представлением чисел в прямом, обратном и дополнительном коде, а также с побитовыми операциями (сдвиги, маски, XOR), то вам будет легко — эта глава вызовет лёгкое чувство ностальгии.

После этого идёт глава, посвящённая строкам: рассматриваются представления ASCII и Unicode, хранение строк в линейной памяти и многое другое.

Следующая глава подробно раскрывает работу с линейной памятью. На её основе разрабатывается интересный пример — программа, определяющая столкновения между объектами. Позже этот пример дорабатывается и усложняется.

Затем следуют несколько глав, посвящённых созданию полноценного мини-веб-приложения. В одной из них реализуется настройка Node.js‑сервера и взаимодействие с DOM, в другой — работа с Canvas.

После этого автор рассказывает о том, как можно отлаживать WebAssembly-код, находить и исправлять ошибки, а также выявлять ресурсоёмкие функции. Этим вопросам посвящены две главы.

Книга завершается главой о AssemblyScript — высокоуровневом языке, разработанном специально для WebAssembly. Также рассматривается сравнение производительности с другими подходами.

Мнение

Технологии WebAssembly в этом году исполнилось 10 лет — возраст достаточно зрелый, чтобы понять, насколько она оправдала ожидания и какое место занимает на рынке. Конечно, можно привести в пример крупные компании вроде Google (Docs), Figma, Photoshop и других, где узкие места (а иногда и целые модули) переписаны на WebAssembly. Но в целом распространение этой технологии в вебе идёт медленно, и JavaScript / TypeScript по-прежнему остаются вне конкуренции.

Возможно, причина кроется в отсутствии встроенного сборщика мусора, что делает WebAssembly менее подходящим для языков вроде Python или Java. В отличие от C++ или Rust, которые изначально проектировались с учётом управления памятью, этим языкам сложнее "вписаться" в WebAssembly (хотя в последние годы наблюдается значительный прогресс в этой области). Также стоит отметить отсутствие прямой работы с DOM, а попытки использовать WebAssembly через компилируемые надстройки или чрезмерное количество вызовов из JavaScript могут сделать итоговое решение даже менее эффективным, чем нативный JS-код.

Читая эту книгу, постепенно приходит понимание, почему WebAssembly до сих пор используется в узких сценариях и не получила широкого распространения в прикладной разработке. Это действительно непростая технология. Представьте себе, что вы смешали ассемблер с языком чуть более высокого уровня, а затем добавили синтаксис, напоминающий Lisp. Примерно такие ощущения возникают при чтении книги. Я давно не работал с низкоуровневым кодом, поэтому многие главы давались непросто. Конечно, были моменты, где я проникся подходом и даже получил удовольствие от разбора кода. Однако в целом книга показалась довольно сложной. Впервые мне захотелось разбить авторские предложения на более короткие — для лучшей передачи смысла.

Для общего понимания WebAssembly и знакомства с WAT книга очень хорошая. Но её явно недостаточно, чтобы сразу после прочтения начать применять технологию в рабочем проекте.

Вверх