Добавить в корзинуПозвонить
Найти в Дзене
Цифровая Переплавка

🍊 Ant: новый JavaScript-движок размером 9 МБ обещает запуск за 5 миллисекунд и изоляцию недоверенного кода

Ant — молодой JavaScript-исполнитель, который пытается уместить в одном небольшом файле почти всё необходимое современному разработчику: собственный движок, запуск TypeScript без отдельной сборки, установку пакетов, веб-сервер и даже аппаратно изолированную песочницу. Размер исполняемого файла — около 9,1 МБ, заявленное время холодного запуска — 5,4 мс. Цифры выглядят вызывающе. Особенно на фоне Node, Bun и Deno, которые давно вышли за пределы простых исполнителей JavaScript и превратились в целые программные платформы. Но главный интерес Ant даже не в том, что ещё один проект оказался быстрее в отдельно взятом тесте. Гораздо любопытнее его архитектурная ставка: автор не стал оборачивать готовый V8 или JavaScriptCore, а написал собственный движок Ant Silver. И всё это началось с репозитория, созданного в ноябре 2025 года. На первый взгляд Ant легко принять за очередную компактную оболочку над существующим JavaScript-движком. Так было бы проще: берёшь V8, JavaScriptCore или SpiderMonkey
Оглавление

Ant — молодой JavaScript-исполнитель, который пытается уместить в одном небольшом файле почти всё необходимое современному разработчику: собственный движок, запуск TypeScript без отдельной сборки, установку пакетов, веб-сервер и даже аппаратно изолированную песочницу. Размер исполняемого файла — около 9,1 МБ, заявленное время холодного запуска — 5,4 мс.

Цифры выглядят вызывающе. Особенно на фоне Node, Bun и Deno, которые давно вышли за пределы простых исполнителей JavaScript и превратились в целые программные платформы. Но главный интерес Ant даже не в том, что ещё один проект оказался быстрее в отдельно взятом тесте. Гораздо любопытнее его архитектурная ставка: автор не стал оборачивать готовый V8 или JavaScriptCore, а написал собственный движок Ant Silver.

И всё это началось с репозитория, созданного в ноябре 2025 года.

Не уменьшенный Node, а отдельный движок

На первый взгляд Ant легко принять за очередную компактную оболочку над существующим JavaScript-движком. Так было бы проще: берёшь V8, JavaScriptCore или SpiderMonkey, добавляешь загрузчик модулей, несколько системных API — и получаешь новый исполнитель со своим интерфейсом.

Создатель Ant выбрал более сложный путь. Ant Silver заявлен как самостоятельный движок, а не оболочка над V8, JavaScriptCore или SpiderMonkey. Для динамической компиляции используется ответвление MIR — компактной промежуточной инфраструктуры, которая переводит код в машинные инструкции во время выполнения.

Это принципиальное различие. Готовый большой движок приносит зрелую оптимизацию, отладчик, сборщик мусора, многолетнюю совместимость и огромный объём проверок. Вместе с этим приходят размер, сложность и издержки запуска. Собственный движок позволяет контролировать почти каждый байт и каждую стадию загрузки, но заставляет заново решать множество неприятных задач:

🐜 корректно реализовать семантику JavaScript со всеми её историческими особенностями;

🧠 написать сборщик мусора, который не будет ни слишком медленным, ни слишком прожорливым;

⚙️ обеспечить быструю динамическую компиляцию и не потратить на оптимизацию больше времени, чем она сэкономит;

📦 поддержать модули, пакеты и привычные интерфейсы экосистемы;

🔐 не допустить уязвимостей на границе между JavaScript и операционной системой.

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

Девять мегабайт — много это или мало?

Ant занимает примерно 9,1 МБ, а при сборке с оптимизацией размера — около 5,9 МБ. В опубликованном сравнении Node занимает около 120 МБ, Deno — 90 МБ, Bun — 60 МБ.

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

Тем не менее компактность имеет вполне практический смысл.

