Как стать автором
Обновить

Комментарии 67

Google, Microsoft, Mozilla и несколько других людей

Карл Маркс и Фридрих Энгельс — это не четыре разных человека, а Слава КПСС — вообще не человек…
Не понимаю Вашу иронию. В оригинале так и написано. Более того, над стандартом работают и независимые разработчики.

Google, Microsoft, Mozilla, and a few other people
Просто звучит смешно, вот и вся ирония. Не хотел никого обидеть, даже наоборот :)
Действительно :) Исправили на «независимых специалистов».
Переводится как «корпорации… и ряд независимых разработчиков», а не то, как вы написали.
Хватит «вы» с большой буквы писать. Особенно с учётом того, что это вообще не к отдельному человеку обращение.
Спасибо за комментарий. Исправили.
Бинарный asm.js?
Не совсем.
Вот тут объясняют почему создается новый стандарт:

https://github.com/WebAssembly/design/blob/master/FAQ.md#why-create-a-new-standard-when-there-is-already-asmjs

Если вкратце
1. wasm позволяет использовать бенефиты которые нельзя добиться от asm.js. А именно обойти AOT-компиляцию, и отсутствие asm.js оптимизаций.
2. Меньший размер бандла приложения(об этом кстати было в статье).

Аксель Раушмайер сегодня написал что wasm это посути способ доставки бинарного asm.js но ссылок на это я больше нигде не нашел.

Надо следить за развитием стандарта, и там уже будет предельно понятно как asm и wasm друг с другом будут взаимодейтсовать(и будут ли?).
Очень интересно. Не подскажете где можно глянуть подробнее как это работает? Как я понял, это код, который исполняется самим браузером в каком-то низкоуровневом режиме? Или это именно бинарник, стартующий в параллельном с браузером процессе и браузер в нём считает тяжёлые части кода?
Код выполняется той же самой виртуальной машиной, а в будущем обещают следующее:

When WebAssembly gains the ability to access garbage-collected objects, those objects will be shared with JS, and not live in a walled-off world of their own.
Вот наивные, они ещё не поняли, что JavaScript управляет этим миром.

А по делу, есть Roadmap? В сети не нашёл, может упустил что-то.
В гигите лежит у них
Это что-то типа более портабельного, чем в llvm, байткода?
Кстати, а интересная задумка. КОмпилируй из любого фронт-енда в llvm и будет счастье. Отличная совместимость и куча бонусов.
Но видимо нет, опять не срослось…
Батюшки… и 20 лет не прошло как додумались…
Додуматься легко, но сложно договориться всем между собой.
Моё, например, мнение состоит в том, что WA бесполезен by design.

Узкое место любого веб-приложения — скорость рендеринга. Да, конечно, в силу ограничений языка (некомпилируемый, слабо типизированный) код на JS будет проигрывать коду на asm-е в производительности, да только нет такой задачи в вебе. Никто не занимается тяжёлыми вычислениями на клиенте, кроме майнеров биткойнов да различных проектов полезного использования простаивающих ресурсов.

Любое приближенное к реальности приложение столкнётся в первую очередь с проблемой отображения большого количества данных (читай, дом-элементов) и скорости реакции браузера на действия пользователей. WA в этом поможет примерно никак, потому что тормозит в этом месте не js-код, а сам браузер, обрабатывающий «тяжёлые» страницы.
Упреждая вопросы. На десктопе, где пишут на компилируемых статически типизированных языках, эта проблема не решена никак. Если попытаться сделать форму с таким же количеством визуальных компонент, как на обычной веб-странице, она тормозить будет гораздо круче исходной веб-страницы.
Всё это можно оптимизировать, да и из WA можно будет наверняка рендерить напрямую на какой-нибудь egl surface причем предварительно построив граф сцены и сделав так, чтобы долго считающиеся/рендерящиеся данные появлялись на экране по мере готовности, не блокируя основной тред отрисовки.
В общем, я думаю, что в прямых руках можно сделать так, чтобы веб страничка наконец-то работала и отображалась плавно, а не рывками, как сегодня.
> Всё это можно оптимизировать, да и из WA можно будет наверняка рендерить напрямую на какой-нибудь egl surface причем предварительно построив граф сцены и сделав так, чтобы долго считающиеся/рендерящиеся данные появлялись на экране по мере готовности, не блокируя основной тред отрисовки.
В общем, я думаю, что в прямых руках можно сделать так, чтобы веб страничка наконец-то работала и отображалась плавно, а не рывками, как сегодня.

