Wasm up?
39 subscribers
2 photos
26 links
WebAssembly: новости, практика, разборы и многое другое.

Первое русскоязычное сообщество, посвященное WASM.
Download Telegram
#wasm_lab

🚀 11 июня был официально представлен WASI 0.3, который полностью изменил правила игры: наконец-то появился native async на уровне Component Model, заявленный как Language agnostic.

Давайте вместе заглянем «под капот», и проанализируем, за счет каких механизмов удалось добиться универсальности, а так же узнаем, приходится ли ради этого «раскрашивать» функции (спойлер - нет 🙂‍↔️)

Читать статью на Хабр: https://habr.com/ru/articles/1055048/

#wasm #webassembly #wasi

📌 @prowasm
👍3
#wasm_news

📰 Chicory больше нет (почти). Теперь это Endive - официальный проект Bytecode Alliance.

🔥 После недавнего анонса официально представлен Endive 1.0.

На мой взгляд, это одна из самых интересных новостей последних недель для Java-разработчиков, которые следят за WebAssembly.

Если вы раньше слышали про Chicory (чистая Java-реализация WebAssembly Runtime без нативных зависимостей), то теперь проект получил новое имя Endive и перешел под крыло Bytecode Alliance.

Почему это важно?

Во-первых, сама идея запуска WASM на JVM без JNI уже доказала свою жизнеспособность. За два года Chicory успел найти применение в самых разных проектах.

Во-вторых, Endive 1.0 приносит полноценную поддержку WasmGC на уровне интеграции с JVM. Если раньше объекты WASM были для Java практически "черным ящиком", то теперь структуры, массивы становятся обычными Java-объектами. Их собирает стандартный GC, не требуется отдельное хранилище ссылок или ручное управление жизненным циклом объектов. Для разработчика это означает гораздо более простую и привычную модель взаимодействия между Java и WASM.

Но самое любопытное это планы проекта.

Команда уже работает над интеграцией Cranelift (компилятор, который используется в Wasmtime). Если всё пойдет по плану, Endive сможет предложить почти нативную производительность, при этом сохранив главное преимущество в виде Java-like опыт разработки.

Кроме этого, разработчики уже начали экспериментировать с поддержкой Component Model. Если проект доведут до полноценной реализации, Java-разработчики (к коим относит себя автор канала) смогут загружать компоненты через типизированные интерфейсы, а не через JNI или другие костыли.

Посмотрим, насколько быстро Endive сможет догнать Wasmtime по производительности. Если интеграция с Cranelift окажется успешной, это может стать целевым рантаймом для JVM и стандартом в индустрии.

#wasm #webassembly #chicory #endive

@prowasm
🔥2
Рубрика #wasm_live

Здесь собираем интересные кейсы использования WebAssembly: от Big Tech до небольших, но очень изобретательных проектов.

Сегодня у нас на обзоре Pixtuoid - open-source TUI-дашборд на Rust, который визуализирует агентские сессии в виде анимированного пиксельного офиса. Он поддерживает множество популярных агентов (включая Claude Code и Codex CLI), превращая каждого из них в сотрудника за столом. Пока AI пишет код, на экране работает маленький офис: персонажи ходят между столами, отдыхают, а все происходящее отражает реальное состояние вашей сессии.

Недавно автор решил обновить демо-страницу проекта и попросил Claude Fable 5 сделать более красивый лендинг.

Вместо очередной записи работы приложения модель предложила другой подход: зачем вообще показывать запись, если можно встроить само приложение в сайт? В результате Rust-движок был скомпилирован в WASM, а лендинг превратился в полноценное приложение. Теперь посетитель видит не заранее подготовленную демонстрацию, а настоящий «живой» офис, который исполняется прямо в браузере. Более того, он синхронизирован с локальным временем пользователя: если открыть сайт в два часа ночи, в офисе тоже будет ночная смена.

Если приложение уже написано на Rust, его можно буквально сделать частью веб-страницы. В итоге пользователь взаимодействует не с имитацией или видеозаписью, а с настоящим приложением, которое работает локально в браузере. Очень изящное применение WebAssembly. 😅

Ссылка на обсуждение Reddit.

#wasm #webassembly #rust #pixtuoid

@prowasm
🔥2
#wasm_lab

Сегодня у нас на обзоре статья, посвященная WebAssembly backend в GCC.

Напомню, что backend - это часть компилятора, которая умеет превращать внутреннее представление программы в код для конкретной целевой архитектуры. Обычно backend генерирует код для процессоров вроде x86, ARM или RISC-V. Но в случае с WASM целевой "архитектурой" становится виртуальная ISA (Instruction Set Architecture) WebAssembly, а не физический процессор.

LLVM/Clang имеет зрелый backend для WebAssembly и может генерировать .wasm напрямую. Почему же GCC уже давно отстает?

Архитектура GCC опирается на привычную модель процессоров с переходами по меткам и конечным набором регистров. А WebAssembly устроен совсем иначе. В нем структурированный control flow, виртуальные регистры и жестко заданные сигнатуры вызовов.

Наличие в WASM виртуальных регистров (которых формально бесконечно много) ломает привычный allocator GCC, который десятилетиями рассчитывал на фиксированный набор регистров. В результате часть классических оптимизаций сегодня просто отключена.

Из-за этого разработчикам backend приходится идти на весьма необычные компромиссы.

Статья описывает какие фундаментальные вещи GCC пришлось обходить, чтобы заставить его генерировать WebAssembly.

Рекомендую почитать, если интересует внутренняя кухня компиляторов и то, почему Wasm заставляет переписывать привычные алгоритмы GCC. Статья читается на одном дыхании 🤨

#wasm #webassembly #gcc

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1
#wasm_lab

Сегодня у нас на обзоре статья с довольно провокационным названием: "Wasm is not quite a stack machine". И после прочтения начинаешь смотреть на WebAssembly немного иначе.

Все привыкли, что WASM - это "for a stack-based virtual machine". Так написано прямо на главной странице webassembly.org. Но автор предлагает обратить внимание на одну деталь.

У классических стековых VM (например, JVM) есть инструкции вроде dup, swap, over, которые позволяют свободно переиспользовать значения на стеке. В WASM этого практически нет. Есть только drop, а как только нужно повторно использовать вычисленное значение приходится сохранять его в local.

Получается, что выражения в WASM действительно вычисляются через стек. Но стоит выйти за рамки простой арифметики (да, мы любим такое на всевозможных демо 😎), модель быстро начинает напоминать скорее регистровую машину, где locals играют роль регистров, а стек оказывается лишь способом компактно записать выражение.

На мой взгляд, понимание таких деталей не менее полезно, чем знание WASI или Component Model.

Рекомендую к прочтению 😌

#wasm #webassembly

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#wasm_news

Сегодня на обзоре два свежих релиза продуктов, оказывающих заметное влияние на экосистему WASM.

☁️ Вышел wasmCloud 2.5.0:

- WASI 0.3 теперь включен по умолчанию благодаря переходу на Wasmtime 46. Это значит, что экосистема начинает жить уже в реалиях нового поколения WASI.

- Появилась поддержка multiplexed host plugins на базе implements из Component Model. Проще говоря, один компонент теперь может импортировать один и тот же интерфейс несколько раз и прозрачно работать сразу с несколькими реализациями.

- GC, async Component Model, threads, exception handling и другие proposal можно включать отдельно для каждого host или группы hosts, а не собирать отдельные runtime под разные сценарии.

- async WIT-интерфейсы для keyvalue и blobstore, улучшения Kubernetes-оператора, усиление безопасности Helm-чартов и множество небольших улучшений CLI wash.

📦 Вышел jco 1.25.2. Проект получил js-component-bindgen 2.0.11, где исправлены два бага в генерации биндингов:

- Корректный lowering результатов async host imports для stream/future

- Исправлена генерация кода для кодирования строк при flat string lowering

---

Всем продуктивной рабочей недели! 😎

#wasm #webassembly #wasmcloud #wit #wasi #jco

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Forwarded from Frontend База
🎮 Кармагеддон прямо в браузере

