0
<< предыдущая заметкаследующая заметка >>
23 января 2020
Пишем веб на C и ассемблере

Как мне тут рассказал Кирилл, оказывается, уже давно браузеры позволяют выполнять не только JavaScript, но и чистые бинарники. Ну, как чистые... на самом деле не совсем чистые, потому что этот как бы бинарник сперва браузером автоматически переделывается в бинарник для вашего типа процессора, но затем уже исполняется как родной.

Пишем код, например, на языке C:


<?php
double lomain
(double k) {
  for(
int i=0;i<1000;i++) k+=0.00001;
  return 
k;
}

С помощью, например, этого онлайн-инструмента https://wasdk.github.io/WasmFiddle/ комплируем его в бинарник и получаем в итоге для браузера такие строчки, которые позволят JS обратиться к бинарнику и получить результат его работы:

<script>
var 
wasmCode = new Uint8Array([0,97,115,109,1,0,0,0,1,134,128,128,128,0,1,96,1,124,1,124,3,130,128,128,128,0,1,0,4,132,128,128,128,0,1,112,0,0,5,131,128,128,128,0,1,0,1,6,129,128,128,128,0,0,7,147,128,128,128,0,2,6,109,101,109,111,114,121,2,0,6,108,111,109,97,105,110,0,0,10,171,128,128,128,0,1,165,128,128,128,0,1,1,127,65,232,7,33,1,3,64,32,0,68,241,104,227,136,181,248,228,62,160,33,0,32,1,65,127,106,34,1,13,0,11,32,0,11]);

var 
wasmModule = new WebAssembly.Module(wasmCode);
var 
wasmInstance = new WebAssembly.Instance(wasmModule, []);
alert('wasmo','У вас всё работает: '+wasmInstance.exports.lomain(10.2));
</
script>

Разумеется, есть и нормальные компиляторы с любого языка (вот, например, статья более подробная: https://habr.com/ru/post/342180/), но пока речь о самом принципе. Итак, если в этом окошке вы увидите число, похожее на "10.20999999999962", значит в вашем браузере wasm работает:

Опс! Вот как раз у вас не сработало! Напишите, пожалуйста, в комментарии, что у вас за система, интересно, какие еще не поддерживаются.

Я проверил у себя на Линуксе с Firefox, Сhrome, Opera и на мобильнике Chrome — везде сработало. Надеюсь, в WebView мобильных приложений тоже (пока не проверял).

Для чего это нужно? Да для чего угодно. Пал последний бастион, отделяющий браузер от любой другой среды программирования. Теперь любые вычислительные алгоритмы, нейросети, сложный анализ звука и изображений, динамические игры — всё может делать браузер ровно с той же скоростью. Лично я пока не придумал, для чего мне это может пригодиться в движке и на сайте. Но, с другой стороны, я и узнал-то об этом всего лишь позавчера ;)

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок

Комментарии к этой заметке скрываются - они будут видны только вам и мне.

Оставить комментарий