Так можно. Но что мешает браузеру это сделать прямо сейчас? Процесс рендеринга в JS не протащен никак от слова совсем, рендеринг полностью на совести браузера. Просто, ха-ха, рендеринг UI — дофига тяжёлая задача, которая в термины графических интерфейсов ложится примерно никак. Собственно, настольные приложения, работающие напрямую с видеокартой (читай, игры) обладают совершенно примитивным и недоразвитым UI, даже rich text в игрушке не встретить.
А сложный UI в играх особенно то и не нужен. Но вообще забавно получается, что видеокарта может спокойно обрабатывать миллионы полигонов по 50 раз в секунду, но быть абсолютно бесполезной при рендеринге какого-нибудь сложноразмеченного текста.
Может в языках разметки проблема?
Нет, проблема в том, что сложная разметка не параллелится. Положение и вид каждого глифа зависит от окружающих его глифов и миллиона сторонних причин, в отличие от видеоигр, где сцену можно описать простым и конечным набором примитивов.
Распараллелить можно что угодно, главное иметь желание. В данном случае глифы распределяются между n потоками, сначала рассчитываются габариты, как только все потоки отработали, мы знаем размеры каждого примитива, и дальше можно делать что угодно параллельно. А если все будет делаться с использованием неблокирующих структур данных, так вообще сказка.
Круто. Идите офисные пакеты разрабатывать, озолотитесь.
К счастью я уже являюсь разработчиком высокопроизводительных баз данных.
Никто не занимается тяжёлыми вычислениями на клиенте
Ну, дык, видимо, теперь будут.
Ну, так как раз и хотят заниматься тяжелыми приложениями в браузере – в одной из статей говорится даже о риалтайм-приложениях, типа процессоров звуковых эффектов, обработка видео и т.д. С другой стороны, тот же Servo мозиловцы и делают с оглядкой на текущий медленный DOM, который изначально не был рассчитан на то, чтоб его модифицировали. Так что движение к быстрым веб-приложениям идет со всех сторон. Плюс, думаю, очень многих не устраивает медленная скорость обновления стандартов ES (включая доставку в браузеры) и у JS слишком много родовых травм, которые теперь надо оставлять для обратной совместимости.
> Ну, так как раз и хотят заниматься тяжелыми приложениями в браузере – в одной из статей говорится даже о риалтайм-приложениях, типа процессоров звуковых эффектов, обработка видео и т.д.

Процессоры звуковых эффектов давно есть (см. WebAudio, который, опять же, все вычисления скрывает внутри себя, на JS только интерфейсы к созданию фильтров). Обработка видео может быть, но это исчезающий кейс в онлайне.

Веб-приложение — оно, прежде всего, клиент-серверное. И главная проблема в вебе вотпрямщас — огромное количество скрытой под платформой магии типа reflow-repaint, garbage collector-а и прочей головной боли разработчика. Ахиллесова пята веб-платформы — тормоза и отзывчивость UI, вот что нужно ускорять-то. Любое сложное вычисление, если уж сильно хочется, можно на сервер отослать. Или насоздавать воркеров, чтобы компенсировать слабость интерпретируемого языка занятием пары дополнительных ядер.

> у JS слишком много родовых травм, которые теперь надо оставлять для обратной совместимости.

А поподробнее можно с этого места? Какие такие у JS родовые травмы?
В ВебАудио конечно есть некие фильтры. Но речь шла о создании новых, а не использовании нескольких стандартных (пусть и параметризируемых). Например запилить дисторшн гитарный со всяким вау-вау эффектами с существующим веб аудио проблематично.
Ну и насчёт Серво. Основной его интент — это распараллелить всё что можно: парсинг HTML, применение CSS, вообще всё. Иными словами, Серво не оптимизирует исполнение JS просто потому, что Servo — layout engine, а в качестве JS-движка там внутри SpiderMonkey, и менять его они даже и не собираются (по крайней мере, год назад так говорили).

