Какой язык программирования для WebAssembly

?

WebAssembly решает многие проблемы совместимости между устройствами, это как более универсальный Java. Кроме того, более сложная задача заключается в обеспечении безопасности. Один язык генерации кода wasm может подойти лучше другого в зависимости от предполагаемого типа приложения: локальное все в wasm, локальное с Node.js или в Сети.

Le bout du tunnel avec WebAssembly
Конец туннеля с WebAssembly

Язык C

Программы C, скомпилированные в wasm, могут использоваться как исполняемые или как библиотеки функций для JavaScript. Во втором случае, если используется runtime C, как, например, функции <stdio.h> команде создания экземпляров в JavaScript-скрипте нужен параметр ImportObject, указывающий все «импортированные» функции, такие как printf, putchar и т. д.
Функции доступа к файловой системе по-прежнему должны включать WASI, выделенную для WebAssembly и заменяющую libc.
Команда компиляции библиотеки имеет следующую фигуру:

emcc hello.c -Oz -s WASM=1 -s SIDE_MODULE=1 -o hello.wasm 

Языки C и C++ - не те, которые лучше всего подходят для использования с node.js.

C++

Программа C++ идеально преобразуется в Wasm для выполнения с помощью wasmer или wasmtime. Но когда ты хочешь создать библиотеку, пригодную для использования скриптом JavaScript, это сложнее. Em++, основанный на CLang, изменяет имя функции. Например, add () становится _Z3addii (). Это называется «манглинг». Потребуется изменить объявление функций C++, чтобы их можно было рассматривать как функции C.

Руст

Это новый язык Mozilla, одного из основных игроков в разработке WebAssembly, поэтому он хорошо компилирует на wasm, но, очевидно, не позволяет повторно использовать старые программы.

Джулия

Как и Rust, Юлия использует платформу LLVM для создания исполняемого кода, а потому генерирует биткод LLVM, который легко преобразуется в wasm.
Инструкции по использованию см. на сайте Julia-Wasm.

AssemblyScript

Это решение для использования wasm в браузере. AssemblyScript - версия TypeScript, созданная для создания кода wasm, а не JavaScript. Он постоянно развивается, но на сегодняшний день имеет недостатки и поддерживает только часть языка TypeScript.
Однако его время работы включает в себя управление памятью и коллекционный гараж. Язык поддерживает тип String и динамические таблицы.
Файл wasm создается простой командой:

asc hello.ts 

C # (с Blazor

)

Платформа создания веб-приложений Microsoft, использующая язык C #, может также создавать код WebAssemby. Его главная цель - заменить JavaScript на C # - частично - который может работать в браузере после преобразования в wasm. Это альтернатива Angular (использует TypeScript) и React (использует JavaScript ).

Swift (Linux/MacOS)

Еще один язык платформы LLVM. Сайт SwiftWasm рассказывает, как создать программу wasm с одной инструкцией:

swiftc -target wasm32-unknown-wasi hello.swift -o hello.wasm

Необходимо включить время выполнения WASI. SwiftWasm не работает в Windows, но можно создавать программы wasm под Linux и использовать их в браузере на всех системах.

Скриптол (C++)

Способ генерировать wasm по C++ без программирования на C++. Язык Script имеет четкий простой синтаксис, компилируемый в C++, который затем компилируется в wasm и также может быть выполнен непосредственно wasmer.

solc hello