WebAssembly в действии

WebAssembly в действии

WebAssembly в действии
Автор: Галлан Жерар
Дата выхода: 2022
Издательство: Питер
Количество страниц: 496
Тип файла: PDF
Добавил: codelibs

Внимание!!!! Книга удалена по требованию правообладателя!!!!

 Проверить на вирусы

Предисловие....17

Благодарности....19

О книге....21

Для кого эта книга....21

Структура книги....21

О коде....23

Другие онлайн-ресурсы....23

Об авторе....24

Об иллюстрации на обложке....25

От издательства....26

Часть I Первые шаги....27

Глава 1. Знакомство с WebAssembly....28

1.1. Что такое WebAssembly....29

1.1.1. Asm.js, предшественник WebAssembly....29

1.1.2. От asm.js к MVP....30

1.2. Какие проблемы решает WebAssembly....31

1.2.1. Улучшение производительности....31

1.2.2. Более короткое время запуска в сравнении с JavaScript....32

1.2.3. Возможность использовать в браузере другие языки помимо JavaScript....33

1.2.4. Возможность повторного использования кода....33

1.3. Как работает WebAssembly....34

1.3.1. Обзор работы компиляторов....35

1.3.2. Загрузка, компиляция и создание модуля....36

1.4. Структура модуля WebAssembly....38

1.4.1. Преамбула....38

1.4.2. Известные разделы....39

1.4.3. Пользовательские разделы....40

1.5. Текстовый формат WebAssembly....40

1.6. Как обеспечивается безопасность WebAssembly....41

1.7. Какие языки можно использовать для создания модуля WebAssembly....42

1.8. Где можно использовать модуль....43

Резюме....44

Глава 2. Модули WebAssembly изнутри....45

2.1. Известные разделы....47

2.2. Пользовательские разделы....52

Резюме....53

Глава 3. Создание вашего первого модуля WebAssembly....54

3.1. Набор инструментальных средств Emscripten....55

3.2. Модули WebAssembly....56

3.2.1. Когда не стоит использовать модуль WebAssembly....58

3.3. Параметры вывода Emscripten....58

3.4. Компиляция C или C++ с помощью Emscripten и шаблона HTML....60

3.5. Emscripten генерирует связующий код на JavaScript....66

3.5.1. Компиляция кода на C или C++ вместе с JavaScript, созданного Emscripten....66

3.5.2. Создание базовой HTML-страницы для использования в браузерах....69

3.6. Emscripten генерирует только файл WebAssembly....72

3.6.1. Компиляция C или C++ в виде вспомогательного модуля с помощью Emscripten....74

3.6.2. Загрузка и создание экземпляра модуля в браузере....76

3.7. Проверка поддержки: как проверить, доступен ли WebAssembly....84

Сценарии использования в реальном мире....85

Упражнения....86

Резюме....86

Часть II Работа с модулями....87

Глава 4. Повторное использование существующей кодовой базы на C++....88

4.1. Использование C или C++ для создания модуля со связующим кодом Emscripten....91

4.1.1. Внесение изменений в код на C++....92

4.1.2. Компиляция кода в модуль WebAssembly....97

4.1.3. Создание веб-страницы....98

4.1.4. Написание кода на JavaScript, взаимодействующего с модулем....100

4.1.5. Просмотр результатов....107

4.2. Использование C или C++ для создания модуля без Emscripten....107

4.2.1. Внесение изменений в C++....108

4.2.2. Компиляция кода в модуль WebAssembly....114

4.2.3. Создание файла JavaScript, взаимодействующего с модулем....115

4.2.4. Просмотр результатов....119

Сценарии использования в реальном мире....120

Упражнения....121

Резюме....121

Глава 5. Создание модуля WebAssembly, вызывающего JavaScript....122

5.1. Использование C или C++ для создания модуля со связующим кодом Emscripten....125

5.1.1. Внесение изменений в код на C++....127

5.1.2. Создание кода на JavaScript и добавление его в сгенерированный Emscripten JavaScript-файл....129

5.1.3. Компиляция кода в модуль WebAssembly....130

5.1.4. Изменение JavaScript-кода веб-страницы....131

5.1.5. Просмотр результатов....134

5.2. Использование C или C++ для создания модуля без связующих файлов Emscripten....135

5.2.1. Внесение изменений в код на C++....137

5.2.2. Компиляция кода в модуль WebAssembly....138

5.2.3. Изменение кода на JavaScript для взаимодействия с модулем....139

5.2.4. Просмотр результатов....142

Сценарии использования в реальном мире....142

Упражнения....143

Резюме....143

Глава 6. Создание модуля WebAssembly, вызывающего JavaScript, с использованием указателей на функции....144