Итого, Серво демонстрирует ровно обратную мысль к тому, что вы пишете: нет смысла ускорять JS-движок, нужно ускорять браузер.
А я и не говорил, что Servo оптимизирует JS, перечитайте, пожалуйста, мой предыдущий комментарий. Про клиент-серверное приложение это конечно хорошо, только на дворе второе десятилетие 21 века и многим приложениям сервер нужен лишь в качестве хранилища, что уже и сейчас можно делать не только с сервером. Вы как-то не понимаете, что браузер стал сам по себе платформой, и сервер ему может и не нужен вовсе — ну, максимум загрузить код вам в бразуер. По поводу травм — да легко — int64.
> Никто не занимается тяжёлыми вычислениями на клиенте, кроме майнеров биткойнов да различных проектов полезного использования простаивающих ресурсов.

Игры на WebGL. Тут вам и тяжелые вычисления, и быстрый рендеринг. Самое очевидное предназначение, как по мне.
Ну так игры на WebGL и так на WebGL! То бишь шейдеры пишутся на C-подобном языке. Чего там можно ускорить на уровне замены JS другим языком?
WebGL и шейдеры это всего лишь рендеринг. При чем тут выполнение непосредственно кода? CPU в современных занимает не менее половины всего времени на кадр. И это на высокопроизводительных языках типа С++.
Один банальный пример — физика, которая по сути куча числодробительного матана, где нужно выжать *всё* из производительности, и, например, написанные вручную ассемблерные SIMD-вставки там не просто так, а уже необходимость. В итоге, на декстопах ни один современный игровой движок не поддерживает процессоры, которые не умеют SSE2. В то время как кодогенерация JS по большей части сейчас плетется где-то на уровне поддержки Intel 486DX. Без возможности использовать SIMD даже вручную (SIMD.js можно уже не учитывать).
Господи, Хабр, да что с тобой? Когда думать стало немодным?

«Матан» исполняется так: программно задаётся набор объектов и их характеристики, тяжёлые расчёты выполняет спец. библиотека, опираясь на GPU или спец. комманды CPU. Абсолютно наплевать на каком языке задаются параметры — важно, на чём написан сам расчёт. И WebGL демонстрирует то же самое — абсолютно наплевать, на каком языке написана команда «загрузить текстуру в память» — важно, как имплементирована сама загрузка.

И веб-платформа в этом месте логична и проста: JS — управляющий язык. На нём пишутся скриптовые команды, что делать (манипуляция DOM-элементами, WebGL-шейдерами, применение криптографических алгоритмов, etc). А выполнение этих команд — на совести браузера, читай — C++ кода. Если приложение упирается в производительность JS — создаём новое API, в котором типовые задачи реализованы на C++, а в JS просто дырки до управляющих интерфейсов. Так сделано WebAudio, Web Animations, WebCrypto и хренова гора прочих новых спецификаций.
Понятия не имею, откуда вы взяли идею о использовании JS как управляющего языка. Нет. Я говорю именно про использование JS (или WebAssembly, в данном случае) для произведения самих расчетов. Да-да, вот берем и вычисляем физический матан силами JS-кода. Об этом же и в статье речь идет.

Вы же не станете предлагать все-все библиотеки на свете встраивать в браузер (чтобы они были в нативном коде) и делать к ним JS-интерфейс?
> Понятия не имею, откуда вы взяли идею о использовании JS как управляющего языка.

Да это как бы не я взял. Веб-платформа в этом направлении и развивается уже довольно долго.

> Вы же не станете предлагать все-все библиотеки мира встраивать в браузер (чтобы они были в нативном коде) и делать к ним JS-интерфейс?