Думал поиграть в старую любимую игру, но возиться с эмуляторами не хочется?

Разбирается портирование Carmageddon на WebAssembly: от эмуляции графики и звука до адаптации управления. Автор показывает, как работать с DOS-защитой, декодировать файлы формата ANI и организовать игровой цикл в браузере.


Интересный пример того, как классику можно оживить с помощью современных веб-технологий 👾

🌐 Перейти на сайт

💻 Frontend База | #WebAssembly #Игры #Разбор
🔥1
Рубрика #wasm_live

Здесь собираем интересные кейсы использования WebAssembly: от Big Tech до небольших, но очень изобретательных проектов.

Сегодня у нас на обзоре SpaceWasm - реализация WASM 1.0 от NASA для запуска WASM-модулей прямо на борту космических аппаратов 🚀 😱

Да-да, все верно: WebAssembly в космосе 🔥 Причем NASA рассматривает WASM не как экспериментальную технологию, а как основу для безопасного выполнения бортовой логики.

Зачем это понадобилось? Исторически сценарии управления космическими аппаратами сильно отличались от миссии к миссии. Каждая команда писала собственные механизмы для выполнения последовательностей команд, что усложняло сопровождение и повторное использование. SpaceWasm предлагает стандартизировать этот уровень через WebAssembly.

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

Однако, в данном случае за надежность приходится платить производительностью. По первым бенчмаркам, опубликованным на Reddit, SpaceWasm примерно в 6 раз медленнее самых быстрых интерпретаторов. Но, как вы понимаете, приоритеты совершенно другие: предсказуемость, детерминированность и безопасность важнее максимальной скорости.

WASM улетает в космос. Поздравляю, друзья! 💃

#wasm #webassembly #nasa

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
#wasm_lab

Стек против регистров: почему Polkadot ушел с WASM?


Сегодня у нас на обзоре авторская статья ⌨️

Философия WASM про "собрал один бинарь и запускаешь где угодно в максимальной изоляции". Но, как и в любой технологии, за этим скрываются интересные компромиссы.

В статье я попробовал разобраться:

🔹 Чем стековая модель VM отличается от регистровой и где эта разница реально что-то меняет

🔹 Почему WASM не совсем честная стек-машина

🔹 Что вынужден делать single-pass компилятор WASM

🔹 Как компиляция превращается в вектор атаки

🔹 За что именно WASM платит вне браузера

И главное, где же все таки реалистичная ниша WASM вне вкладки браузера. У меня есть версия, но интересно услышать и вашу 😉

Если вам интересны такие темы — добро пожаловать к прочтению 👇

🔗 https://habr.com/ru/articles/1058984/

#wasm #webassembly

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#wasm_news

Сегодня на обзоре два свежих релиза продуктов, оказывающих заметное влияние на экосистему WASM.


⚙️ Emscripten 6.0 (на самом деле серия 6.0.x) - один из самых значимых релизов компилятора для WASM за последнее время. Помимо большого количества улучшений, он закладывает основу для следующего поколения WASM.

Главные изменения:

- wasm64 становится ближе к реальности. Вместо специфичного -sMEMORY64 теперь используется стандартный флаг -m64, как и в обычном LLVM/Clang. Это важный шаг к полноценной поддержке Memory64 Proposal.

- Динамическая линковка теперь "настоящая". Emscripten больше не использует FAKE_DYLIBS по умолчанию. -shared начинает создавать реальные side modules.

- Появилась экспериментальная интеграция с wasm-bindgen. Теперь проекты на Rust и JavaScript становятся значительно ближе друг к другу, а смешанные Rust/C++ проекты проще в сопровождении.

- Продолжается адаптация под современные возможности WASM. В последних патч-релизах появились FMA intrinsics с поддержкой Relaxed SIMD, автоматическая инициализация ES-модулей через top-level await.

---

🚀 Wasmer 7.2.0 - релиз получился не самым громким, но с несколькими важными изменениями для разработчиков рантаймов и серверных WASM-приложений.

Главные изменения:

