Обновить
8K+

WebAssembly *

Низкоуровневый байт-код для исполнения в браузере

6,57
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности
Формат публикации

Flutter 3.50 — Что нового во Flutter?

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.1K

Вышел Flutter 3.50, последний стабильный релиз 2026 года по публичному графику релизов. Ветку отрезали 6 октября, в стабильный канал она попала 11 ноября. Вместе с ним вышел Dart 3.14, ему посвящена статья.

В релиз вошло больше 1200 коммитов от 188 контрибьюторов, из них 69 прислали свой первый PR.

Это сильный релиз, особенно для Веба!

Читать далее

Dart 3.14 — что нового в Dart?

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели9.8K

Вместе с Flutter 3.50 вышел Dart 3.14. После насыщенных 3.12 и 3.13, где появились приватные именованные параметры и primary constructors, этот релиз посвящён не языку, а инструментам и платформам. Главная новинка — команда dart migrate, которая сама поднимает версию SDK в пакетах. Кроме того, сильно расширен dart:js_interop, ускорен Wasm, а dart:mirrors объявлен устаревшим.

Читать далее

Расширение врёт: как я учил Android-приложение открывать двести типов файлов по первым байтам

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.8K

У каждого файла два имени. Первое написано после точки, и верить ему нельзя: его придумал человек, почтовый клиент или сайт, который «на всякий случай» переименовал вложение. Второе лежит в первых байтах. Вот оно почти никогда не врёт.

Я делаю XanderFiles — просмотрщик для Android, который открывает двести с лишним расширений: от PDF и Excel до winmail.dat, подписанных .p7m, RAR с паролем, книг FB2, RAW с фотоаппаратов, билетов Wallet, снимков КТ с диска из клиники и рисунков CorelDRAW. Это статья не о том, как меня достала надпись «Не удаётся открыть файл». Она о том, как всё устроено внутри и на какие грабли я наступил. Будут WebAssembly, матрёшка из Outlook, правка чужого минифицированного кода на лету и картинки, которые никто не рисует.

Читать далее

Как мы спроектировали расширения для клиента Kubernetes: песочница, WebAssembly и подписанный каталог

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели7.5K

Sextant — десктопный клиент Kubernetes на Rust и Tauri 2, замена Lens без аккаунта и телеметрии, со встроенным MCP-сервером для AI-агентов. С версии 0.28 у него есть каталог расширений, и первым в нём стало расширение для Rook Ceph.

Расширение — это чужой код внутри программы, у которой есть kubeconfig и токены от всех ваших кластеров. В статье — шесть архитектурных решений, которые делают такой код безопасным: изоляция интерфейса, проверка прав в Rust, вклады как данные, бэкенд на WebAssembly, декларации вместо фонового кода и каталог с подписями. Для каждого — какие варианты мы рассматривали, почему выбрали именно так и чем за это платим. В конце — как платформа выдержала первое настоящее расширение, для Rook Ceph.

Sextant бесплатный и таким останется. Весь его код сгенерирован Claude Code: человек ставит задачи, принимает архитектурные решения и делает ревью, а каждое изменение проходит больше 6500 тестов на Linux, macOS и Windows.

Читать далее

После комментариев на Хабре я ограничил чтение SQLite и перевёл Docker-модуль в WASI

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели4.4K

После прошлой статьи о Pulse читатели Хабра обратили внимание на вещи, которые я не учёл: долгий запрос истории может мешать очистке SQLite WAL, успешное выполнение команды ещё не означает, что контейнер поднялся, а разрешения модуля сами по себе не изолируют его от файлов сервера.

Я пошёл проверять эти замечания и разбирать реализацию. В статье — что получилось: тест чтения истории одновременно с записью отчётов, ограничение времени запросов и наблюдение за WAL, проверка состояния Docker-контейнера после команды и перевод модуля в WASI с доступом к Docker через ограниченный API-посредник.

Покажу, что теперь проверяется, какие ограничения появились и почему даже после этих изменений нельзя обещать выполнение команд «ровно один раз» или считать запущенный контейнер готовым к работе.

Читать далее