6.1. Использование C или C++ для создания модуля со связующими файлами Emscripten....146

6.1.1. Использование указателя на функцию, передаваемого модулю через JavaScript....146

6.1.2. Изменение кода на C++....147

6.1.3. Компиляция кода в модуль WebAssembly....152

6.1.4. Изменение JavaScript-кода веб-страницы....153

6.1.5. Просмотр результатов....160

6.2. Использование C или C++ для создания модуля без связующего файла Emscripten....160

6.2.1. Использование указателей на функции, передаваемых в модуль через JavaScript....161

6.2.2. Изменение кода на C++....162

6.2.3. Компиляция кода в модуль WebAssembly....163

6.2.4. Изменение JavaScript-кода, который будет взаимодействовать с модулем....164

6.2.5. Просмотр результатов....174

Сценарии использования в реальном мире....174

Упражнения....175

Резюме....175

Часть III Продвинутые темы....177

Глава 7. Динамическое связывание: основы....178

7.1. Динамическое связывание: за и против....179

7.2. Варианты реализации динамического связывания....180

7.2.1. Вспомогательные и основные модули....181

7.2.2. Динамическое связывание: dlopen....182

7.2.3. Динамическое связывание: dynamicLibraries....193

7.2.4. Динамическое связывание: JavaScript API в WebAssembly....198

7.3. Обзор динамического связывания....205

Сценарии использования в реальном мире....207

Упражнения....207

Резюме....208

Глава 8. Динамическое связывание: реализация....209

8.1. Создание модулей WebAssembly....212

8.1.1. Разделение логики в validate.cpp на два файла....215

8.1.2. Создание нового файла С++ для логики формы Place Order (Разместить заказ)....218

8.1.3. Использование Emscripten для генерации вспомогательных модулей WebAssembly....221

8.1.4. Определение JavaScript-функции для обработки ошибок при валидации....226

8.1.5. Использование Emscripten для генерации основного модуля WebAssembly....227

8.2. Настройка веб-страницы....229

8.2.1. Изменение кода JavaScript веб-страницы....233

8.2.2. Просмотр результатов....243

Сценарии использования в реальном мире....244

Упражнения....245

Резюме....245

Глава 9. Потоки: веб-воркеры и pthread....246

9.1. Преимущества веб-воркеров....247

9.2. Рекомендации по использованию веб-воркеров....249

9.3. Предварительная загрузка модуля WebAssembly с помощью веб-воркера....249

9.3.1. Изменение логики calculate_primes....252

9.3.2. Использование Emscripten для генерации файлов WebAssembly....254

9.3.3. Копирование в правильное место....255

9.3.4. Создание HTML-файла для веб-страницы....256

9.3.5. Создание файла JavaScript для веб-страницы....256

9.3.6. Создание файла JavaScript для веб-воркера....260

9.3.7. Просмотр результатов....260

9.4. Использование pthread....261

9.4.1. Изменение логики calculate_primes для создания и использования четырех pthread....263

9.4.2. Использование Emscripten для генерации файлов WebAssembly....266

9.4.3. Просмотр результатов....268

Сценарии использования в реальном мире....271

Упражнения....271

Резюме....271

Глава 10. Модули WebAssembly в Node.js....273

10.1. Вспоминая пройденное....274

10.2. Валидация на стороне сервера....275

10.3. Работа с модулями, созданными Emscripten....276

10.3.1. Загрузка модуля WebAssembly....277

10.3.2. Вызов функций в модуле WebAssembly....278

10.3.3. Вызов JavaScript-функций....282

10.3.4. Вызов указателей на функции JavaScript....285

10.4. Использование JavaScript API в WebAssembly....287

10.4.1. Загрузка и создание экземпляра модуля WebAssembly....288

10.4.2. Вызов функций в модуле WebAssembly....290

10.4.3. Вызов JavaScript из модуля WebAssembly....294

10.4.4. Вызов указателей на функции JavaScript из модуля WebAssembly....298

Сценарии использования в реальном мире....302

Упражнения....303

Резюме....303

Часть IV Отладка и тестирование....305

Глава 11. Текстовый формат WebAssembly....306

11.1. Создание основной логики игры с помощью текстового формата WebAssembly....309

11.1.1. Разделы модуля....311

11.1.2. Комментарии....313

11.1.3. Сигнатуры функций....313

11.1.4. Узел module....314

11.1.5. Узлы import....315

11.1.6. Узлы global....319

11.1.7. Узлы export....321

11.1.8. Узел start....323

11.1.9. Узлы code....324

11.1.10. Узлы type....345

11.1.11. Узел data....347