- Появилась экспериментальная возможность прерывать выполнение WASM. Теперь рантайм может безопасно остановить длительно выполняющийся код. Это важная возможность для серверных платформ и sandbox.

- Cranelift получил поддержку Exception Handling на macOS. Поддержка теперь доступна и на Mach-O, что делает поведение рантайма более единообразным между платформами.

- Компиляция стала лучше масштабироваться по ядрам CPU. Переработана параллельная компиляция для LLVM и Cranelift, поэтому большие модули будут собираться заметно эффективнее на многоядерных машинах.

- Возвращён backend V8. После длительного перерыва движок снова поддерживается и теперь покрывается CI, что расширяет варианты исполнения WebAssembly внутри Wasmer.

- Упрощается экосистема движков. Из Wasmer удалены backend'ы WAMR и Wasmi, а также прекращена поддержка x86_64 macOS, т.к. проект окончательно ориентируется на Apple Silicon.

- Улучшения WASIX и новые команды CLI. Продолжается развитие сетевого стека WASIX, а в CLI появились команды wasmer package search и wasmer package show, упрощающие работу с пакетами.

---

Подписывайтесь, если хотите следить за новостями из волшебного мира WebAssembly 🕺

#wasm #webassembly #wasmer #wasix #cranelift #llvm #emscripten #llvm #wasm64 #simd

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
#wasm_live

📰 RightNow AI предлагает превратить LLM-агентов в WASM-бинарники

Появился очень необычный проект Auto от RightNow AI. Идея звучит как "компилятор для агентского поведения". Вместо того чтобы каждый раз отправлять одинаковые запросы в LLM, Auto записывает поведение агента, находит повторяющиеся детерминированные участки и компилирует их в верифицированные WASM-бинарники. Всё, что не удалось свести к детерминированной логике, продолжает выполняться через обычную LLM. Почему это интересно?

Во-первых, WASM здесь используется не просто как переносимый формат, а как безопасный sandbox для исполнения поведения агента.

Во-вторых, авторы заявляют довольно впечатляющие результаты: после "накопления опыта" стоимость выполнения типовых задач снижается примерно с 59 до 2 микродолларов за запрос (на задачу) 🤯

Проще говоря:

- повторяющиеся фрагменты поведения больше не исполняются через frontier-модель. Вместо очередного промпта выполняется WASM-бинарник. Экономим токены

- снижается стоимость инференса

- выполнение WASM занимает микросекунды вместо сотен миллисекунд ожидания ответа модели

😮 По сути, Auto "кэширует" опыт LLM в виде WASM-бинарников. Повторные задачи больше не требуют генерации токенов, они выполняются локально, а к модели система обращается только при появлении новых сценариев

Если подобных проектов станет больше, WASM вполне может занять важное место в инфраструктуре AI-систем, а не только в браузере и серверных рантаймах.

💡 В первую очередь прошу обратить внимание тех, кто строит агентские системы или LLM-пайплайны, а также ML-инженерам.

#wasm #webassembly #ai #agents

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
#wasm_news

Пару дней назад разработчик Hexana представил небольшое, но очень полезное обновление для тех, кто работает с Component Model.

Теперь при открытии бинарника можно сразу просматривать встроенные Core модули в виде WAT, не извлекая их в отдельные файлы. Если внутри компонента несколько модулей, между ними можно переключаться через встроенный селектор.

На практике это сильно упрощает анализ компонентов. Почему?

Component Model - это не просто обычный .wasm. Это контейнер, внутри которого находятся полноценные Core модули со своей логикой. Раньше Hexana показывал структуру самого компонента, а для анализа содержимого встроенных модулей их приходилось сначала извлекать. Теперь этот шаг больше не нужен.

Подобные улучшения делают работу с Component Model гораздо приятнее 😉

Продуктивной рабочей недели!

#wasm #webassembly #hexana

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Рубрика #wasm_live

Здесь собираем интересные кейсы использования WebAssembly: от Big Tech до небольших, но очень изобретательных проектов.

🎮 The Simpsons: Hit & Run теперь работает прямо в браузере.

