WebAssembly – это не программное обеспечение: это компьютер

WebAssembly

Вычислительный потенциал WebAssembly привлекает значительное внимание, и может потребоваться некоторое время, возможно, пара лет, для полной реализации его истинных возможностей по мере решения этих проблем. Одна из этих проблем заключается в обеспечении того, чтобы модули WebAssembly могли поддерживать все языки программирования, хотя в настоящее время это преимущественно ограничено несколькими, такими как Rust, C ++, Python и JavaScript. Другие языки по-прежнему сталкиваются с препятствиями, но даже у Rust и C ++, а также Python есть свои проблемы, когда идея заключается в том, чтобы разработчики писали код и развертывали его один раз и везде на многочисленных устройствах и средах, разумеется, все совместимые.

WebAssembly
WebAssembly

Но для чего предназначена WebAssembly? Часто использовалась фраза “развернуть один раз, развернуть в любом месте”, хотя, возможно, правильнее было бы сказать, что вы можете написать свой код один раз и развернуть его на любом процессоре или устройстве одновременно с минимальной настройкой или вообще без нее. Думайте о нем, в некотором смысле, как о высокоэффективном компиляторе (хотя некоторые, вероятно, будут категорически не согласны).

Стандартное определение

Ссылаясь на стандартное определение, WebAssembly – это двоичный формат команд для виртуальной машины на основе стека, сказал Люк Вагнер, выдающийся инженер поставщика облачных платформ edge Fastly, во время своего выступления на WasmCon 2023. “Дизайн Wasm – это переносимая цель компиляции для языков программирования. Я думаю, что здесь уместно использовать фразу ‘цель компиляции”, что означает, что мы можем использовать различные исходные языки”, – сказал Вагнер. “В дополнение к возможности компилировать их во все различные собственные наборы команд, мы можем компилировать их в WebAssembly. Затем мы можем взять этот WASM и отправить его в браузер или какой-либо движок WASM, который внутренне скомпилирует его в фактический набор команд, на котором он выполняется. Что это дает нам, так это переносимость, детерминизм, если он нам нужен, целостность потока управления и изолированность подпроцессов ”.

Помимо его определения, необходимо взглянуть на то, что WebAssembly может делать в реальном мире. “Итак, что мы делаем со всеми этими крутыми возможностями? Что ж, сегодня в браузерах популярные варианты использования требуют большой базы кода, особенно C ++ ”, – сказал Вагнер. Примерами могут служить Unity, AutoCAD и Photoshop. Кроме того, по словам Вагнера, происходит разгрузка подзадач, требующих больших вычислительных ресурсов, с JavaScript на Wasm, с примерами, включающими кодеки, сжатие, логический вывод, шифрование и фильтры.

“За пределами браузера популярно встраивать Wasm в существующую систему, чтобы приблизить гостевой код к вашей системе. Примером этого является браузер, в котором много кода, которого нет на JavaScript ”, – сказал Вагнер. “Наконец, люди используют Wasm для изучения альтернативных моделей распределенных вычислений, таких как бессерверные, распределенные участники, запись и воспроизведение и пограничные вычисления, похожие на то, что мы делаем в Fastly”.

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

Как компьютер?

Во время недавнего разговора с Лиамом Крилли, старшим директором по управлению продуктами в NGINX, он сравнил WebAssembly с компьютером в концептуальном смысле. Хотя WebAssembly напрямую не запускается на физических устройствах, у него есть потенциал для работы в сети устройств, используемых для обмена данными и развертывания, с использованием модулей WebAssembly, как объяснил Крилли.

“WebAssembly позволяет нам переосмыслить необходимые нам абстракции”, – заявил Крилли. “Как общество, это позволяет нам сделать следующий шаг вперед, а не быть постоянно привязанными к исходным примитивам, которые мы использовали для описания хранилища и вычислений. Вот почему я упомянул его в контексте Kubernetes, поскольку он все еще несет часть этого багажа ”.

Действительно, WebAssembly можно рассматривать как компьютер нового типа. Он обладает набором команд, подобным процессору, из которого происходит часть “сборки”. Когда вы изучаете пример кода, он очень похож на этот, при условии, что он сделан доступным для чтения человеком. Этот простой компьютер способен выполнять все, что может традиционный компьютер, который, как мы знаем, довольно обширен. Важно то, что этот новый, простой набор команд становится целью компиляции для всех языков программирования. По сути, любой язык программирования высокого уровня может быть скомпилирован не только с набором команд процессора определенного оборудования, но и с набором команд WebAssembly.

Более того, WebAssembly можно рассматривать как мощное средство компиляции, как объяснил Крилли: “Что интересно в WebAssembly, так это то, что он предоставляет преимущества компилятора, позволяя вам использовать язык высокого уровня и генерировать хорошо оптимизированный код набора команд”. Однако, поскольку WebAssembly функционирует как абстрактный компьютер, требуется виртуальная машина или среда выполнения, чтобы использовать этот набор команд и выполнять его на оборудовании. Хотя поначалу это может показаться дополнительным уровнем абстракции, на самом деле это довольно оригинально. По словам Крилли, с помощью WebAssembly можно создать среду выполнения для любого оборудования, избавляя разработчиков и операторов от необходимости заниматься конкретными деталями оборудования.

Далее Крилли подчеркнул: “Если у меня есть модуль WebAssembly, который я скомпилировал в соответствии с этим набором команд, я пользуюсь преимуществами оптимизации компилятора, а также знаниями, полученными за более чем десятилетний опыт работы с JavaScript в браузере, который включает оптимизацию точно в срок (JIT) во время выполнения, когда я преобразую байт-код из этого набора команд в инструкции процессора. Этот дополнительный уровень оптимизации, сродни JIT-компиляторам и средам выполнения браузера, обеспечивает почти собственную вычислительную производительность. Следовательно, у этого уровня абстракции есть минимальный недостаток ”.

Компьютер внутри компьютера

Продолжая рассматривать WebAssembly как компьютер, Торстен Волк, аналитик из Enterprise Management Associates (EMA), сказал, что он описал бы WASM как “компьютер внутри компьютера”.

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

В конце концов, WebAssembly – это “третья волна того, как мы думаем об операционных системах и оборудовании”, – Мэтт Бутчер, соучредитель и генеральный директор Fermyon Technologies, сказал The New Stack. “Виртуальные машины вывели нас из представления об операционных системах как о взаимосвязях “один к одному” с аппаратным обеспечением. Мы можем запускать множество операционных систем на одном аппаратном обеспечении, в то время как контейнеры способствовали развитию этой истории, позволяя нам безопасно (и многопользовательским способом) запускать множество дискретных файловых систем, которые используют одно ядро ”, – сказал Бутчер. “Wasm – это третья волна: приложение не имеет прямой зависимости от операционной системы хоста. Оно просто объявляет, что ему нужно, и среда выполнения хоста может удовлетворить конкретно эти потребности. Наконец, разработчику не нужно ничего знать об операционной системе или архитектуре целевой среды ”.

Translate »
 
Чат Telergram

Привет, готов ответить на Ваши вопросы

Открыть чат
1
Отсканируйте код
Здравствуйте!
Возможно я могу Вам чем-то помочь?