WebAssembly - это технология, разработанная совместно разработчиками основных веб-браузеров.

В документе «Повышение скорости Интернета с помощью WebAssembly» WebAssembly определяется как байт-код низкого уровня, который может компилировать программы C / C ++ в подмножество javascript под названием asm.js.

WebAssembly открывает ряд возможностей, в которых на самом деле доминирует Javascript, как упоминалось в документе:

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

WebAssembly имеет три основных принципа:

  • Безопасно. Опишите безопасную для памяти среду выполнения в песочнице, которая также будет иметь те же политики безопасности разрешений, что и браузер.
  • Эффективно: позволяет компилировать программы C / C ++ в машинный код для запуска в веб-приложение.
  • Компактный: код, созданный с использованием двоичного формата для сокращения времени загрузки. Намного меньше, чем типичный файл javascript.

Требование

Сначала вы установите emscripten SDK с помощью следующих команд:

$ git clone https://github.com/juj/emsdk.git
$ cd emsdk
$ ./emsdk install latest
$ ./emsdk activate latest

Чтобы добавить переменную среду компилятора Emscripten в вашу систему, введите

$ source ./emsdk_env.sh --build=Release

Для получения дополнительной информации по установке: http://webassembly.org/getting-started/developers-guide/

Компиляция из кода C ++

Например, алгоритм наибольшего общего делителя в C ++ выглядит следующим образом:

Предположим, что приведенный выше код представляет собой файл main.cpp, а алгоритм gcd имеет два аргумента 190 и 76 (результат gcd среди обоих чисел равен 38), поэтому, перейдя в терминал, введите

$ emcc main.cpp --emrun -s WASM=1 -o test.html

При этом файл main.cpp компилируется в файл двоичного формата (.wasm). Описание каждого флага:

--emrun //This allows use stdout, stderr and exit(return code) into your code, as in the case de std::cout.
-s WASM=1 //Javascript code generation(a js and wasm files).
-o test.html //html page name to generate.

Когда он выполняется:

$ Web server root directory: /…/…/
$ Now listening at http://localhost:8080/

Итак, откройте браузер и перейдите по адресу http: // localhost: 8080 / test.html, результат: 38.

Отлично! Ваша первая программа с WebAssembly.

Обновление: спасибо моим друзьям из Reddit за ваши комментарии о коде C ++.

Ссылка: