Состоялся второй значительный выпуск проекта Wasmer, развивающего runtime для выполнения модулей WebAssembly, который можно использовать для создания универсальных приложений, способных выполняться в разных операционных системах, а также для изолированного выполнения кода, не заслуживающего доверия. Код проекта написан на языке Rust и распространяется под лицензией MIT.
Переносимость обеспечивается благодаря компиляции кода приложения в низкоуровневый промежуточный код WebAssembly, который может запускаться в любых ОС или встраиваться в программы на других языках программирования. Программы представляют собой легковесные контейнеры, в которых выполняется псевдокод WebAssembly. Данные контейнеры не привязаны к операционной системе и могут включать код, изначально написанный на любом языке программировании. Для компиляции в WebAssembly может использоваться инструментарий Emscripten. Для трансляции WebAssembly в машинный код текущей платформы поддерживается подключение разных бэкендов компиляции (Singlepass, Cranelift, LLVM) и движков (задействование JIT или генерация машинного кода).
Управление доступом и взаимодействие с системой обеспечивается при помощи API WASI (WebAssembly System Interface), предоставляющем программные интерфейсы для работы с файлами, сокетами и другими функциями, предоставляемыми операционной системой. Приложения изолированы от основной системы в sandbox-окружении и имеют доступ только к заявленной функциональности (механизм безопасности на основе управления возможностями — для действий с каждым из ресурсов (файлы, каталоги, сокеты, системные вызовы и т.п.) приложению должны быть даны соответствующие полномочия).
WebAssembly konteineri käivitamiseks piisab, kui installida süsteemi Wasmer runtime, mis tarnitakse ilma väliste sõltuvusteta („curl https://get.wasmer.io -sSfL | sh”) ja käivitada vajalik fail („wasmer test.wasm”). Programmid levivad tavapäraste WebAssembly moodulitena, mille haldamiseks saab kasutada WAPM paketihaldurit. Wasmer on samuti saadaval raamatukoguna, mida saab kasutada WebAssembly koodi integreerimiseks Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir ja Java keeltesse.
Platvorm võimaldab saavutada rakenduste töötluse jõudlust, mis on lähedane natiivsete kogude täitmisele. Native Object Engine'i abil WebAssembly-mooduli jaoks saab genereerida masinkoodi („wasmer compile —native” eelkompileeritud objektifailide .so, .dylib ja .dll genereerimiseks), mille käivitamiseks on vajalik minimaalne runtime, kuid säilitades kõik sandbox-isolatsiooni võimalused. On võimalik tarnida eelkompileeritud programme koos sisseehitatud Wasmeriga. Laienduste ja täiustuste loomiseks pakutakse Rust API ja Wasm-C-API.
Значительная смена номера версии Wasmer связана с внесением нарушающих совместимость изменений во внутренний API, которые, по заверению разработчиков, никак не отразятся на 99% пользователей платформы. Из нарушающих совместимость изменений также отмечается изменение формата сериализированных модулей Wasm (модули, сериализированные в Wasmer 1.0, не смогут использоваться в Wasmer 2.0). Другие изменения:
- Поддержка инструкций SIMD (Single Instruction, Multiple Data), позволяющих организовать распараллеливание операций над данными. Из областей, в которых применение SIMD может заметно поднять производительность, отмечается машинное обучение, кодирование и декодирование видео, обработки изображений, симуляция физических процессов и манипуляции с графикой.
- Поддержка ссылочных типов, позволяющих модулям Wasm обращаться к информации в других модулях или в базовом окружении.
- Проведена значительная оптимизация производительности. Скорость работы LLVM runtime с числами с плавающей запятой увеличена примерно на 50%. Значительно ускорен вызов функций за счёт сокращения ситуаций, требующих обращения к ядру. На 40% увеличена производительность генератора кода Cranelift. Сокращено время десериализации данных.


- Для более точного отражения сути изменены названия движков: JIT → Universal, Native → Dylib (Dynamic Library), Object File → StaticLib (Static Library).
Allikas: opennet.ru