В бессерверной инфраструктуре исполнитель приходится регулярно загружать и запускать заново. На пограничных узлах одновременно размещается множество небольших обработчиков. В контейнерах размер образа влияет на скорость доставки. Для командных утилит приятно получить один небольшой файл вместо платформы с тяжёлым набором зависимостей. А во встраиваемых устройствах десятки лишних мегабайт могут быть не косметической проблемой, а жёстким ограничением.

Лозунг проекта звучит удачно: муравей способен переносить груз, во много раз превышающий его собственный вес. Ant хочет делать то же самое в мире JavaScript.

Откуда взялись 5,4 миллисекунды

Главная цифра на сайте — холодный запуск за 5,4 мс. Для Bun указано 12,8 мс, для Deno — 24,8 мс, для Node — 31,1 мс.

Проверка устроена следующим образом: исполнитель импортирует Hono, создаёт приложение, регистрирует два маршрута, печатает сообщение и завершает работу. HTTP-сервер при этом не запускается. Таким образом измеряются прежде всего запуск процесса, разрешение модулей, загрузка библиотеки и её начальная настройка.

Испытание повторялось 100 раз после десяти предварительных запусков. На компьютере с Apple M4 Pro среднее время Ant составило 5,4 мс, минимальное — 5 мс, максимальное — 7,1 мс. У Node среднее достигло 31,1 мс, а один из запусков растянулся до 151,7 мс.

Это хороший тест для командных утилит и короткоживущих функций. Если программа живёт 20 мс, экономия 25 мс на запуске меняет всё. Если сервер работает неделями, разница между 5 и 30 мс при старте почти не имеет значения. Там важнее пропускная способность под нагрузкой, задержка сборщика мусора, расход памяти и поведение после длительного прогрева.

Кроме того, результаты относятся к конкретным версиям программ, оборудованию и macOS на архитектуре arm64. Они показывают, что Ant действительно способен стартовать очень быстро в этой конфигурации, но не доказывают его безусловное превосходство во всех сценариях.

Я бы воспринимал опубликованные цифры как убедительную демонстрацию архитектурного преимущества, а не как окончательный рейтинг исполнителей JavaScript. Для серьёзного сравнения не хватает испытаний HTTP-сервера, обработки JSON, криптографии, потоков данных, длительных вычислений, потребления памяти и задержек при сборке мусора.

TypeScript без отдельной сборки

Ant умеет запускать файлы TypeScript напрямую. Вместо отдельного вызова компилятора, создания каталога с результатом и последующего запуска JavaScript разработчику достаточно передать исполнителю исходный файл.

Это не уникальная возможность: современные версии Node, Bun и Deno тоже движутся в сторону непосредственной работы с TypeScript. Но для небольшого нового исполнителя такая поддержка важна. Сегодня платформа, понимающая только обычный JavaScript, сразу выглядит неполной.

Нужно лишь помнить, что «запуск TypeScript» обычно не означает полноценную проверку типов. Исполнитель может удалить типовые конструкции и выполнить оставшийся JavaScript, не сообщая о логических противоречиях в типах. Поэтому в крупном проекте отдельная статическая проверка всё равно полезна. Отсутствие обязательного этапа сборки упрощает запуск, но не отменяет инженерную дисциплину.

Сервер без переходника

В Ant можно экспортировать стандартный обработчик запросов, после чего исполнитель сам поднимет сервер. Благодаря этому Hono работает без специального переходника.

Идея опирается на общий веб-интерфейс: приложение получает объект запроса и возвращает объект ответа. Код меньше зависит от конкретного исполнителя, а платформе не приходится изобретать ещё один несовместимый способ описания HTTP-обработчиков.

Здесь появляется WinterTC — инициатива по созданию минимального общего набора серверных JavaScript-интерфейсов. Ant заявляет соответствие этому набору. Практический смысл прост: один обработчик должно быть легче переносить между сервером, бессерверной функцией и пограничной платформой.

Для JavaScript это важное направление. Долгое время серверная экосистема фактически равнялась интерфейсам Node. Позже появились Deno, Bun, рабочие среды пограничных платформ и несколько вариантов бессерверных функций. У каждой среды обнаружились свои глобальные объекты, ограничения и способы доступа к сети. Общий минимальный слой способен уменьшить количество платформенных переходников.

Сто процентов в одной проверке — и около 64 процентов в другой

На главной странице Ant красуется показатель совместимости 100%. В репозитории уточняется, что речь идёт о наборе compat-table: пройдены 1511 из 1511 проверок, охватывающих возможности JavaScript от ранних версий до современных предложений.

Но рядом есть другая, не менее важная цифра: примерно 64% в test262, официальном массиве проверок языка ECMAScript.

Противоречия здесь нет. Наборы проверяют разные уровни полноты. compat-table хорошо отвечает на вопрос, присутствуют ли заметные возможности языка. test262 гораздо глубже исследует пограничные случаи и точное соответствие спецификации.

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

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

Установка пакетов быстрее npm — но вопрос не только в скорости

Ant включает собственную команду установки пакетов. Авторы обещают ускорение до 40 раз по сравнению с npm и показывают установку Hono примерно за 155 мс.

Быстрый установщик — приятная функция, особенно в непрерывной интеграции и часто пересоздаваемых контейнерах. Однако скорость здесь сильно зависит от состояния кэша, сети, количества зависимостей, устройства хранения и структуры конкретного пакета. Формулировка «до 40 раз» описывает лучший сценарий, а не гарантированный результат.

У экосистемы пакетов есть и более сложные задачи, чем быстро скачать архивы:

📌 воспроизводимо разрешить версии зависимостей;

🔒 проверить целостность полученных файлов;

🌳 правильно обработать вложенные и одноранговые зависимости;

🧩 сохранить совместимость с пакетами, ожидающими поведение Node;

🛡️ уменьшить риск атак через вредоносные публикации и перехваченные учётные записи.

Иными словами, впечатляющие 155 мс — это начало разговора. Настоящая проверка установщика наступит на больших монорепозиториях и проектах с запутанным деревом зависимостей.

Зачем Ant понадобился собственный реестр

Создатель проекта запустил ants.land — открытый реестр, совместимый с протоколом npm. Публиковать туда пакеты можно средствами Ant, а устанавливать их предполагается не только через Ant, но также через npm, Yarn, pnpm и Bun.

Для веб-среды предусмотрена раздача модулей через esm.ants.land. Кроме того, реестр собирается оценивать пакеты по шкале от 0 до 100, учитывая документацию, лицензию и совместимость.

Идея разумна: новому исполнителю нужна площадка, где можно публиковать проверенные для него библиотеки. Но отдельный реестр одновременно создаёт классическую проблему холодного старта. Разработчики не идут туда, где мало пакетов, а авторы пакетов не спешат публиковаться туда, где мало пользователей.

Совместимость с протоколом npm частично снимает это ограничение. Реестр не требует нового формата пакетов и не запирает пользователя в одной программе. Однако ему ещё предстоит доказать надёжность: переживать нагрузку, хранить версии годами, бороться со вредоносными пакетами, защищать имена и восстанавливать данные после сбоев.

Реестр — это не просто сайт с кнопкой публикации. Это инфраструктура доверия. Сделать её быстро можно, поддерживать безопасно на протяжении многих лет гораздо труднее.

Самая необычная возможность — песочница внутри виртуальной машины

Наиболее амбициозная функция Ant связана с запуском недоверенного кода. Многие среды предлагают разрешения: запретить чтение файлов, ограничить сеть или запросить подтверждение пользователя. Ant заявляет более жёсткую границу — каждый изолированный процесс помещается в отдельную виртуальную машину на основе KVM в Linux или Hypervisor.framework в macOS.

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

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

Но слово «изолированный» не означает «неуязвимый». Безопасность зависит от реализации управляющего слоя, настроек гипервизора, виртуальных устройств, подключения каталогов и обновления зависимостей. Нужно проверить и такие вопросы, как ограничение памяти, времени процессора, числа процессов и объёма создаваемых данных. Иначе вредоносная программа может не вырваться наружу, но всё равно устроить отказ в обслуживании.

Есть и заметная шероховатость в опубликованном примере: конструктор песочницы записан с лишними скобками и в таком виде выглядит ошибочным. Для функции, которая позиционируется как одно из главных преимуществ продукта, документации и работающим примерам потребуется особое внимание.

Где Ant действительно может пригодиться

Ant пока рано рассматривать как прямую замену Node во всех проектах. У Node огромная экосистема, зрелые средства наблюдения и отладки, множество нативных расширений и многолетний опыт эксплуатации. Bun уже успел собрать заметное сообщество, а Deno предлагает цельную платформу с сильным вниманием к безопасности и веб-стандартам.

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

🚀 Бессерверные функции выигрывают от сокращения холодного запуска.

🌍 Пограничные вычисления ценят компактность и переносимые веб-интерфейсы.

🧰 Командные инструменты становятся отзывчивее, когда исполнитель запускается почти мгновенно.

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

📟 Встраиваемые устройства могут получить современный язык без тяжёлого движка.

🧪 Образовательные платформы способны запускать пользовательские решения в отдельных виртуальных машинах.

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

Большие амбиции и очень маленькая команда

У репозитория Ant на момент приведённого снимка было 317 звёзд, 11 ответвлений и всего две открытые проблемы. Почти вся история разработки связана с одним основным автором — theMackabu.

Это одновременно впечатляет и настораживает. Один разработчик способен быстро двигаться, принимать цельные архитектурные решения и не тратить время на согласования. Но исполнитель языка, установщик пакетов, сервер, реестр и гипервизорная песочница — огромная поверхность ответственности.

Зрелость платформы определяется не количеством функций на главной странице, а тем, как она ведёт себя после тысяч отчётов об ошибках, нескольких серьёзных уязвимостей и лет обратной совместимости. Проекту понадобятся независимые участники, аудит безопасности, автоматические проверки на разных архитектурах и понятная модель управления.

Лицензия MIT облегчает участие сообщества. Однако открытый код сам по себе не гарантирует, что его внимательно проверили.

Стоит ли устанавливать Ant прямо сейчас

Для экспериментов — безусловно. Здесь есть что изучить: самостоятельный движок, компактная динамическая компиляция, поддержка Hono, прямой запуск TypeScript и виртуализированная песочница. Даже если Ant никогда не станет массовой платформой, он уже показывает, что JavaScript-исполнитель необязательно должен занимать десятки или сотни мегабайт.

Для производственной системы я бы сначала проверил конкретную нагрузку и не ориентировался только на красивую таблицу. Полезно прогнать собственные тесты, оценить память, убедиться в совместимости зависимостей и отдельно изучить модель обновлений и безопасности. Недоверенный код нельзя отдавать новой песочнице без независимого аудита лишь потому, что на сайте упомянута аппаратная изоляция.

Установка через передачу загруженного сценария прямо в командную оболочку тоже требует осмотрительности. Безопаснее сначала получить сценарий, прочитать его содержимое и лишь затем запускать. Это касается не только Ant, а любого инструмента, распространяемого таким способом.

Что будет дальше

У Ant есть шанс стать не «ещё одним Node», а специализированным исполнителем для короткоживущего и изолированного JavaScript. Именно такая ниша выглядит убедительнее попытки немедленно догнать зрелые платформы по всей ширине возможностей.

В ближайшее время важнее всего следить не за ещё одной победой в микропроверке, а за более приземлёнными показателями: ростом результатов test262, совместимостью с пакетами npm, стабильностью под длительной нагрузкой, независимой проверкой песочницы и появлением новых постоянных участников проекта.

Если эти направления будут развиваться, 5,4 мс окажутся не главным достижением Ant, а лишь первым способом привлечь внимание. Настоящей ценностью может стать компактная среда, в которой чужой JavaScript запускается быстро, переносимо и за действительно жёсткой границей.

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

Источники