Нет, не предлагаю.
Я только пишу, что WebAssembly типовых проблем веба не порешает. Никак.
Иметь возможность в браузере самому писать алгоритмы, в принципе, полезна. Но практически даром никому не нужна.
Поосторожнее с обобщениями. Вы видели, как работают растеризаторы томограмм в браузере? Там нужно показывать миллионы пикселей на каждом кадре, и выполнять сечения разными плоскостями в реальном времени. В играх есть много сложной математики, специфичной для каждой конкретной игры, которая должна вычисляться на клиенте. Уже сейчас множество приложений, которые до сих пор были возможны только на десктопе, переезжают в браузер. И это только начало.
Да, до этого JS действительно был не более чем управляющим языком. Но может, как раз потому, что его производительности заведомо не хватало для чего-то большего?..
Есть реальная задача — сделать производительную реалистичную 3D-физику в браузере. Какие сейчас есть способы это сделать? Верно, сейчас — никаких. Решит ли WebAssembly эту проблему? Да, решит. Я не знаю, как можно утверждать, что это не решает задачу.
«Типовая проблема» — довольно размытое понятие. Да, я совершенно согласен, что 99% веб-страниц WASM не поможет аж никак, и для них более актуально было бы ускорение, скажем, layout-движка. Но тем 1% страниц, которым WASM нужен — он действительно нужен.
>Иметь возможность в браузере самому писать алгоритмы, в принципе, полезна. Но практически даром никому не нужна.
Мне нужна. Кому платить?
Но практически даром никому не нужна.

Ха. Еще как нужна.
То фурье надо вычислить, то гравитацию посчитать для дофигалиона точек. JS-платформа легка для дистрибьюции в отличие от c++.

А вместо всего этого приходится городить кучу запросов-ответов на сервер, которые не смогут выполнить то что от них требуется в случае с играми — слишком долго.
Вы описываете каноническое применение скриптового языка. JS с этой задачей отлично справляется. Проблема с доставкой вашей реализации на C++ в браузеры пользователей.

Ждать, когда ваш юзкейс будет реализован в стандартных плагинах и доступен в большинстве установленных браузеров, можно очень долго. Заставлять пользователя устанавливать плагины, которые несут в себе ваш кастомный C++-код, это терять их большую долю. asm.js, как и wasm — это способ безопасно исполнять кастомный код в браузере, при этом с нулевым вовлечением пользователя.
И я совершенно с вами согласен!
Я только пытаюсь донести простую мысль, что типовые проблемы веб-разработки НЕ РЕШАТСЯ с помощью WebAssembly. Нетиповые задачи, как майнинг биткойнов — может быть. Ускорение работы и отзывчивости веб-страниц — нет. Нужно оптимизировать нижележащие алгоритмы и/или давать более полное управление из JS.
То, что сейчас типовое — это следствие ограничений веб-платформы. Будет меньше ограничений, и сразу то, что сейчас не типовое, полезет в веб.
*современных играх
JS — это такой Matlab для веба.
Никому почему-то не приходит в голову писать, что Matlab — плохой, негодный язык. Он же скриптовый! Со слабой типизацией! Некомпилируемый!

Да наплевать. Каждая строчка на Матлабе развернётся в миллион инструкций на asm-е, обрабатывающих гигабайты данных. Накладные расходы на сам язык Матлаб — ничтожны на этом фоне.
> Накладные расходы на сам язык Матлаб — ничтожны на этом фоне.
Ровно тогда, когда матлабовский скрипт не использует ничего, кроме встроенных функций, которые зачастую действительно реализованы в нативном коде. Как только же вам нужно сделать что-то нетривиальное руками — проще застрелиться, ибо производительность будет в сотни раз меньше, чем у аналогичного кода на С. Матлаб — прекрасная штука, но мне действительно приходилось несколько раз выносить тяжелые куски матлабовского скрипта в нативный код, ибо иначе ожидание становилось просто невыносимым.
Аналогичная проблема и с JS. Вот только в вебе *нет* никакой возможности вынести часть кода в нативную библиотеку. Увы.
НЛО прилетело и опубликовало эту надпись здесь
Узкое место любого веб-приложения — скорость рендеринга.

Ws не решает проблемы рендеринга, он позволяет выполнять код быстро, когда это необходимо — например, в игре.

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

Любое? Мм, нет, например на странице вполне может быть всего один элемент с отображением видео, а вот у него уже на wasm-е написанные кишки.

Мне кажется, вы не совсем правильно понимаете смысла этого стандарта, он в первую очередь создается для того, чтобы в браузере работало то, что сейчас не работает (или работает плохо). А не для того, чтобы страницы быстрее работали.
Вам не кажется, что web все больше напоминает:
wget google.com | /bin/sh в песочнице

или на приложения для androind || iOS?

Почему сразу не пойти по этому пути?
НЛО прилетело и опубликовало эту надпись здесь
В итоге каждый браузер будет просто маркетом для сайтов.

Точнее не так, каждый браузер станет менеджером пакетов для приложений-сайтов.
НЛО прилетело и опубликовало эту надпись здесь
Улучшение для браузеров: Браузеры будут понимать бинарный формат ...

Ахахахаха!!! Т.е. мяу…
Держу пари, что даже те из Вас, которым посчастливилось работать с ДОС, не знают, что можно использовать “debug” для отладки ассемблера и диссасемблеризации (обратный инжиринг) существующего кодф


Пари ты проиграл ;)
Очень интересно наблюдать за развития информационных технологий… История таки развивается по спирали, на каждом витке дополняясь чем-то качественно новым.

Сначала были текстовые консольные интерфейсы.
Затем появились графические интерфейсы. Сначала — как вспомогательный режим, который нужно было запустить чтобы посмотреть картинку… после чего они поменялись местами, и теперь консоли — текстовые «окошки» в графическом окружении…
Затем браузеры. Сначала — просто одна из программ графического интерфейса. Со временем они становятся все более значимыми, и постепенно берут на себя функциональность рабочего стола как такового… И вот уже приложения, игры и даже трехмерная графика существует в браузерах, приложения пишутся на html и javascript (хотя еще недавно html — всего лишь язык разметки документов, а javascript — лишь средство создания надоедливых баннеров), появляются целые операционные системы, целиком основанные на браузере и javascript…

Вторая тенденция — виртуализация. В стародавние времена программисты работали напрямую с железом. Затем стали появляться драйверы устройств, API операционной системы, и только единственное устройство — процессор — оставалось доступно для программ напрямую. Но и здесь — Java, .NET, попытки абстрагироваться и от процессора тоже. Собственно, стоило ожидать что с Javascript произойдет что-то подобное, раз этот язык становится новым Си на новом витке развития технологий. Логично, что с помощью WebAssembly перешли от прямой интерпретации текста к виртуальному коду. Придет время — перейдут и к пре-компиляции в машинный код, как Гугл с Dalvik -> ART.
Почему прямой интерпретации текста? V8 далеко не интерпретатор
Мечтаю о временах, когда можно будет заниматься веб-разработкой совсем без JavaScript
WebAssembly выглядит хорошим шагом в этом направлении
Согласен.
Хорошо было бы иметь единый не JS стек технологий и на фронте и на бэкэнде.

Интересно ведь — Ruby, Python, Go
Не пройдёт и N времени, как фронтенд будет на PHP…
Ну ничего себе!? Они придумали ABC из Флеша!

Для тех, кто не в курсе:

Весь программный код у Flash — это ABC (ActionScript Byte Code) блоки, выполняющиеся в виртуальной машине. Она написана на С++.
Вы можете ругать Flash или же оставаться его поклонником, но разными способами и названиями разные компании пытаются повторить то же самое, но на JavaScript и ищут для этого свой формат.
Нет, скорее llvm для браузера.
хм. wasm.ru получает второе дыхание?
Держу пари, что даже те из Вас, которым посчастливилось работать с ДОС, не знают, что можно использовать “debug” для отладки ассемблера и диссасемблеризации (обратный инжиринг) существующего кода.

Ты проиграл.
Всё, конечно, интересно, но рассказать о новом языке (или его подвиде) без примеров — это сильно.

Я бы хотел показать примеры, но их пока не особо много

Хотя бы то, что есть.
В статье совсем правильная вводная. Это не совсем новый язык, никто не будет писать на wasm
wasm это в первую очередь бинарный формат который должен заменить asm.js, с нормальной работой с памятью и т.д. Вы пишите код на любой языке который поддерживает LLVM, компилируете код в wasm и получившийся модуль подключаете как любой другой скрипт

По этому примеры не несут никакого особого смысла, всё что работало для asm.js, будет работать и для wasm
У wasm есть человеко читаемое представление, но и там смотреть особо не на что:

image

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории