Когда появился браузер, он был всего лишь окном для отображения текста и, возможно, нескольких изображений. Это был просто новый способ распространения документов, которые можно было найти на журнальном столике, например журналов или книг.
Java, JavaScript и CSS изменили все это. Достаточно было добавить немного полной по Тьюрингу функциональности, и умные программисты нашли способы дублировать текстовые процессоры, игры и многое другое внутри того, что когда-то было контейнером для слов и картинок, сидящих неподвижно.
Однако, несмотря на всю креативность, приложения, работающие в браузерах, все равно были медленнее и требовательнее к ресурсам, чем нативный код. WebAssembly был разработан, чтобы исправить это. Код поставляется в прекомпилированном виде, поэтому нет необходимости в использовании функции just-In-time. Он гораздо меньше, что сокращает расходы на пропускную способность и сетевые задержки. Он предлагает низкоуровневое, общее решение, поэтому разработчики могут передавать код в браузер, не опускаясь до уровня JavaScript и даже не прибегая к транспиляции кода.
Но история на этом не заканчивается. Разработчики находят способы сделать с помощью WebAssembly нечто большее, чем создание анимированных веб-страниц и добавление застежек-молний в рекламные объявления. WebAssembly, или Wasm, - это основополагающая технология, которая занимает место в инструментах и инфраструктуре всех стеков. Вот несколько наиболее интригующих примеров, которые нам удалось найти.
11 новых вариантов использования WebAssembly
Список умных решений продолжает расти. Все начиналось медленно, но сейчас существуют сотни удивительных приложений для WebAssembly. Возможно, одно из них вдохновит вас на следующий проект:
- Applets encore
- Декодирование речи
- Правила модульности
- Блокноты Wasm
- Анализ данных
- Старые видеоигры
- Функции как сервис
- Большие и тесные базы данных
- Зарывание в базы данных
- Продвижение интеллекта
- Плагины повсюду
Апплеты на бис
Приходилось ли вам слышать, как кто-то ностальгирует по тем временам, когда Java-код запускался в браузере в виде апплетов? Скорее всего, нет. Эта нативная функциональность так и не появилась и практически исчезла много лет назад. Но теперь вы можете вернуть это волшебство с помощью CheerpJ, версии JVM, скомпилированной на WebAssembly. Это как вернуться в прошлое и посмотреть "Матрицу" или "Умницу Уилла Хантинга", но без всяких заморочек 90-х, вроде необходимости перематывать кассету VHS, прежде чем вернуть ее обратно.
Декодирование речи
Если у вас еще остались мысли о том, что браузер предназначен только для игрушечного кода, то Ermine AI - хороший пример того, как разработчики Wasm не заботятся о таких древних ограничениях. Инструмент включает в себя целую модель искусственного интеллекта для распознавания речи, которая будет запускаться локально, предположительно в промежутках между моментами, когда остальной код браузера обслуживает какой-нибудь устаревший тег <blink>. Веб-страница модели предупреждает, что запуск может быть немного медленным, поскольку требуется время на загрузку всего необходимого.
Правила модульности
Конечно, контейнеры отлично подходят для развертывания программ на серверах, но как насчет других мест? Container2Wasm - это пока эксперимент, но он преобразует все ваши файлы в один Wasm-блоб, который можно запустить в любом месте, где есть возможность исполнять двоичные файлы WebAssembly. Если коду нужна помощь в эмуляции, инструмент также подсоединяет нужный эмулятор x86 или RISK-V.
Wasm-блокноты
Многие специалисты по изучению данных предоставляют свои результаты в блокнотах, поддерживаемых такими проектами, как Jupyter. Они объединяют код, данные и текст таким образом, чтобы любой читатель мог попробовать программу. Если вы хотите выполнить команду или вызвать функцию, достаточно нажать нужную кнопку. Это идеальный способ поделиться программным обеспечением в открытой и динамичной среде, которая вовлекает читателя.
Конфигурация ноутбука обычно полагается на сервер для вычислений. С точки зрения администратора, это значит настроить его и убедиться, что на нем работает Python. Теперь наборы инструментов на базе Wasm, такие как Marimo и Sphinx, делают эту работу еще проще, позволяя запускать Python-код прямо в браузере. Все, что вам нужно, - это Wasm-версия Python, Pyodide. Настроить сервер гораздо проще, и нет необходимости обрабатывать все вычисления за них.
Анализ данных
Ученые, занимающиеся изучением данных, любят использовать R для анализа данных, а затем применять такие инструменты, как Sweve, для их форматирования. Обычно это означает установку R на локальной машине или на сервере. Теперь инструменты на базе Wasm, такие как WebR и R-universe, превращают код R непосредственно в Wasm, и он запускается прямо в браузере. Любой человек, прочитавший ваш анализ, сможет выполнить ваш код на R без установки языка или необходимости убедиться в наличии нужной версии.
Старые видеоигры
Все помнят игры своей непутевой юности. Хорошая новость заключается в том, что вы по-прежнему можете проводить целые выходные, играя в эту классику, и все это без лишних хлопот, связанных с перекомпиляцией старого кода на C или Pascal. Такие проекты, как Wasm-4, гарантируют, что все ваши старые любимые авиасимуляторы и приключенческие игры будут жить прямо в вашем браузере. Кто не любит двухмерные царства, нарисованные с помощью 8-битной графики или wireframe?
Функции как сервис
Многие крупные облачные сервисы, поддерживающие микросервисы и так называемые бессерверные решения, естественно, заинтересованы в поддержке Wasm. Это идеальный способ упаковать небольшой объем кода, который можно быстро запустить, поскольку он близок к полностью скомпилированному. Облачные провайдеры, такие как Fermyon, Cloudflare и Wasmer, поддерживают модули WebAssembly различными способами. Другие провайдеры комплектуют модули инструментами вроде WasmEdge и запускают их, используя возможности среды исполнения Node для запуска кода WebAssembly.
Большие и близкие базы данных
В традиционной модели база данных - это священный процесс, выполняющийся на отдельной машине, предпочтительно в собственном защищенном виртуальном пространстве в каком-нибудь бронированном корпусе. Возможно, это все еще реальность, как мы ее знаем, но разработчики начинают задумываться о другом. Почему бы просто не встроить полноценную, многофункциональную базу данных в браузер, чтобы код мог использовать все ее возможности? Конечно, W3 подарила нам системы с ключевыми значениями, такие как WebStorage API, или более быстрые и глубокие модели, такие как IndexedDB, но и то, и другое ограничено. Такие проекты, как PGLite, DuckDB и SQLite 3, готовы хранить гораздо большие коллекции данных и анализировать их с помощью гораздо большего набора функций SQL. Они работают быстрее, а также предлагают API более низкого уровня, что позволяет подключать их к другим проектам Wasm.
Зарывание в базы данных
Wasm - это не просто механизм доставки для добавления больших, более мощных баз данных на ваши веб-страницы. Некоторые разработчики меняют это видение и встраивают код Wasm внутрь баз данных, чтобы добавить пользовательские функции (UDF). SingleStore, например, позволяет разработчикам добавлять как UDF, так и их двоюродные братья, функции с табличными значениями. Другие инструменты для потоковой передачи данных, такие как InfinyOn и Redpanda, позволяют преобразовывать информацию с помощью функций Wasm по мере ее прохождения через систему. Возможно, в итоге Wasm станет доминирующим форматом для внедрения новых вычислительных возможностей везде, где хранятся данные.
Продвижение интеллекта
Хотя WebAssembly может не подходить для глубокого внедрения в LLM или нейронные сети, которые являются частью генеративного ИИ, это не значит, что ему не найдется места в этом стеке. Например, у WasmEdge есть две системы плагинов для TensorFlow (здесь и здесь) и одна для PyTorch, так что ваш код может аккуратно взаимодействовать с вычислениями ИИ. Dylibso экспериментировал с подключением ИИ вроде ChatGPT к модулям Extism. Другими словами, Wasm может стать тем инструментом, который вам нужен для склеивания вашего кода с ИИ.
Плагины повсюду
WebAssembly предназначена не только для баз данных или искусственных интеллектов. Многие программные пакеты хотят, чтобы конечные пользователи могли легко добавить немного функциональности, чтобы расширить стандартный набор функций. Это означает разработку API, позволяющего смешивать новый код со старым, не создавая дыр в безопасности и не снижая эффективности. Wasm оказался довольно хорошей системой для этого, потому что он был разработан для того, чтобы делать примерно то же самое с веб-страницами. В ней очень хорошо продуманы безопасность, краткость и эффективность.
Многие программные пакеты уже предлагают такую возможность. При беглом просмотре их можно найти повсюду: от проектов Apache до миграции данных Zendesk. Программисты полагаются на базовые инструменты, такие как Extism, поддерживающие все основные языки и некоторые не столь распространенные SDK и PDK-библиотеки. Wasmi - еще один вариант, ориентированный на ограниченные или встраиваемые системы. Когда приходит время генерировать привязки, программисты обращаются к fp-bindgen, wasm-bindgen или wit-bindgen, чтобы сделать всю необходимую работу.
Заключение
Есть ли предел тому, что вы можете сделать с помощью WebAssembly? Не совсем. В этом, собственно, и смысл. Wasm открывает двери, чтобы пользователи могли получать от программ то, что они хотят. Это модульность, ставшая быстрой, мощной и вездесущей.