"Я думаю, что это новое поколение Интернета"

WebAssembly не что иное, как запуск машинного кода непосредственно в браузере, например C++, код Rust, который вы можете напрямую запускать в браузере с помощью wasm.

Web Assembly или WASM — это будущее Интернета.

Веб-сборка

WebAssembly, разработанный W3C, по словам его создателей, является «целью компиляции». Разработчики не пишут WebAssembly напрямую; они пишут на языке по своему выбору, который затем компилируется в байт-код WebAssembly. Затем байт-код запускается на клиенте — обычно в веб-браузере — где он транслируется в собственный машинный код и выполняется на высокой скорости.

Код WebAssembly должен загружаться, анализироваться и выполняться быстрее, чем JavaScript. Когда WebAssembly используется веб-браузером, по-прежнему возникают накладные расходы на загрузку модуля WASM и его настройку, но при прочих равных условиях WebAssembly работает быстрее. WebAssembly также предоставляет изолированную модель выполнения, основанную на тех же моделях безопасности, которые сейчас существуют для JavaScript.

Вот моя HTML-страница

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>wasm</title>
</head>
<body>
<h1>Welcome to my first Web Assembly Project</h1>
<kbd>//go to console and type 'mul(4,4)' then you will get '16' and understand how web assembly works</kbd> <br><br>
<kbd><a href="https://www.github.com/sakiakamonster">https://www.github.com/sakiakamonster</a></kbd>
<script src="wa.js"></script>
</body>
</html>

Просто зажмите ctrl+shift+i и зайдите в консоль и проверьте.

Вот мой код javascript

//code for import of web assembly  file into js
let mul;
function loadWasm(filename)
{
return fetch(filename)
.then(response => response.arrayBuffer())
.then(bits => WebAssembly.compile(bits))
.then(module => { return new WebAssembly.Instance(module)})
};
loadWasm('test.wasm')
.then(instance => {
mul = instance.exports._Z3mulii;
})

Вы можете заметить, что _Z3mulii вызывается в коде js, где то же самое ключевое слово присутствует в коде WebAssembly.

Вот код WebAssembly

(module
 (table 0 anyfunc)
 (memory $0 1)
 (export "memory" (memory $0))
 (export "_Z3mulii" (func $_Z3mulii))
 (func $_Z3mulii (; 0 ;) (param $0 i32) (param $1 i32) (result i32)
  (i32.mul
   (get_local $1)
   (get_local $0)
  )
 )
)

Сборка Firefox x86

wasm-function[0]:
  sub rsp, 8                            ; 0x000000 48 83 ec 08
  mov ecx, esi                          ; 0x000004 8b ce
  mov eax, ecx                          ; 0x000006 8b c1
  imul eax, edi                         ; 0x000008 0f af c7
  nop                                   ; 0x00000b 66 90
  add rsp, 8                            ; 0x00000d 48 83 c4 08
  ret                                   ; 0x000011 c3

Вы также можете скачать мой репозиторий на github

https://github.com/sakiakamonster/WebAssembly-Демо

если вам понравилась эта статья, пожалуйста, дайте кучу хлопков.

Спасибо