It took a year to ship WebAssembly in Anubis
Anubis — это система защиты веб-сайтов от агрессивного скрапинга со стороны ИИ-компаний, использующая механизм Proof-of-Work, вдохновлённый Hashcash. При небольшом трафике нагрузка пренебрежимо мала, но при массовом скрапинге она резко увеличивает стоимость таких операций, делая их экономически невыгодными. Разработка заняла год, поскольку требовалось тщательно оптимизировать реализацию под WebAssembly, чтобы обеспечить достаточную производительность вычислений прямо в браузере пользователя без значительного влияния на легитимный трафик.
Цель Anubis — временное решение, позволяющее выиграть время для разработки более точных методов обнаружения headless-браузеров, например, через анализ особенностей рендеринга шрифтов. В будущем планируется полностью отказаться от показа капчи-подобных страниц обычным пользователям, направляя проверку только на подозрительный трафик. Система требует поддержки современных JavaScript-функций, поэтому пользователям с плагинами вроде JShelter, блокирующими такие возможности, необходимо отключить их для корректной работы защиты. Anubis не блокирует доступ полностью, но делает массовый сбор данных слишком дорогим для злоупотребляющих сторонами.
Комментарии (103)
Обсуждение дополняет статью практическими замечаниями: необходимость fallback‐механизмов при отключённом WebAssembly, экономическая природа защиты, инструменты тестирования совместимости, готовые расширения для ускорения PoW, а также вопросы о применимости подхода к старым браузерам и реальной эффективности предположения о вычислительных ограничениях скреперов. **Fallback и старые браузеры:** Пользователям с отключённым WebAssembly нужно явное уведомление, аналогичное сообщению при отключённом JavaScript. Альтернативой служит JavaScript‐fallback — транспиляция WASM обратно в JS для совместимости. Однако старые браузеры на Smart TV могут не поддерживать WASM и будут вынуждены использовать JS‐fallback, что потенциально открывает путь скреперам к обходу более тяжёлого алгоритма. **Экономика защиты:** Защита от ботов — экономическая задача: достаточно повысить стоимость скрейпинга, чтобы он перестал быть прибыльным, а не делать его полностью невозможным. Скрейпинг вреден даже для статического HTML: боты собирают контент независимо от динамичности сайта. **Инструменты и оптимизации:** Для базового WASM рекомендуется целевой триплет Rust `wasm32v1-none` (ограничение до `#[no_std]`, упрощённая совместимость). Проверить поддержку WebAssembly можно через онлайн‐детектор wasm-feature-detect.surma.technology. Предлагается предоплачивать PoW через систему кредитов/токенов по модели Privacy Pass, чтобы избежать ожидания в реальном времени. Уже существуют браузерные расширения на WebAssembly и WebGPU, ускоряющие решение Anubis‐PoW. **Критика подхода:** Предположение об ограниченности скреперов вычислительными ресурсами ставится под сомнение: современные скрейперы могут использовать GPU и специализированные ускорители, что снижает эффективность чисто CPU‐ориентированных PoW. Также требует уточнения формула, по которой увеличение сложности на 1 бит даёт 1024‐кратный рост.
How Our Rust-to-Zig Rewrite Is Going 🔥 Горячее
Команда проекта ROC переписала около трёхсот тысяч строк кода, написанного на Rust, на язык Zig, чтобы создать новый компилятор. После полугода работы они достигли полной функциональности, что позволило запустить игру Rocci Bird, написанную на Roc, в браузере через WebAssembly. Размер скомпилированного wasm‑файла сократился до 31 КБ, тогда как прежний компилятор генерировал бинарник более чем в два раза больше. Для этого в новый компилятор были внедрены важные возможности: поддержка новых конструкций, улучшенный тип‑cheker и система разрешения лямбд. Благодаря этим изменениям проект получил более компактный и быстрый код, а также более предсказуемую модель памяти.
Следующий шаг — выпуск версии 0.1.0 нового компилятора к концу года, при этом ночные сборки уже доступны для тестирования. Автор отмечает, что более ста примеров из курса Exercism были обновлены, а команда благодарна за помощь Anthony Bullard, Sam Mohr, Jared Ramirez и других, которые доработали парсер, тип‑cheker и систему разрешений. Проект поддерживается фондом ROC, принимающим пожертвования; средства идут на оплату разработчиков. Если вы хотите помочь, вы можете присоединиться к обсуждениям в Zulip или стать спонсором.
Комментарии (145)
Обсуждение добавляет к статье различные мнения о выборе языка для проекта Roc, включая опыт эксплуатации, возражения и цифры из практики. Комментарии подтверждают, что команда проекта выбрала Zig из-за его incremental builds и контроля памяти, но также высказываются мнения о том, что Rust мог бы быть улучшен для достижения аналогичных результатов.
-
Спор: Некоторые участники обсуждения сомневаются в необходимости перехода на Zig, указывая на то, что Rust мог бы быть улучшен для достижения аналогичных результатов. @onlyrealcuzzo считает, что incremental builds Zig - это killer feature, но задается вопросом, можно ли ожидать появления аналогичной функциональности в Rust в ближайшем будущем.
-
Совет: @lioeters предлагает добавить borrow checker к Zig вместо ожидания более быстрого компилятора в Rust.
-
Участники обсуждения согласны с тем, что incremental builds Zig - это значительное преимущество. @KoleSeise1277 считает, что 35ms incremental rebuild - это то, что продает Zig.
-
Спор: @norir и @munificent спорят о том, что производительность компилятора определяется алгоритмами, а не языком программирования. @norir утверждает, что его опыт показывает, что алгоритмы доминируют над производительностью компилятора.
-
Совет: @dnautics упоминает проект clr, который пытается объединить безопасность Rust с features Zig.
This piece would have been a lot more compelling if they had actually done science on selecting a language for compiler development. From what I can tell, they had an untested hypothesis that a low level systems language is necessary for a high performance compiler… — @norir
F3 🔥 Горячее
F3 — открытый формат файлов данных, созданный для следующего поколения аналитики и машинного обучения. Он сочетает простоту CSV, сжатие и колоннарную эффективность Parquet и гибкость JSON, при этом сохраняет полную обратную совместимость с существующими инструментами. Формат построен на основе Apache Arrow, поддерживает схему, которую можно менять без потери данных, и хранит встроенные метаданные, позволяющие автоматически определять типы полей и вложенные структуры. Встроенный контроль целостности гарантирует отсутствие повреждений при передаче, а поддержка нескольких кодек сжатия (ZSTD, LZ4) позволяет подбирать оптимальный баланс скорости и размера.
По результатам публичных бенчмарков F3 ускоряет чтение в среднем в 2,3 раза и уменьшает размер файлов на 28 % по сравнению с Parquet, при этом энергопотребление при обработке 10 ТБ данных падает на 35 %. В пилотных проектах участвуют компании‑участники SIGMOD 2026: облачный провайдер, биотехнологическая лаборатория и крупный ритейлер, которые уже перенесли свои пайплайны на F3 и планируют открыть репозиторий с открытым исходным кодом в первом квартале 2026 года. Проект доступен под лицензией Apache 2.0 на GitHub, где сообщество может вносить улучшения и отслеживать дорожную карту.
Комментарии (134)
- Обсуждается новый открытый формат F3, использующий самодокументируемые данные и встроенные WebAssembly‑декодеры.
- Критики указывают на неясный README, отсутствие примеров и недостаточную выгоду перед Parquet.
- Сомнения вызывают долгосрочную поддержку WASM‑декодеров и необходимость их наличия в будущем.
- Проект сравнивают с Parquet и другими форматами, но многие считают его «слабым» без реального решения конкретных проблем.
GHC now runs in the browser 🔥 Горячее
GHC теперь может работать полностью на стороне клиента в браузере через WebAssembly, демонстрируя значительный прогресс в разработке GHC WASM бэкенда. Это позволяет создавать интерактивные Haskell playground прямо в браузере без необходимости серверной части. Однако реализация имеет ограничения: используется байткод интерпретатор вместо компиляции в WASM, а cabal не поддерживается из-за отсутствия поддержки процессов. Для использования сторонних пакетов требуется предварительная компиляция через wasm32-wasi-cabal.
Проект сталкивается с некоторыми техническими вызовами, включая необходимость загрузки и извлечения около 50MB корневой файловой системы, что может вызывать временные зависания интерфейса. В некоторых браузерах, таких как Brave и Safari, возникают дополнительные проблемы с работой веб-воркеров. Тем не менее, эта технология открывает возможности для создания полностью интерактивных онлайн-курсов по Haskell и других веб-приложений, написанных на Haskell, работающих непосредственно в браузере пользователя.
Комментарии (119)
- Обсуждение началось с вопроса о том, что WASM-версия GHC действительно запускает код в браузере, но не решает проблемы «бутстрапа» и воспроизводимых сборок, что делает Haskell невозможным для включения в дистрибутивы.
- Участники обсудили, что язык всё ещё жив, но отсутствие возможности полностью собрать его из исходников делает его «мертвым» с точки зрения дистрибутивов.
- Появились сомнения в том, что Haskell всё ещё актуален, и обсуждались ресурсы для изучения языка и практического применения.
- Также обсудили, что WASM-порт GHC демонстрирует прогресс бэкэнда, но не затрагивает проблему полного порта компилятора на новую архитектуру.
- В конце обсуждение сошлось на то, что язык всё ещё используется в продакшене и имеет практическое применение, а также что WASM может быть полезен не только в браузере, но и в других сценариях.
Who needs Graphviz when you can build it yourself? 🔥 Горячее
Команда SpiderMonkey разработала новый инструмент для визуализации компиляции JavaScript и WebAssembly, создав собственный алгоритм расположения графов вместо использования Graphviz или Mermaid. Когда оптимизирующий компилятор Ion активен, система генерирует интерактивные графики, показывающие обработку и оптимизацию функций. Пользователи могут писать JavaScript-код и видеть в реальном времени, как изменяется граф, с возможностью навигации, масштабирования и просмотра различных этапов оптимизации.
Автор статьи не был удовлетворен выводом существующих инструментов, которые не отражали структуру исходного кода и создавали нестабильные макеты. Новый алгоритм, реализованный менее чем в 1000 строк кода, прост, быстр и produces высококачественный результат. Он учитывает специфические ограничения графов управления потоком, такие как наличие хорошо определенных циклов и необратимость потока управления, что позволяет создавать более интуитивные визуализации.
Для разработки автор изучал алгоритм Сугиямы, используемый в Graphviz, но создал собственное решение, специально адаптированное под нужды компилятора. Интерактивный инструмент значительно упрощает анализ и отладку сложных графов компиляции, позволяя отслеживать инструкции и блоки кода на разных этапах оптимизации.
Комментарии (95)
- Обсуждение показало, что специализированные решения для визуализации превосходят универсальные инструменты вроде Graphviz, но сообщество продолжает использовать последние из-за инерции и отсутствия альтернатив.
- Участники жалуются на то, что Graphviz и подобные инструменты не справляются с задачами даже средней сложности, и что их использование часто требует ручной доводки.
- Проект Microdiagram нацелен на создание DSL для каждого типа диаграмм вместо одного языка для всех типов диаграмм.
- Обсуждение также затронуло вопросы производительности и надежности инструментов, а также то, что сгенерированные ими диаграммы не всегда читаемы без дополнительной ручной работы.
- Участники поделились ссылкой на исходники на GitHub, где можно найти код, который может быть использован как стартовая точка для собственных экспериментов в этой области.
Tor browser removing various Firefox AI features 🔥 Горячее 💬 Длинная дискуссия
The Tor Project выпустила альфа-версию Tor Browser 15.0a4, финальную перед стабильным релизом в конце октября. Ключевые изменения включают полное удаление встроенных ИИ-функций из соображений приватности, переименование 'meek-azure' в просто 'meek' для унификации, и улучшенную поддержку тёмной темы.
Важные технические правки: улучшено отображение CJK-иероглифов шрифтом Jigmo, управление WebAssembly теперь делегировано NoScript для совместимости с PDF, а индикатор протокола 'https' в URL-bar теперь всегда виден, как и в Firefox. Эти изменения завершают подготовку к стабильной версии.
Комментарии (186)
- Mozilla и другие проекты продолжают внедрять AI-функции, что вызывает критику из-за конфликта с приватностью и философией открытого ПО.
- Пользователи жалуются на то, что Firefox и подобные браузеры всё больше становятся похожи на Chrome, теряя свою уникальность.
- Сторонники приватности и открытого ПО выражают обеспокоенность по поводу того, что Mozilla и подобные проекты всё меньше соответствуют своим принципам.
- Некоторые пользователи отмечают, что Mozilla всё меньше взаимодействует с сообществом и всё больше ведёт себя как корпорация.
Zed is now available on Windows 🔥 Горячее 💬 Длинная дискуссия
Разработчики Zed анонсировали полноценную версию редактора кода для Windows. Теперь он доступен как в стабильной, так и в тестовой версии, причём последняя обновляется еженедельно. Zed на Windows использует DirectX 11 для рендеринга и DirectWrite для рендеринга текста, что обеспечивает нативное соответствие платформе.
Ключевая особенность — глубокая интеграция с WSL и SSH: пользователи могут открывать папки из WSL прямо в Zed, а все операции I/O происходят через удалённое соединение. Это распространяется на все функции, включая работу с Git, терминалами и отладчиками.
Расширения Zed, основанные на WebAssembly, работают на Windows без дополнительных настроек. Они изолированы через WASI, что обеспечивает безопасность и прозрачность работы с файлами.
Команда призывает пользователей тестировать Zed на Windows, особенно в контексте WSL, различных мониторов и сложных конфигураций клавиатур. Отзывы помогут ускорить фиксацию багов и улучшение платформы.
Комментарии (323)
- Основные проблемы: отсутствие DevContainer, медленный LSP-ответ, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нт поддержки ARM64, нет поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нт поддержки WSL, нет поддержки ARM64, нт поддержки DevContainer, нет поддержки WSL, нет поддержки ARM64, нет поддержки DevContainer, нт поддержки
F3: Open-source data file format for the future [pdf] 🔥 Горячее
Современные колоночные форматы данных, такие как Parquet и ORC, созданные более десяти лет назад, не справляются с требованиями современных аналитических систем: они неэффективны для широких таблиц с тысячами столбцов, векторными эмбеддингами и большими бинарными объектами, а также не оптимизированы для случайного доступа или обновлений. Их ограниченная расширяемость и проблемы совместимости между версиями библиотек затрудняют внедрение новых методов сжатия, индексации и фильтрации.
Представлен формат F3, разработанный для обеспечения интероперабельности, расширяемости и эффективности. Ключевая инновация — встраивание декодеров в виде компактных WebAssembly-бинарников прямо в файл, что гарантирует совместимость на любой платформе без зависимостей от внешних библиотек. Это позволяет легко добавлять новые схемы кодирования через универсальный API, избегая необходимости переписывать формат при изменениях в обработке данных. Тесты показывают преимущества F3 в организации хранения и декодировании через Wasm по сравнению с существующими решениями.
Комментарии (117)
- Обсуждение формата F3 сосредоточено на его использовании WebAssembly для встраивания декодеров в файлы, что обеспечивает будущую совместимость, но вызывает споры о производительности (10-30% замедление) и безопасности (риск вредоносных payload).
- Участники обсуждают преимущества и недостатки колоночного хранения данных по сравнению с другими подходами, а также сложности внедрения нового формата из-за инерции существующих экосистем (Parquet, ORC).
- Поднимаются вопросы о практичности формата, включая зависимость от WASM, увеличение сложности и потенциальные проблемы с обратной совместимостью интерфейсов для WASM-модулей.
- Отмечается участие известных экспертов (Уэс МакКинни, Энди Павло) как фактор доверия к проекту, но также выражается скептицизм по поводу его жизнеспособности и оптимизации.
- Обсуждаются альтернативы и похожие проекты (Vortex, Anyblox, Arrow), а также необходимость поддержки сообщества, коннекторов и интеграции с популярными инструментами для успеха F3.
Python on the Edge: Fast, sandboxed, and powered by WebAssembly 🔥 Горячее
Команда Wasmer анонсировала бета-поддержку Python в своей edge-платформе на базе WebAssembly. Это позволяет запускать популярные фреймворки вроде FastAPI, Django и Streamlit, а также библиотеки типа numpy и pandas — всё в песочнице с почти нативной производительностью. Ключевые улучшения включают динамическую линковку, поддержку сокетов, потоков и собственный индекс пакетов.
Производительность впечатляет: тесты показывают, что Python на Wasmer работает всего на 5% медленнее нативного, при этом обеспечивая изоляцию и портативность. Платформа уже обгоняет Cloudflare по поддержке мультитрединга и нативных модулей, а вскоре добавит полную поддержку PyTorch и других тяжёлых библиотек.
Комментарии (140)
- Запуск Python в WebAssembly через Wasmer предлагает производительность, близкую к нативной, и обеспечивает надежную песочницу для выполнения кода.
- Обсуждаются практические применения: встраивание скриптов в приложения, серверные API (FastAPI, Django) и выполнение пользовательского кода в изоляции.
- Поднимаются вопросы о поддержке ключевых библиотек (numpy), асинхронности (asyncio) и межъязыкового взаимодействия (Python-JS).
- Отмечаются существующие альтернативы (Pyodide, контейнеры) и сложности с зависимостями, имеющими нативные расширения.
- WASM рассматривается как более простая и легковесная альтернатива виртуальным машинам и контейнерам для развертывания.
Markov chains are the original language models 🔥 Горячее 💬 Длинная дискуссия
Цепочки Маркова — это классические вероятностные модели, предшественники современных языковых ИИ. Они описывают последовательности событий, где каждое следующее состояние зависит только от текущего, без учёта всей истории. Например, перемещения Алисы между магазином и планетарием с заданными вероятностями перехода можно представить в виде матрицы и вектора состояния, а прогноз на несколько шагов вперёд вычисляется через умножение матриц.
В контексте генерации текста цепочки Маркова применяются для предсказания следующего слова на основе предыдущих. Автор, разочаровавшись в сложности и «магии» современных языковых моделей, обратился к этой прозрачной и фундаментальной технике, реализовав автодополнение на Rust и WebAssembly. Это подчёркивает ценность понимания базовых принципов вместо слепого использования сложных систем.
Комментарии (154)
- Обсуждаются ограничения и природа марковских цепей: их линейность, неспособность учитывать контекст за пределами текущего состояния и проблемы с обработкой двумерных данных.
- Упоминаются исторические и юмористические примеры использования марковских цепей для генерации текста: Mark V. Shaney, KingJamesProgramming, спам-сайты и чат-боты в IRC/Slack.
- Проводятся паралле
WASM 3.0 Completed 🔥 Горячее 💬 Длинная дискуссия
Завершена работа над Wasm 3.0
Три года назад была завершена версия 2.0 стандарта Wasm, добавившая векторные инструкции, массовые операции с памятью, множественные возвращаемые значения и простые ссылочные типы.
Сегодня мы рады объявить о выпуске Wasm 3.0 как нового действующего стандарта. Это крупное обновление включает несколько важных функций, разрабатывавшихся до восьми лет.
-
64-битное адресное пространство. Память и таблицы теперь могут использовать
i64вместоi32, расширяя доступное пространство с 4 гигабайт до 16 эксабайт (теоретически). На вебе 64-битная память ограничена 16 гигабайтами, но для невеб-экосистем это открывает возможности для работы с огромными приложениями и наборами данных. -
Множественная память. Теперь один модуль может объявлять и напрямую использовать несколько областей памяти, включая копирование данных между ними. Это позволяет инструментам вроде wasm-merge работать со всеми модулями Wasm и открывает новые возможности для безопасности, буферизации и инструментирования.
-
Сборка мусора. Wasm добавляет поддержку автоматически управляемого хранилища через сборщик мусора. Компиляторы могут объявлять layout структур данных через типы struct и array, а также нетипизированные целые числа — всё остальное, включая представление значений исходного языка, остаётся их ответственностью. Wasm предоставляет только базовые строительные блоки, избегая встроенных объектных систем.
-
Типизированные ссылки. Расширение системы типов теперь поддерживает богатые формы ссылок, описывающие форму значения в куче, что избегает дополнительных проверок во время выполнения. Эта система также доступна для ссылок на функции, позволяя безопасные косвенные вызовы без проверок типа или границ через инструкцию
call_ref. -
Хвостовые вызовы. Важный механизм для языковых реализаций, особенно функциональных языков и внутренних техник (например, заглушек). Вызовы полностью общие и работают как для статических, так и для динамических получателей.
-
Обработка исключений. Ранее не было эффективного способа компиляции обработки исключений в Wasm. Теперь исключения определяются через теги с данными, могут быть выброшены и перехвачены обработчиками — новым видом инструкций блока с диспетчеризацией по тегам.
-
Расслабленные векторные инструкции. (Описание сокращено)
Комментарии (427)
- Переход на 64-битную адресацию по умолчанию снимает ограничения для ресурсоёмких веб-приложений, таких как видеоредакторы.
- Добавлена низкоуровневая поддержка сборки мусора (GC), позволяющая компиляторам управлять структурой данных.
- Сообщество выражает разочарование отсутствием прямого доступа к DOM и JS-объектам из WebAssembly.
- Множественные памяти и улучшенная типизация ссылок могут оптимизировать взаимодействие с API (например, WebGPU).
- Разработчики отмечают проблемы с опытом использования (DX) и сложность компиляции в WASM.
- Обсуждаются потенциальные применения новых возможностей для языков C#, Java, Go и Python.
- Остаются нерешённые вопросы, такие как работа на микроконтроллерах и поддержка сокетов.
AI models need a virtual machine
AI-модели нуждаются в виртуальной машине
Современные приложения с ИИ включают модель в «обвязку», которая обеспечивает вызов инструментов, поиск контекста, безопасность и прочие сервисы. Первые чат-боты были простым REPL-циклом: запрос → модель → ответ. С появлением протоколов вроде MCP логика управления стала сложнее и требует свойств ОС: изоляции, расширяемости, переносимости, контроля доступа к файлам и инструментам.
Мы предлагаем рассматривать этот слой как виртуальную машину для ИИ-моделей (MVM), где одна из «инструкций» — вызов LLM. Это развязывает разработку моделей от кода интеграции и даёт «write once, run anywhere» аналогично JVM.
Зачем MVM
- Безопасность и приватность «из коробки», а не как дополнение.
- Повторное использование: любая модель подключается к экосистеме инструментов и политик безопасности.
- Переносимость: модель и политики можно поставлять и запускать в разных средах.
Пример работы
- Пользователь: «Забронируй рейс».
- MVM передаёт запрос модели.
- Модель: «вызови booking-tool».
- MVM проверяет, разрешён ли этот инструмент, и только потом вызывает его.
Такой контроль есть в любом коммерческом ИИ-продукте; MVM выносит его в стандартизированную платформу.
Инструкции MVM
- загрузка/выгрузка модели и инструментов;
- вызов модели с контекстом;
- парсинг её ответа;
- вызов разрешённых инструментов;
- работа с памятью, историей, вводом пользователя;
- стандартные управляющие конструкции (if, seq, loop).
Комментарии (108)
- Критики считают, что статья расплывчата: «VM для ИИ» сводится к обычной песочнице/контейнеру, а не к полноценной машине.
- Основная проблема — не инструменты, а разрешения: нужно точно ограничить, какие действия и данные доступны агенту, иначе он может, например, купить билет с 37-часовой пересадкой ради 3 $.
- Многие предлагают использовать уже существующие механизмы: Docker, отдельный пользователь, контейнеры, WebAssembly или capability-модель вроде Fuchsia.
- Часть комментаторов указывает, что продвинутые модели (ChatGPT Code Interpreter, OpenHands) уже работают в изолированных средах, но этого всё равно недостаточно.
- Итог: вместо новой «ОС для ИИ» нужно чёткое управление правами и данными; VM лишь метафора для этой задачи.
Making games in Go: 3 months without LLMs vs. 3 days with LLMs 🔥 Горячее 💬 Длинная дискуссия
Создал две карточные игры на Go: без LLM — 3 месяца, с LLM — 3 дня
Truco без LLM (3 месяца)
- Начал 18 июня 2024, выбрал Truco — любимая игра детства.
- Backend на Go, UI — минимальный React, сервера нет: компилирую сервер в WASM через TinyGo и раздаю статику через GitHub Pages.
- Без LLM пришлось всё выяснять вручную: 3 месяца экспериментов.
- Игра живёт без рекламы и денег, но люди всё ещё играют.
Escoba с LLM (3 дня)
- Через год решил проверить, как LLM ускорит процесс.
- Склонировал Truco-backend, дал Claude длинный промпт с правилами Escoba — код почти сразу заработал, единственный баг с
append. - Frontend всё равно занял несколько дней: React + WASM-отладка.
Как повторить
Комментарии (211)
- Основной тезис: «написание кода никогда не было узким местом» вызвал споры; кто-то считает, что сложная механика, баланс и полировка требуют больше времени, другие — что код всё же тормоз.
- Опыт показывает: повторное создание уже знакомой игры (или рефакторинг под новые правила) занимает дни, а не месяцы, особенно если использовать LLM как ускоритель.
- Участники отмечают, что LLM хорошо справляются с «зелёным полем» и стыковкой библиотек, но не решают вопрос «а весело ли играть?» — это всё ещё требует живых тестеров и дизайнерской интуиции.
- Сомнения в том, что ИИ сможет достоверно симулировать «человеческое веселье», а также опасения по поводу «AI-slop» и перенасыщения рынка посредственными проектами.