Разработчик портировал оригинальную PC-версию игры на WASM + WebGL. Причем это не стриминг и не эмуляция, игра по настоящему запускается в браузере как нативное приложение.

Интересные инженерные решения, которые пришлось реализовать:

🔊 Игра была написана в расчете на синхронный аудио API, тогда как Web Audio API работает совсем по-другому. Автору пришлось реализовать собственные lock-free структуры в общей памяти и построить механизм обмена данными между основным потоком и AudioWorklet без блокировок.

📦 Вместо скачивания архивов целиком (около 500 МБ) игровые данные подгружаются по мере необходимости через Cloudflare R2 и Worker, который отдает файлы чанками по 1 МБ. В результате игра стартует быстрее, а кэш браузера используется значительно эффективнее.

Кто бы мог подумать, что появится технология, которая сегодня позволит запускать полноценные AAA-игры начала 2000-х в браузере? 🤣
Рекомендую попробовать - игра действительно переносит тебя в 2000-е.

#wasm #webassembly #thesimpsons

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
#wasm_news

🥳 Вышел Wasmtime 47.0

Что изменилось:

- WasmGC теперь включен по умолчанию. Это важный шаг для языков с автоматической сборкой мусора (Java, Kotlin, C#, Dart и др.) и всей экосистемы Component Model. Теперь GC не нужно отдельно включать в конфигурации движка.

- Exception Handling Proposal также включен по умолчанию. Это упрощает перенос языков с привычной моделью try/catch в WASM.

- Продолжается развитие Component Model. Появились новые API, улучшена работа с ArrayRef, оптимизированы адаптеры между компонентами и добавлены механизмы для более эффективного управления конкурентными вызовами.

- Cranelift получил очередную порцию оптимизаций. Среди них поддержка Compact Unwind на macOS, новые возможности для RISC-V и дополнительные оптимизации генерации машинного кода.

- Из Wasmtime окончательно убрали wasi-common и поддержку wasi-threads. Проект продолжает переход на современный стек WASI 0.3, поэтому старые механизмы постепенно уходят из экосистемы.

Изменения довольно фундаментальные. Благодаря включению WasmGC и Exception Handling по умолчанию WASM становится гораздо более привлекательной целевой платформой для managed-языков. Релиз настолько важен, что ему посвящена статья в блоге Bytecode Alliance.

#wasm #webassembly #wasmtime

@prowasm
🔥3
#wasm_news

Неожиданная новость - WAMR покидает Bytecode Alliance

WebAssembly Micro Runtime (WAMR) больше не будет развиваться как проект Bytecode Alliance. Команды объявили, что дальнейшая разработка продолжится уже как независимый open-source проект.

Это не закрытие проекта и не прекращение разработки. WAMR продолжит развиваться, просто с собственной моделью управления.

В Bytecode Alliance объясняют решение тем, что со временем у организации и WAMR сформировались разные приоритеты. Разделение должно позволить каждой стороне быстрее двигаться в своем направлении.

При этом сам Bytecode Alliance остается сосредоточен на развитии Wasmtime, WASI, Component Model и других фундаментальных технологий экосистемы.

WAMR уже давно занял свою нишу как один из самых популярных рантаймов для Embedded, IoT и Edge-устройств. Теперь будет интересно посмотреть, изменится ли темп развития проекта и появятся ли новые стратегические партнерства.

#wasm #webassembly #wasmtime #wamr

@prowasm
🔥3
#wasm_lab

Сегодня у нас на обзоре статья "Dynamic linking in WebAssembly with WASIX" от команды Wasmer.

Главная идея очень простая - Python в WASIX наконец-то научился работать не только с "чистыми" Python-пакетами, но и с библиотеками, которые содержат нативный код. Это стало возможным благодаря поддержке Dynamic Linking.

Но реализовать это в WASM оказалось совсем не так просто.

В статье авторы показывают, какие проблемы пришлось решить:

🔹 Как заставить несколько WASM-модулей безопасно разделять одну область памяти.

🔹 Что такое PIC (Position Independent Code) - код, который можно загрузить в любое место памяти без перекомпиляции, и почему без него Dynamic Linking невозможен.

🔹 Как работают dlopen() (загрузка внешней библиотеки во время работы программы) и dlsym() (поиск нужной функции внутри этой библиотеки), если под капотом у вас WASM а не обычная ОС.

🔹 Почему ради всего этого команде даже пришлось дорабатывать LLVM и собственный рантайм.

Отличная статья, которая показывает, сколько фундаментальных ограничений WASM приходится обходить, чтобы привычные механизмы из мира Linux начали работать и здесь.

#wasm #webassembly #python #wasix

@prowasm
👍4
#wasm_lab

Недавно публиковал статью WebAssembly (WASM) — не серебряная пуля, и в комментариях мне ответил один из пользователей (а по совместительству автор на Хабр): "Мы проверяли на собственном большом проекте где важна производительность и получили аналогичные результаты. Кому интересно можно почитать наше расследование".

Конечно же нам интересно 🥰

Статья называется "Блеск и нищета WebAssembly" и опубликована она в сентябре 2024 года. Она посвящена R&D процесса в экспериментах с WASM, а также, по моему мнению, является хорошей входной точкой для изучения новой технологии (с максимальной актуальностью на момент написания).

Автор прошел серьезный путь:

- выбрал WAMR как runtime
- портировал C++-библиотеки в WASM
- столкнулся с ограничениями wasm32, ABI, отладкой и SIMD
- провел серьезную работу по профилированию и оптимизации

Главный вывод статьи тогда: технология очень перспективная, но еще сырая для крупных production-проектов.

Очень любопытно смотреть уже из 2026 года. Многие проблемы, о которых писал автор, действительно начали решаться. Появился WASM 3.0, активно развивается Component Model, появился WASI 0.3 с нативной async-моделью. Исключения, GC, SIMD и многие proposals уже перестали быть экзотикой и получили поддержку в современных рантаймах.

Но некоторые выводы статьи по-прежнему актуальны.

Если вы переносите большой C/C++-проект в WASM, архитектурные компромиссы никуда не делись. Стоимость копирования данных между host и sandbox, особенности ABI, выбор runtime и вопросы производительности по-прежнему оказывают куда большее влияние, чем сама спецификация.

Отдельно интересно, что автор называл wasm64 слишком экспериментальным. В 2026 ситуация заметно лучше: memory64 уже вошла в экосистему, однако полноценная поддержка во всех движках и браузерах все еще на подходе.

Статья отлично показывает, как выглядело состояние WASM в 2024 году. И именно поэтому ее полезно читать сегодня. Можно оценить, какие прогнозы оказались верными, какие проблемы уже решены, а какие до сих пор сопровождают любой серьезный проект.

Приятного чтения! 😭


#wasm #webassembly

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
4
#wasm_news

📰 Несколько дней назад был представлен wazy - новый рантайм для Go, который выглядит очень амбициозно.

Главная идея проекта - чистый Go Runtime без CGO и производительность на уровне Wasmtime. Звучит смело, однако автор подкрепляет заявления подробными бенчмарками и открыто сравнивает wazy с wazero (в сравнениях выигрывает первый, ествественно).

И ставка сделана не только на скорость 😊

wazy уже поддерживает Component Model и даже WASI 0.3 Async ABI, тогда как большинство Go-рантаймов пока ограничиваются классическими WASM-модулями. Это означает, что гоферы уже сегодня могут экспериментировать с современным стеком WASM ❤️‍🔥

Конечно, к заявлениям о производительности всегда стоит относиться осторожно, независимых сравнений пока нет. Но сам факт появления еще одного рантайма с фокусом на Component Model - хорошая новость для всей экосистемы (наконец то начинаем догонять Rust Toolchain по возможностям)

#wasm #webassembly #wazero #wazy #golang

@prowasm
4
Рубрика #wasm_live

Здесь собираем интересные кейсы использования WebAssembly: от Big Tech до небольших, но очень изобретательных проектов.

🤖 LLM прямо в браузере. Без GPU. Без WebGPU. Без сервера. Только WebAssembly.

Разработчик запустил модель LiquidAI LFM 2.5-350M полностью в браузере, используя чистый WASM. Никакого бэкенда и сетевых запросов во время инференса, после загрузки модели все работает локально на CPU.

Что особенно интересно с технической точки зрения?

Во-первых, автор не использует готовые библиотеки линейной алгебры. Практически вся математика написана вручную: SIMD-ядра для GEMM/GEMV, GQA Attention, RoPE и других операций. Это очень хороший пример использования WASM SIMD.

Во-вторых, модель квантована до 4 бит (Q4_0), благодаря чему удалось уместить веса примерно в 285 МБ. После первой загрузки инференс полностью выполняется локально, что одновременно запускает приватность в космос и устраняет зависимость от сервера.

Конечно, это не конкурент большим облачным моделям. Но тем не менее, шикарная демонстрация возможностей WASM. 👍

Исходный код открыт на GitHub.

Проект в первую очередь интересен тем, кто занимается локальным AI, Edge AI и браузерными ML.

#wasm #webassembly

@prowasm
Please open Telegram to view this post
VIEW IN TELEGRAM
4
#wasm_lab

Why Do We Need the Relooper Algorithm, Again?

На первый взгляд кажется, что отсутствие goto в WASM это просто эталон хорошего стиля программирования. Вместо него есть block, loop, if, br и другие структурированные конструкции.

Но есть проблема, и она совсем не связана со стилем.

Практически любой современный компилятор (LLVM, GCC и другие) внутри работает не со структурированными if и while, а с Control Flow Graph (CFG) - графом потока управления. Именно в таком виде удобнее всего оптимизировать код.

Но когда компилятор собирает WASM, ему приходится превратить произвольный CFG в ограниченный набор конструкций WASM. Если граф оказывается слишком сложным, в дело вступает Relooper.

По сути, Relooper пытается "натянуть" сложный граф на loop + block + if. Иногда это получается красиво. Иногда приходится генерировать конструкции, напоминающие цикл со switch, которые затем уже движок снова пытается восстановить обратно в CFG.

Получается довольно странная цепочка:

CFG - WASM - снова CFG - машинный код.

Автор статьи называет это "lossy conversion". Мы теряем информацию о структуре управления, а затем тратим ресурсы, чтобы её восстановить.

Именно поэтому Relooper долгое время считался одной из самых болезненных частей компиляции в WASM. Не из-за производительности самого алгоритма, а потому что он компенсирует ограничения формата.

💬 Интересно, что предложения, которые автор называл необходимыми (multiple returns, block arguments и другие), позже действительно появились в экосистеме. Proposal Multi-Value принят и поддерживается всеми основными движками.

Однако идея произвольного CFG в самом формате так и не была принята, поэтому алгоритм Relooper остается актуальным и сегодня.

#wasm #webassembly

@prowasm
🔥1
#wasm_news

📰 Группой инженеров в открытом письме представлен WASP - новый фреймворк для stateful serverless-приложений.

На мой взгляд, работа команды бьет точно в больную точку современного WASM-serverless.

В чём проблема? WASM уверенно чувствует себя как легковесная альтернатива контейнерам для Function-as-a-Service. Но существующие платформы намертво привязаны к конкретному движку и заточены в основном под stateless-нагрузки (например, wasmCloud). А edge - это зоопарк железа и сценариев, где stateful-приложения тоже нужны.

Что предлагает WASP? Отказ от монолита в пользу строго независимых, подключаемых компонентов. Можно менять рантайм и datastore под доступные ресурсы и требования приложения без изменения кода самого приложения. Сверху навесили конфигурируемые политики жизненного цикла и кэширования.

И самое интересное - цифры. WASP вносит пренебрежимо малый оверхед, а за счёт замены рантаймов выдаtт радикально разные профили по памяти и latency. То есть реально подстраивается под разные ограничения edge-cloud платформ.

Посмотрим, дойдёт ли WASP до продакшена. Но сама идея pluggable-архитектуры без vendor lock выглядит невероятно.

Всю спецификацию можно изучить здесь.

#wasm #webassembly #wasp

@prowasm
🔥2👍1