Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Леонид Каганов ([info]lleokaganov)
@ 2020-01-23 15:52:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:неведомая хуйня, програмирование

Пишем веб на 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