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

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

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

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

Сообщества

Настроить S2

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



Пишет Леонид Каганов ([info]lleokaganov)
@ 2023-03-09 05:23:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:rust, программирование

Веб-разработка: wasm, rust и yew
взято отсюда: https://lleo.me/dnevnik/2023/03/09

Сугубо технический пост, совсем для упоротых программистов. Остальным читать не советую.

Оказывается, в современных браузерах есть две возможности написать исполняемый код: это язык JavaScript и бинарный кроссплатформенный ассемблер WASM. Который по сути не язык, а результат компиляции с другого языка, например C++, GO или Rust.

Поначалу я воодушевился и даже думал, не переписать ли мне движок блога на wasm. Но оказалось, что практического смысла у wasm немного: он обычно не быстрее JS, не надежнее, не экономичнее, и уж точно не компактнее. Никаких новых фич и лазеек программисту он не открывает: как и для JS, тут действуют ровно те же политики безопасности, те же ограничения на соединения и доступ к в файловой системе. Однако есть два типа задач, где WASM будет полезен. Во-первых, это могучие вычисления, которые надо производить в браузере у пользователя. Ну, не знаю, обрабатывать мегатаблицы. Или сложными алгоритмами найти на фотке лицо и подрисовать усы и рога. Во-вторых — это использование готовых библиотек, которые почему-то (почему?) были написаны не на JS, а на C или Rust. Например, какие-то обработки изображений или процедуры блокчейна.

Про Rust пока не буду ничего говорить, надо разобраться ещё и попривыкнуть. А вот про yew (один из способов превратить Rust в wasm) скажу. Оказалось, это какой-то клон React. По крайней мере, у него подозрительно совпадает синтаксис и библиотеки. React — поделка, рожденная в недрах бесовского Фейсбука.

Но если поставлена задача собрать браузерный код на библиотеках Rust, то иного пути нет. Поэтому я пока успешно сделал модельку на yew, которая достаточно кривым способом (умнее пока не придумал) получает некие данные (строку), передает ее в подгруженный файл.wasm (240кб говна), где находится обработчик на Расте, который выдает результат:

Это транслятор чисел в кодировке Compact. Можно вводить например:
а) Число, например 12345 (результат: кодировка Scale в HEX, получается 2 байта: 0xe5c0)
б) hex-строку, начинающуюся с 0x, например: 0xe5c0 (результат: раскодированное 12345)
в) также можно просто ввести HEX-массив, начинающийся с 0X (заглавная), и получить число, где первый байт считается младшим

Смысла в этой софтинке немного, за исключением того, что это работают на Расте библиотеки hex="0.4.3" и parity-scale-codec="3.1.5", успешно превратившись в браузерный ассемблер.

Кому интересно (но в первую очередь для себя), положу код здесь:

[ ТЕКСТ ПОД КАТОМ: Доступен только в оригинальной заметке на сайте ]

А как вы думаете, какие интересные штуки можно реализовать на wasm вместо JS?


UPD: Подумав, удалил все комменты про React, он вообще не тема сегодняшней заметки, а был упомянут лишь в контексте, что на него похож yew, на котором я делал wasm, что мне не сильно понравилось. Откуда разгорелся такой флейм и кому он нужен — загадка. Пойду удалю все комменты на эту тему, включая свои. Приношу извинения всем, кого так больно ранит мое мнение про React, Facebook, Windows и ряд других религиозных святынь. Это мое личное мнение, мой собственный осознанный выбор между альтернативами, я время от времени высказываю свое мнение в своем личном дневнике, но никому не навязываю. Просто разрешите мне иметь собственное мнение, не надо так оскорбляться.



(Добавить комментарий)

WASM must die
[info]webhate
2023-03-09 19:37 (ссылка)

Суть её, насколько я понимаю, в том, что школота нулевых не смогла осилить работу с DOM-моделью браузера и Аяксом.

І зараз ніхто не осилює тому що є і був jQuery через який всі роблять й AJAX. І окрім jQuery можу згадати ще й Mootools і Knockout.js.
И то правда: до 2010 года подавляющее число сайтов, даже крупные соцсети типа LiveJournal, работали тупо обновлением всей страницы. Захотел написать комментарий — перегрузилась страница, где сбоку появилась форма комментария. Нажал кнопку «отправить» — снова перегрузилась страница, где появился комментарий. Так уебищно до сих пор работает половина сайтов интернета: все эти визовые центры с онлайн-анкетами, коммунальные службы и прочее.

Це не обо'язково погано. Зачасту так простіше і надійніше а врахочуючи кількість JavaScript якого стає все більше і більше, то ще й швидше. Також це може бути ознакою того що той хто так зробив просто низькокваліфікований павутинний програміст.
Иными словами, к появлению Реакта выросло целое поколение старой школы, которое привыкло со стороны сервера рисовать новую страницу по любому чиху, всякий раз перегружая браузер, и не представляла себе иного способа работы Веба.
Можна подумати що React це перший з JavaScript framework і до нього нічого не було. Якщо й називати когось поколінням старої школи, то це люди які нічого окрім jQuery не знали а ті хто звик перемальовувати всю сторінку творили павутинні програми ще задовго до появи jQuery і от вони якраз і є справжньою старою школою.

Не знаю що там такого цікавого можна зробити на WASM чого не можна на JavaScript. Мабуть його придумали щоб павутинним програмістом не довелося вчити щось відмінне від свого паувтинного програмування і щоб в павутинних переглядачах можна було робити те що в них не можна було робити до появи WASM.

(Ответить)