WebAssembly поддерживает Mozilla, Microsoft, Apple и Google

Когда будет написана история этой эпохи программирования, то, что произошло, будет казаться пьяным шатанием сумасшедшего. Сначала у нас есть JavaScript, затем asm.js и теперь WebAssembly. Разве в веб-разработке нет планирования, предусмотрительности и видения? Очевидно нет.

WebAssembly

История может показаться сумасшедшей, но WebAssembly – еще один маленький шаг в правильном направлении. Браузер – это операционная система 21 века, но при этом изначально работает только на одном языке – JavaScript. Скажите, что вам нравится в JavaScript, мне это нравится, иметь только один язык в любой среде – нехорошо.

Конечно, ничто не мешает кому-либо изобрести новый язык или взять старый язык и скомпилировать его в JavaScript, чтобы он мог работать в браузере. Проблема в том, что JavaScript – это язык очень высокого уровня, который не совсем подходит для его роли в качестве языка ассемблера в сети. Именно здесь asm.js представляет собой правильное подмножество JavaScript, более похожее на язык низкого уровня с целочисленными типами данных и типами данных с плавающей запятой, он может быть быстрым. То есть asm.js – гораздо более подходящий ассемблер для Интернета.

Дело в том, что в любой момент мы могли бы просто создать виртуальную машину в стандартном веб-браузере. Возможно, это была даже JVM, благодаря которой все языки, связанные с Java, мгновенно запускались в браузере. Но, несмотря на все усилия Google, чтобы интерпретатор байтового кода PNaCL был принят, его по большей части игнорировали.

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

Веб-ассемблер (или wasm) – это двоичный байтовый код, содержащий все примитивные типы данных, целые числа различных размеров и чисел с плавающей запятой, а также ряд простых операторов и поток управляющих структур. Он двоичный, но байтовый код настолько близок к текстовому представлению, что вы можете переключаться между ними без потери информации. Это будет хорошей новостью для всех, кто хочет рассматривать код как часть представления исходного кода в браузере, но не очень хорошей новостью для любого программиста, которому надоело использовать обфускацию, когда хороший двоичный код будет достаточной защитой.

Основная структура байтового кода заключается в использовании AST – абстрактных синтаксических деревьев – для кодирования выражений. AST – это просто дерево, состоящее из операторов и операндов, и когда у вас есть AST, виртуальная машина может очень быстро оценить его, просто пройдя по дереву. Это также означает, что вы можете использовать стандартный интерфейс компилятора, такой как LLVM, для вывода AST из вашего любимого языка – в настоящее время в основном C / C ++. Бинарное представление обрабатывается до 20 раз быстрее, чем asm.js, и оно создает файлы меньшего размера. Это должно ускорить время загрузки, а также время работы.

На данный момент нет полной реализации wasm, в документах говорится о минимально жизнеспособном прототипе, являющемся первой целью. Существует полифилл, который позволит wasm работать на немодифицированном движке JavaScript, но ключ к будущему – сделать wasm нативным для всех движков JavaScript. Также доступны конвертер asm.js в wasm и экспериментальная версия движка Google V8.

Существует только неформальная дискуссионная группа, но в нее входят все важные люди, и ее активно поддерживает создатель JavaScript Брендан Эйх. Что-то пойдет не так, только когда он станет веб-стандартом.

Wasm – хорошая новость, и поскольку, когда он появится, мы будем еще ближе к работе со скоростью нативного кода в браузере, но стоит отметить, что, рассматриваемый как ассемблер, wasm все еще остается конструкцией довольно высокого уровня.

Переход от JavaScript к asm.js и wasm в некотором роде логичен, но многие программисты будут думать, что это очень круговой путь к байтовому коду для Интернета. Было бы довольно легко просто разрешить установку виртуальных машин, включая движки JavaScript, и сделать браузер действительно эквивалентом ОС. Конечно, проблема заключается в безопасности, и у wasm есть то преимущество, что она не меняет модель безопасности JavaScript.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *