Вот уже неделю западная айтишная пресса и форумы не могут успокоиться, обсуждая занятную новинку под названием WebAssembly. И «гудят» не столько из-за перспектив, сколько из-за невозможности сойтись во мнении — что же это на самом деле такое и как должно быть построено. Масла в огонь подливает состав участников разработки, включающий Mozilla, Google, Microsoft и Apple. Так что сомнений в том, что штука получится мощная, нет. Сложности оттого, что Сеть такой технологии ещё не знала. Были попытки реализовать нечто подобное, но все они или заброшены или ограничились узкими нишами, то есть универсальными не стали. А универсальность тут совершенно необходима. Впрочем, довольно загадок, давайте разберёмся что же это за зверь.

Если окинуть мысленным взором историю браузеров как класса, станет очевидна простая вещь: это не столько хаотичный взрыв технологий, сколько попытка уподобить веб-обозреватель классической вычислительной машине. Сначала интуитивно, позже осознанно, разработчики браузеров учили свои детища исполнять приложения и работать с информацией так же, как это делает любая офлайновая компьютерная программа. Отсюда потребность в языке программирования, который стал бы фундаментом для приложений Веб. Java, Adobe Flash, Silverlight, Javascript, NaCl — всё это, в общем, одного поля ягоды. Но никто из них задачу в полном объёме не решил.

Недостатки известны. Что-то требует подключения плагинов и исполняет веб-приложение вне периметра безопасности браузера. Что-то несвободно, то есть по определению ограничено рамками одной операционной системы. Что-то требует внесения серьёзных изменений в браузерную архитектуру. На этом фоне, конечно, выделяется Javascript — максимально приблизившийся к идеальному решению. Он всеми признан и всеми поддерживается. Но и он не без греха.

wasm-3

Дело в том, что требования к браузерному языку со временем изменились: уже в нулевые веб-дизайнерам стало недостаточно только лишь иметь свой язык программирования, им понадобился язык-посредник, на который можно «переводить» более сложные приложения, написанные на классических языках вроде C++. Javascript по мере сил и возможностей роль такого посредника выполняет, его даже модифицировали, чтобы у него это получалось лучше (см. конструктор asm.js). Однако изначально он для такого посредничества не предназначался — и это проявляется в работе: парсинг (чтение, расшифровка JS-программы) на мобильных устройствах отнимает немало времени и энергии.

А представьте, как здорово было бы заиметь абсолютно универсальный язык-посредник для веб-приложений! Требования к нему, впрочем, кажутся невыполнимыми. Во-первых, это должен быть не просто ещё один язык программирования, а такой, на который легко переводить программы с любых других языков — хоть с C, хоть с Python, хоть с того же Javascript. Во-вторых, предназначаться в первую очередь он должен не для человека, а для машины, а потому записываться не текстом, а байт-кодом (компактней, быстрее читается компьютером и легче транслируется в машинный код для исполнения). Наконец, в-третьих, он должен пониматься любым браузером на любой платформе. Иначе говоря, необходимо заставить разработчиков всех браузеров трудиться сообща — и это кажется едва не самым сложным!

wasm-2

И тем не менее, такой универсальный браузерный язык-посредник — «ассемблер для Веб» — уже существует: это, собственно, и есть WebAssembly (или, коротко, wasm). Пока, правда, нет ни спецификаций, ни тем более стандарта — только грубые наброски, назначение которых человеку со стороны не так-то просто объяснить. Однако лёд тронулся и это самое главное.

Реклама на Компьютерре

Уговаривать вендоров не понадобилось: они сами пришли к пониманию необходимости совместного труда — движимые нуждой, ибо Javascript уже явно недостаточен. В настоящий момент wasm пересекается только с одним языком, а именно всё с тем же Javascript (это облегчит внедрение поддержки wasm на начальном этапе), но в перспективе, как задумывается, перевести на него можно будет программу с любого языка. Главное его преимущество перед яваскриптом — в скорости: wasm-программа быстрее передаётся по сети (ведь она короче: байт-код!), в десятки раз быстрее читается и преобразуется в машинный код, а кроме того, возможно, будет и быстрей исполняться (wasm ведь не ограничен устаревшими конструкциями, как Javascript; он ближе к ассемблеру, чем к языкам высокого уровня).

В то же время wasm призван не заменить Javascript, а избавить его от задач, для решения которых тот не предназначался. Отец яваскрипта Брендан Айк — несмотря на недавние памятные события (см. «Месть геев»), он каким-то чудом в разработке WebAssembly участвует — так вот Айк уверен, что яваскрипт не исчезнет. Просто каждый язык пойдёт своим путём. Javascript возьмёт на себя задачи, не требующие больших вычислительных затрат, а wasm станет именно посредником: писать на нём не будут, в него будут переводить сложные программы с других высокоуровневых языков. В результате станет практически возможным писать эффективные веб-приложения на любом языке программирования, а среднестатистическая производительность таких приложений вырастет.

Неунывающий Брендан Айк по-прежнему рекомендует в любой непонятной ситуации ставить на Javascript!
Неунывающий Брендан Айк по-прежнему рекомендует в любой непонятной ситуации ставить на Javascript!

Работа над WebAssembly сконцентрирована сейчас в открытой группе при W3C, подключиться к которой может каждый желающий (кстати, приятный сюрприз: там много русских имён). Естественно, ни о какой стандартизации пока и речи нет, всё сшито на живую нитку (есть сырой FAQ). Но удастся ли вообще довести wasm до стадии стандарта? Ведь вендоры неизбежно станут тянуть одеяло каждый на себя, как делали это всегда. Впрочем, оглядываясь на успехи Javascript — который худо-бедно, не без оговорок, всё-таки универсален — можно надеяться, что и wasm достигнет по крайней мере того же уровня совместимости.

Как много времени это займёт? Айк считает, что через несколько лет все топовые браузеры обзаведутся поддержкой WebAssembly. И уже сейчас советует делать ставку не только на Javascript (его обычный совет последние лет пятнадцать), но и на wasm. Имхо, стоит прислушаться.

P.S. В статье использованы иллюстрации Charis Tsevis, Дмитрия Барановского, ModernWeb2015.