Постобработка IFC без Revit, часть 2: площади ТЭП, дубли и правки, которые можно переслать

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5K

Хабр, привет! Это Кирилл, с коллегой Анастасией @nobimnolife делаем IDS Core. Сейчас усиленно взялись за постобработку и немного расскажем о новых инструментах.

В прошлой статье мы рассказывали, как научились править IFC прямо в браузере: заполнять параметры, менять класс и этаж, удалять лишнее — и при этом не ломать файл. После публикации просмотрщиком начали пользоваться не только мы, и вопросы пошли другие. Уже не «как поменять тип данных», а «почему у нас не сходится общая площадь», «что делать с дублями из отчёта» и «как передать правки коллеге, чтобы он не делал всё заново».

Ниже — что мы на эти вопросы сделали и что выяснили по дороге. Почти в каждой истории оказалось, что очевидное решение не работает.

Читать далее

Ускоряем self-hosted Convex в два раза: AOT-компиляция TypeScript-функций в Wasm

Уровень сложностиСложный
Время на прочтение15 мин
Охват и читатели6.3K

Convex – это новый, но набирающий популярность фреймворк для реактивных веб-приложений, который позволяет писать транзакционные квери (queries) и мутации (mutations) на TypeScript с гарантиями консистентности.

Вся статья ниже относится к self-hosted версии Convex: convex-backend, а точнее, к моей пропатченной версии оного, так как “официальная” версия не пригодна к работе в продакшене и вряд ли тестировалась на сколь-нибудь нагруженном кейсе. Моя версия работает на виртуальном сервере с 32 ядрами и 64Гб памяти и обрабатывает до 15 тысяч Convex-кверей и мутаций в минуту.

Я навайбкодил convex-wasm-compiler, который компилирует Convex-квери и мутации в WebAssembly, и соответствующий патч для convex-backend, позволяющий выполнять скомпилированные в Wasm Convex-функции на файберах Wasmtime прямо в Tokio рантайме convex-backend.

TLDR: квери и мутации в среднем работают в 2 раза быстрее, хвосты задержек сократились втрое. Объём памяти, который сервер удерживает под готовые к выполнению окружения (V8-контексты или Wasm-окружения), уменьшился на 80%.

Читать далее

vue‑why‑render 0.8: граф реактивности, WASM‑ядро и VS Code расширение

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели9.6K

Месяц назад я написал статью о том, как сделал отладчик рендеров для Vue — инструмент, который называет точную причину каждой перерисовки. Рассказывал про renderTriggered, про ловушки с process.env.NODE_ENV, кириллицей в байтовых смещениях и вычислением чужих computed.

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

Читать далее

Постобработка IFC в браузере с помощью IDS Core — или как мы перестали бояться валидатора

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.9K

Меня зовут Кирилл, я работаю BIM-менеджером, вместе со своей коллегой Анастасией @nobimnolife разрабатываем IDS Core. В этой статье – как мы дошли от просмотрщика IFC браузере до постобработчика.

Читать далее

WASM vs JavaScript 2026 — проверка на Flutter Web

Уровень сложностиСредний
Время на прочтение76 мин
Охват и читатели14K

Когда мы апгрейдим процессор или видеокарту и начинаем играть в привычную нам игрушку с новым железом, то увеличение производительности на некоторое количество процентов становится сразу же заметным. Например, увеличение производительности заметно уже с 5 процентов, если дело касается FPS в какой-то игре. 10 процентов — более заметно, 15 процентов — ещё заметнее. А увеличение производительности на 50 процентов не заметить практически невозможно. Примерно так же я смотрел на отрисовку интерфейса при компиляции Flutter-приложений в WebAssembly-код вместо JavaScript. Примерно по таким же ощущениям для большого проекта я получил ускорение, ну, примерно от 5 до 10 процентов. Хотя должен был получить 50. Поэтому я решил очень подробно исследовать данную ситуацию.

Я решил досконально проверить, насколько можно улучшить веб приложения переходом на компиляцию в WASM вместо JS, в отличии от официальных цифр у меня получились другие цифры и результат работы приложения их подтверждает.

После перехода на Wasm приложение может стать лишь немного быстрее. Я собрал отдельный Flutter-стенд, чтобы разобраться, откуда берётся этот результат: какие операции ускоряются, где выигрывает JavaScript и как вычисления связаны с плавностью интерфейса.

Читать далее

WASM кроссбраузерность во Flutter Web на 2026

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели12K

В мае 2024 года команда Flutter выпустила версию Flutter 22, в которой они стабилизировали поддержку WebAssembly, объединив компилятор Dart с системой сборки мусора WebAssembly — WASM GC.

Примерно с этого же времени я много экспериментировал со сборками WASM и, в принципе, для широкого круга приложений они работают не хуже JavaScript, кроме двух интересных проблем. Это несовместимость данной технологии с браузерами Firefox и Safari.

Я решил покопаться в этом вопросе: то есть, при чём здесь вообще Flutter? И действительно ли команда Flutter не занимается этой ситуацией и почему не занимается.

Читать далее

Halo: Combat Evolved с кампанией и мультиплеером запустили в браузере

Время на прочтение2 мин
Охват и читатели9.8K

Разработчики выпустили браузерный порт первой Halo. В сюжетную кампанию и мультиплеерную версию теперь можно играть без установки игры. Перед запуском сайт просит подтвердить, что у пользователя есть копия оригинальной игры, но не проверяет это.

Читать далее

Как собирать кроссплатформенные приложения. На C++. В браузере

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели8.9K

TLDR; Нельзя просто так взять и запихнуть реальную систему сборки в браузер. Но если обойти некоторые тонкие технические и юридические моменты - вполне можно, что мы показываем наглядно. Статья о том, как это сделано, и немного о том, где можно применить.

Идея запихнуть clang в браузер и собирать приложения не нова: это уже делали в Emscripten как минимум, и ещё пара исследовательских проектов. Проблема в том, как это использовать в практических сценариях: программирование это не про работающий компилятор, это про целую кучу прикладных библиотек, про инфраструктуру

Проблема встаёт в момент, когда человек узнаёт, сколько в реальности нужно собрать, чтобы получить готовый sysroot для, например, QT: объём работы для подготовки сборочной площадки убивает всю выгоду от идеи. Но что если этой работы делать просто… не нужно.

P.S. Да, это Doom в браузере. Опять. А ещё там есть HoMM2. Ссылка на playground в конце статьи, там, в браузере, можно его запустить, и собрать на свой десктоп. И посмотреть другие примеры.

Как мы докатились до этого

Ближайшие события

Компьютерное зрение для контроля качества на линии: гречка, брак и бесплатная платформа для разметки и обучения модели

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели10K

Компьютерное зрение для контроля качества на линии: гречка, брак и бесплатная платформа для разметки и обучения модели. Отдал заказчику один HTML-файл. Модель внутри, интернет не нужен.

Читать далее

Попробуйте Flutter Web с WebAssembly Week

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.1K

Flutter позволяет создавать выразительные многоплатформенные приложения из единой кодовой базы. Независимо от того, разрабатываете ли вы панель управления, инструмент для своей команды или полноценное веб-приложение, Flutter Web дает вам возможность адаптировать ваше приложение для любого браузера.

С 17 по 21 августа мы проводим Неделю тестирования Flutter Web с WebAssembly ! В течение недели инженеры Dart и Flutter будут в режиме реального времени обрабатывать поступающие запросы, чтобы помочь в миграции, а наша команда по связям с разработчиками будет делиться вашими успехами в каналах сообщества.

Читать далее

Связь времён: Кронос в WASM

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели8.4K

А помните, был такой проект "Кронос" на закате "союза", на заре "перестройки"? Профессиональная 32-битная графическая рабочая станция на собственном железе и собственной ОС и собственной инженерной школой. Вроде был Кронос, а вроде и не был его, сколько с тех пор воды утекло.

[вспомнить всё]

WUI три года спустя: C++ интерфейс на Windows, Linux, macOS и в браузере

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели13K

В октябре 2023 года я рассказывал на Хабре о WUI — небольшой UI-библиотеке на C++, которую начал делать для своего приложения. Тогда она работала на Windows и Linux, а macOS оставалась в списке задач.

Теперь у WUI есть бэкенды для macOS и WebAssembly. Можно открыть сайт и пощелкать тот же интерфейс, который собирается в desktop-приложение: кнопки, многострочный ввод, списки, меню, диалоги, разделители. Код контролов и логика демонстрации общие.

Читать далее

Один рендер‑стек, два мира: как мы показали layout микросхем в браузере через WebGPU

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели6.5K

Тот же Rust‑код, что рисует топологию на десктопе, собирается в wasm и рисует в <canvas> через WebGPU. Сайт при этом не знает про GPU: кликнул на нарушение в списке, камера уехала на место, маркер показал дефект. Ниже как это устроено, где «просто пересобрали» было бы враньём, и какие ловушки сидят не в Rust, а в вебе.

Задача

У нас десктопный инструмент для топологии интегральных схем, layout в формате GDSII (и OASIS). Файл описывает геометрию кристалла: иерархия ячеек, на листьях прямоугольники и полигоны по слоям (металл, поликремний, диффузия). Координаты целые, в DBU, единицах базы данных; в микрометры переводим уже при развороте сцены. Реальный проект: сотни мегабайт на диске, миллионы фигур после разворачивания иерархии.

Рядом выросла веб‑платформа с результатами анализа этих дизайнов. Захотелось показать сам layout в браузере, в том же UI: клик по нарушению в списке открывает его место на топологии. В десктопных пакетах это называют RVE, results viewing environment. Нам нужна была такая навигация без второго рендер‑движка.

Что отсекли сразу

Серверный рендер в тайлы. Каждый зум это запрос. Интерактивность мёртвая, плюс сервер рисует чужие данные.

Canvas2D или SVG на JS. На миллионах прямоугольников не работает. И это был бы второй движок.

Отдельный JS/TS‑парсер и рендер. Формат один, интерпретации через полгода две. Для GDS это особенно опасно: иерархия, зеркала, массивы ссылок.

Остался вариант, который мы и сделали: тот же Rust, цель wasm32-unknown-unknown, картинка в <canvas> через WebGPU.

Читать далее

Плоть слаба: как я писал свой Wine для браузера

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели17K

Каждый год на новогодних каникулах у меня просыпается ностальгия, хочется перепройти что‑то из детства, типа «Harry Potter and the Philosopher’s Stone» от KnowWonder. И если с консольными играми всё просто (эмуляторы типа DuckStation или PCSX2 работают идеально), то с PC‑играми 32-битной эры всё сложно, особенно на Mac. Часто пока ты добьешься запуска игры, уже пропадает всякое желание ее проходить.

В этот раз я решил проблему радикально: написал свою «Windows». В браузере. На TypeScript.

Усаживайтесь поудобнее, я расскажу вам, как я полгода дебажил чужие игры двадцатилетней давности и почему на это подсел.

Читать далее

Hot Reload, который не заработал. Инкрементальная компиляция в браузере своими руками

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели8.4K

В прошлой статье я рассказывал, как мы делаем онлайн IDE для .NET — дизайн, компиляция и запуск приложений происходят прямо в браузере, без сервера. Проект живёт по адресу xaml.io. С тех пор мы много чего добавили, и в какой-то момент у нас стало получаться загружать в IDE довольно крупные .NET проекты — десятки XAML, сотни C# файлов, несколько референсных проектов и пакетов NuGet.

Одна из главных возможностей — это визуальный UI-дизайнер пользовательских приложений. И у него есть особенность: чтобы дизайнер вообще что-то показывал, приложение должно быть скомпилировано, причём в актуальном состоянии. Не «когда-нибудь», а после каждой правки.

Открыли как-то в IDE один реальный проект (FamilyShow — классическое демонстрационное WPF-приложение), поправили одну строку в .cs и 84 секунды наблюдали за анимацией прогресса. С таким UX никакой интерактивный дизайн невозможен.

Сейчас та же правка занимает 5 секунд, а правка XAML-разметки на типичной странице — меньше секунды. В этой статье — как мы к этому пришли, и какие сюрпризы нам приготовили по дороге Roslyn, OpenSilver, WASM и наш собственный код.

Читать далее
1
23 ...