11.2. Создание модуля WebAssembly из текстового формата....348

11.3. Модуль, созданный Emscripten....350

11.3.1. Создание файла на C++....350

11.3.2. Создание модуля WebAssembly....351

11.4. Создание файлов HTML и JavaScript....352

11.4.1. Изменение файла HTML....352

11.4.2. Создание файла JavaScript....354

11.5. Просмотр результатов....360

Сценарии использования в реальном мире....360

Упражнения....361

Резюме....361

Глава 12. Отладка....363

12.1. Расширение игры....365

12.2. Изменение HTML....366

12.3. Отображение количества попыток....367

12.3.1. Функция generateCards в JavaScript....368

12.3.2. Изменения в коде текстового формата....369

12.3.3. Создание файла Wasm....370

12.3.4. Тестирование изменений....372

12.4. Увеличение количества попыток....373

12.4.1. Функция updateTriesTotal в JavaScript....375

12.4.2. Изменение текстового формата....375

12.4.3. Создание файла Wasm....377

12.4.4. Тестирование изменений....378

12.5. Обновление экрана итогов....387

12.5.1. Функция levelComplete в JavaScript....388

12.5.2. Изменение текстового формата....389

12.5.3. Создание файла Wasm....390

12.5.4. Тестирование изменений....391

Упражнения....392

Резюме....392

Глава 13. Тестирование и все, что с ним связано....393

13.1. Установка среды тестирования JavaScript....395

13.1.1. Файл package.json....396

13.1.2. Установка Mocha и Chai....397

13.2. Создание и запуск тестов....398

13.2.1. Написание тестов....398

13.2.2. Запуск тестов из командной строки....403

13.2.3. HTML-страница, загружающая тесты....403

13.2.4. Запуск тестов из браузера....406

13.2.5. Исправление тестов....406

13.3. Что дальше....408

Упражнения....409

Резюме....409

Приложения....411

Приложение А. Установка и настройка инструментов....412

A.1. Python....412

A.1.1. Запуск локального веб-сервера....413

A.1.2. Тип носителя WebAssembly....414

A.2. Emscripten....417

A.2.1. Загрузка Emscripten SDK....418

A.2.2. Если вы используете Windows....419

A.2.3. Если вы используете Mac или Linux....419

A.2.4. Решение проблем при установке....420

A.3. Node.js....420

A.4. WebAssembly Binary Toolkit....421

A.5. Bootstrap....422

Приложение Б. Функции ccall, cwrap и вызовы функций напрямую....423

Б.1. Функция ccall....423

Б.1.1. Создание простого модуля WebAssembly....425

Б.1.2. Создание веб-страницы, которая будет взаимодействовать с модулем WebAssembly....425

Б.2. Функция cwrap....426

Б.2.1. Изменение кода JavaScript для использования cwrap....427

Б.3. Вызовы функций напрямую....428

Б.4. Передача массива в модуль....429

Приложение В. Макросы в Emscripten....431

В.1. Макросы emscripten_run_script....431

В.2. Макросы EM_JS....433

В.2.1. Без параметров....434

В.2.2. Передача значений параметров....435

В.2.3. Передача указателей в качестве параметров....437

В.2.4. Возвращение указателя на строку....438

В.3. Макросы EM_ASM....440

В.3.1. EM_ASM....441

В.3.2. EM_ASM_....442

В.3.3. Передача указателей в качестве параметров....444

В.3.4. EM_ASM_INT и EM_ASM_DOUBLE....444

В.3.5. Возврат указателя на строку....446

Приложение Г. Ответы к упражнениям....449

Г.1. Глава 3....449

Г.2. Глава 4....451

Г.3. Глава 5....451

Г.4. Глава 6....452

Г.5. Глава 7....453

Г.6. Глава 8....456

Г.7. Глава 9....457

Г.8. Глава 10....461

Г.9. Глава 11....465

Г.10. Глава 12....467

Г.11. Глава 13....470

Приложение Д. Дополнительные возможности текстового формата....472

Д.1. Операторы потока управления....473

Д.1.1. Операторы if....473

Д.1.2. Циклы....478

Д.2. Указатели на функции....486

Д.2.1. Тестирование кода....488

Создавайте высокопроизводительные браузерные приложения, не полагаясь на один только JavaScript! Компилируясь в бинарный формат WebAssembly, ваш код на CC++ или Rust будет работать в браузере с оптимальной скоростью. WebAssembly обеспечивает большую скорость, возможности повторного использования существующего кода и доступ к новым и более быстрым библиотекам. Кроме того, при необходимости вы можете настроить взаимодействие с JavaScript.


Похожее:

Список отзывов:

Нет отзывов к книге.