Size: a a a

WebAssembly — русскоговорящее сообщество

2021 July 26

Б

Богдан in WebAssembly — русскоговорящее сообщество
Я просто хочу контролировать производительность. Подобно тому как Вячеслав Егоров своими статьями (https://mrale.ph) открыл для меня мир специфичных оптимизаций жс-кода под v8 в результате которого один жс-код может выполняться на порядки быстрее другого, то точно также я хочу разобраться в том как v8 компилирует васм в нативный код чтобы учитывать это при разработке.
И речь идет не о том что приложение не будет работать в других движках, речь о том чтобы завязываться или учитывать оптимизации v8 связанные с компиляцией васма в нативный код просто потому что учитывать еще специфику safari и firefox это будет неподъемное дело. А учитывая что доля chrome-based браузеров с v8-движком около 70 процентов то имеет смысл как раз сосредоточится на v8 специфических оптимизациях (а как это будет работать в других браузерах уже как получится главное чтобы не сильно медленнее)
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
Я не хочу запускать жс-движок который будет выполнять жс-код для запуска васм-модуля я хочу вызвать v8 чтобы скомпилировать васм и получить дамп машинного кода чтобы дальше получить бинарник которого можно запускать самостятоятельно без v8 движка
источник

AC

Alexander Chichigin in WebAssembly — русскоговорящее сообщество
Тут два момента: во-первых и в-главных: в отличие от JS/Java/C# Wasm проектируется чтобы иметь предсказуемую скорость выполнения — там нет простора для спекулятивных оптимизаций, поэтому все движки выполняют одни и те же детерминированные оптимизации (как и для C по сути). Во-вторых, оптимизации — это moving target, со временем их становится больше в каждом из движков. В пределе со временем они все сойдутся к одному и тому же набору. Нет смысла оптимизировать под оптимизации — лучше просто писать (ещё лучше — генерировать) оптимальные (относительно формальной модели иполнения) Wasm-код.
источник

AC

Alexander Chichigin in WebAssembly — русскоговорящее сообщество
Так не получится. Да это и не нужно потому что см. выше.
источник

DM

Dmitry M in WebAssembly — русскоговорящее сообщество
А почему просто не написать БД на C/C++/Rust и сразу скомпилировать в бинарник?
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
Почему не получится? V8 не умеет делать дамп машинного кода? Почему нельзя запустить v8 чтобы скомпилировать wasm в машинный код (указав архитектуру или досптупные инструкции cpu) и дальше уже обернуть этот дамп в бинарник и уже запускать этот бинарник без всякого v8-рантайма?
источник

AC

Alexander Chichigin in WebAssembly — русскоговорящее сообщество
Не умеет делать дамп, который бы не зависел от ран-тайма. 🤷‍♀
источник

AC

Alexander Chichigin in WebAssembly — русскоговорящее сообщество
С чего бы и зачем бы он вообще это умел?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Я советую дождаться вот этого предложения:
https://github.com/WebAssembly/instrument-tracing/blob/master/proposals/instrument-tracing/Overview.md

В v8 вроде под флагом уже даже завезли что то на эту тему
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
> Почему не получится? V8 не умеет делать дамп машинного кода?
d8 умеет, обычный node.js или браузер - нет. Но с instrument-tracing тоже будет уметь и при чем можно прямл в коде будет указывать диапазон для дампа
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
Потому что я уже почти написал мини-язык который компилируется в wasm;) Тут такое дело - с одной стороны мне как джаваскрипт-фронтенд-разработчику лень учить огромную спецификацию с++ или rust со своими специфическими фичами и особенностями грамматики/конструкций/поведения. С другой стороны зачем мне куча фич языка если я буду использовать только 10% (сужу по тому как я использую javascript/typescript) ?
А так я написал компиляцию в wasm только тех фич которе мне нужны со знакомым мне синтаксисом и у меня появляется чувство прекрасного)

И главное - следуя поговорке - "каждой задаче свой инструмент" я понимаю что под задачу "написать универсальную бд" я могу написать язык программирования конкретно под эту задачу ну либо добавить в язык нужные мне фичи которые упростят разработку (и в отличие от с++/rust я не буду заниматься раздумиями и "как мне бы идиоматично/удобно/красиво написать нужный мне код на этом языке" не говоря уже про различные ограничения и нюансы с которыми придется столкнуться)
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Вам осталось еще написать свой браузерный движек и операционную систему на этом же языке и тогда жизнь вообще наладиться 😉
источник

AC

Alexander Chichigin in WebAssembly — русскоговорящее сообщество
Чья бы корова мычала, а уж авторы AssemblyScript могли бы и помолчать! 😂
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Ну мы AS писали не сугубо для себя =0 Кроме того я знаю еще один такой проект, точнее язык, который писался специально для мессенджера;) Это V. Мессенджер заброшен, язык недореализован, за то во всю уже пилиться операционная система vinix для загрузке которой не хватает даже 2-х Гигабайт 😉
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
нет, браузерный движок это куча css/js спецификаций которые невозможно реализовать в одиночку https://habr.com/ru/company/dcmiran/blog/493018 Чего только стоят нюансы инлайн/инлайн-блочного контекста форматирования https://css-live.ru/category/tajny-css2-1
А вот что можно написать так это свой движок для рендера своих сайтов/spa-приложений - например вместо того чтобы использовать css/html/svg/cavas2d-api можно написать свой лейаут и рендер компонентов, вектора и текста (вместе с антиалиасингом) когда мы вычисляем каждый пиксель экрана используя wasm и в конце вызываем один метод putImageData чтобы передать массив пикселей браузеру для отображения. В общем делать так как делают OnlyOffice (конкурент гугл-докс) https://habr.com/ru/company/teamlab/blog/141434
И да, я уже пишу такой движок (который рисует пиксели текста/вектора по своему алгоритму (потому что 2мб бинарника skia которого тащит flutter это слишком много для простого сайта)

А что касается своей операционной системы то тут я могу однозначно ответить что я не пишу и никогда не буду писать свою ос для сервера просто потому что для сервера операционная система не нужна
источник

AC

Alexander Chichigin in WebAssembly — русскоговорящее сообщество
Это феерично, да...

Но я бы ожидал, что ты кратко охарактеризуешь объём работ по реализации ЯП на Wasm: собственный компилятор с графовым IR, оптимизации,  рантайм с GC, стандартная библиотека с оптимизированными строковыми и мат. функциями, интеграция с остальным Wasm — вот это вот всё, что вы делаете уже сколько лет? Кстати, замыкания-то доделали в конце концов? 😃
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Так вот в том то и дело, что все это требует огромное колличество человекочасов. Ну если именно нужен компилятор промышленного масштаба
источник

AC

Alexander Chichigin in WebAssembly — русскоговорящее сообщество
> вместо того чтобы использовать css/html/svg/cavas2d-api

What about accessibility? Text-to-speach и всё такое?
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
Это все можно реализовать поверх - браузеры планируют добавить апи для управлением accessibility-объектным-деревом а до тех пор можно держать скрытую иерархию html-элементов и управлять ими (либо можно сделать свою навигацию и вручную вызывать text-to-speech методы для воспроизведения текста)
источник