Что попало в людей WebAssembly? Из более быстрого способа запуска кода в браузере теперь кажется, что он вот — вот захватит весь мир-точно так же, как JavaScript.
Если вы следили за разворачивающейся историей WebAssembly, во всем этом есть оттенок безумия. JavaScript-это язык Интернета, и он встроен во все современные веб-браузеры. Было и остается множество вариантов ускорения работы кода в браузере, но тот, на котором мы, похоже, остановились, — это WebAssembly.
Как описать WebAssembly?
Даже если вы хорошо его знаете, точное описание трудно дать. Он описывается как ассемблерный язык, который может быть закодирован как двоичный или как читаемый человеком текст. Он работает в браузере в той же песочнице, что и код JavaScript. Он не может получить доступ к DOM и поэтому должен полагаться на JavaScript для своего пользовательского интерфейса. В будущем он может получить доступ к DOM, и в этом случае возникает вопрос о том, какова была/есть его тесная связь с JavaScript. Фактический код выполняется JIT-компилятором, но это всего лишь еще один способ реализации виртуальной машины.
В этот момент вы можете подумать, что это просто еще один способ реализации языка на основе байт-кода — подумайте о JVM или.NET JIT — и это может заставить вас задуматься, почему только браузер?
Это то, что представляет собой системный интерфейс WebAssembly, WASI. Вы можете думать об этом как о наборе стандартных функций, которые соединяют WebAssembly с операционной системой, в которой он находится, — своего рода стандартная библиотека для WebAssembly, в которой библиотека впитывает различия между операционными средами. Конечным результатом было бы то, что вы могли бы написать свою программу на выбранном вами языке — Rust, C или любом другом — скомпилировать ее в WebAssembly и с помощью систем, совместимых с WASI, запускать ее везде.
Да, это «Напиши один раз, беги куда угодно» снова и снова, и, если вы забыли, это было обещание Java, и мы все знаем много причин, по которым он работает не так хорошо, как должен.
Это только начало, и до сих пор работалось только над wasi-core:
«wasi-core будет содержать основы, необходимые всем программам. Он будет охватывать большую часть той же области, что и POSIX, включая такие вещи, как файлы, сетевые подключения, часы и случайные числа.»
Вы можете увидеть эту идею в действии в следующем видео:
Ничего из этого не является сверхумным, и подобные вещи существовали и раньше. Как именно появятся все эти библиотеки, неясно. Ясно, что это большая работа, и многое будет зависеть от деталей реализации.
Также становится все более очевидным, что эти усилия не имеют ничего общего с Интернетом или веб-браузерами. Он мог быть изобретен без упоминания о веб-браузере, а затем расширен для запуска в браузере. Это совершенно новая попытка «Написать один раз, запустить в любом месте» с новым байт-кодом низкого уровня и виртуальной машиной.
WebAssembly с WASI, несомненно, является изобретением колеса. Что не ясно, так это будет ли это лучшее колесо.
Ян Эллиот является автором Just JavaScript: Идиоматический подход; Асинхронность JavaScript; Just jQuery: Основной пользовательский интерфейс и Just jQuery: События, Асинхронность и AJAX, которые являются частью библиотеки I Programmer, опубликованной I/O Press.