lleo_kaganov (lleo_kaganov) wrote,
lleo_kaganov
lleo_kaganov

Category:

Пишем веб на C и ассемблере

это перепост заметки, оригинал находится на моем сайте: https://lleo.me/dnevnik/2020/01/23

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

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

=============== cut ===============

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

=============== /cut ===============

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

=============== cut ===============

<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>

=============== /cut ===============

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

=============== cut ===============

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

=============== /cut ===============

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

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



это перепост заметки, оригинал находится на моем сайте: https://lleo.me/dnevnik/2020/01/23
Tags: неведомая хуйня, програмирование
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments