WebAssemby — еще одна веха


WebAssembly, скорее всего, станет следующим шагом для программ, работающих в браузере, и он постепенно приближается к выпуску. Последний шаг — скоординированный предварительный просмотр в Chrome, Firefox и Edge, оставляющий только вопрос, где находится Safari от Apple? Что означает WebAssembly в будущем?

Сначала нам нужно прояснить, в чем заключается большая идея.

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

Необходимость достижения скорости машинного кода — это то, что необходимо решить. Поскольку веб-браузеры становятся хостом для того, что раньше было настольным приложением, нам нужна дополнительная скорость. Нам также нужен способ писать на языках, отличных от JavaScript.

Первая попытка решения — это asm.js, который не является новым языком, а является подмножеством JavaScript. Вы можете думать об этом как о JavaScript, написанном особым образом, что позволяет движку предполагать вещи, которые позволяют ему ускорить выполнение кода. Использование asm.js действительно ускоряет работу, но, возможно, недостаточно. Его также можно использовать в качестве цели для компиляторов, таких как Emscripten, чтобы разрешить запуск кода C / C ++ в браузере.

WebAssembly, или wasm, идет дальше asm.js. Это не подмножество JavaScript, а двоичное представление программы в байтовом коде для стековой машины. Другими словами, WebAssembly запускается на виртуальной машине так же, как Java запускается на виртуальной машине Java. WebAssembly — это язык низкого уровня для моделируемой машины. Сообщение в блоге команды V8 содержит пример того, как выглядит wasm:

Необработанные байты в первом столбце — это то, что отправляется браузеру для запуска. Во втором столбце показана версия на языке ассемблера, а в третьем — соответствующий источник C, соответствующий wasm.

Компилятор выводит необработанные байты, и они не сразу становятся удобочитаемыми, но браузер может преобразовать их в текстовый формат автоматически. Считаете ли вы это читабельным или нет, зависит от того, с каким ассемблером вы столкнулись. Понятно, что мы уходим от эпохи, когда код на веб-страницах был довольно легко читаем.

Какое отношение все это имеет к JavaScript?

Ответ не такой, как вы могли ожидать. WebAssembly загружается, запускается и обычно управляется JavaScript. Существует объект WebAssembly, и вы должны использовать его, чтобы получить код WebAssembly, скомпилировать байты и запустить его. В будущем предполагается, что модули wasm будут загружаться в браузер точно так же, как JavaScript.

В блоге Firefox есть недавний график сравнения wasm, asm.js и нативного C / C ++:

Все это интересно, но прежде чем вы сможете это использовать, браузеры должны это реализовать. В блоге Chrome говорится:

Сегодня мы рады анонсировать предварительную версию браузера WebAssembly вместе с Firefox и Edge. WebAssembly или wasm — это новая среда выполнения и цель компиляции для Интернета, разработанная сотрудниками из Google, Mozilla, Microsoft, Apple и группы сообщества W3C WebAssembly.

Эта веха включает в себя:

кандидат на выпуск для дизайна MVP (минимально жизнеспособный продукт) (включая семантику, двоичный формат и JS API)

совместимые и стабильные реализации WebAssembly за флагом на стволе в V8 и SpiderMonkey, в разрабатываемых сборках Chakra и в стадии разработки в JavaScriptCore

рабочий набор инструментов для разработчиков для компиляции модулей WebAssembly из исходных файлов C / C ++

план по отправке WebAssembly по умолчанию, запрещающий изменения на основе отзывов сообщества

Это практически позволяет использовать все это в качестве эксперимента, но поскольку этой функции нет в производственных браузерах, вы не можете ожидать отправки кода конечным пользователям.

Обратите внимание на упоминание Apple в анонсе. Предполагается, что браузер Webkit будет развивать поддержку wasm, но они работают тихо самостоятельно и без участия в выпусках. В настоящее время неясно, будут ли в конечном итоге поставляться Webkit и Safari с wasm. Почему Apple сдерживается? Наверное, потому, что компания еще не определилась. Apple контролирует то, что работает под iOS, и приложения являются ключевой привлекательностью платформы для конечного пользователя. Если wasm станет реальностью, разница в производительности между собственным приложением и приложением wasm может быть небольшой, и это может означать, что Apple потеряет контроль над пространством приложений iOS. Очевидно, что это предположение о мотивах Apple, но нельзя отрицать, что он является странным среди крупных производителей браузеров, когда дело доходит до работы над wasm.

Неужели это новый светлый рассвет, который приведет к смерти JavaScript?

Первое, что нужно сказать, это то, что многим программистам нравится и восхищается дизайн JavaScript — это один из немногих языков, который не подчиняется примеру Java и C ++. Даже если вы действительно хотите отказаться от JavaScript, мало шансов, что это станет реальностью в течение некоторого времени. На данный момент JavaScript предоставляет большую часть инфраструктуры, которую использует wasm, и они, вероятно, будут сосуществовать долгое время.


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