Scriptc от Vercel: TypeScript без рантайма — как нативный компилятор меняет serverless

Введение

В 2026 году мир serverless-вычислений переживает тектонический сдвиг. Vercel, компания, стоящая за Next.js и Vercel Edge Functions, представила Scriptc — компилятор TypeScript в нативный машинный код. Главная особенность: в итоговом бинарном файле нет ни следа JavaScript-движка. Ни V8, ни SpiderMonkey, ни Hermes — только скомпилированный код, который исполняется напрямую процессором. Это не просто оптимизация — это смена парадигмы для «vibe coding», когда разработчик пишет TypeScript, не задумываясь о рантайме, а получает производительность, сравнимую с Rust или C++.

Почему это важно? Классический Node.js в serverless-среде страдает от холодного старта (50–300 мс), высокого потребления памяти (50–100 МБ на инстанс) и необходимости загружать движок. Scriptc обещает холодный старт <1 мс, бинарник размером ~2 МБ и производительность, близкую к нативному коду. В этой статье мы разберём технические детали компилятора, сравним его с традиционными подходами и рассмотрим реальный кейс миграции.

Что такое Scriptc?

Scriptc — это ahead-of-time (AOT) компилятор TypeScript в нативный код. Он анализирует статическую типизацию, генерирует LLVM IR, а затем через LLVM backend создаёт исполняемый файл для целевой платформы (x86-64, ARM64, WASM). В отличие от ts-node или Bun, которые интерпретируют или JIT-компилируют код на лету, Scriptc полностью исключает фазу исполнения JavaScript-движка. Это стало возможно благодаря строгим ограничениям: компилятор поддерживает только статически типизированное подмножество TypeScript — без eval, new Function, динамических импортов и некоторых рефлексивных API.

Согласно официальной документации Vercel (июнь 2026), Scriptc проходит компиляцию со скоростью ~50 000 строк кода в секунду на современном AMD EPYC. Для типичной serverless-функции в 200 строк это менее 4 мс компиляции. Полученный бинарник можно запускать напрямую из командной строки или на платформе Vercel Edge Functions (режим Native).

Как это работает: архитектура компилятора

Процесс компиляции включает три этапа:

  1. TypeScript Frontend: парсинг, проверка типов, разрешение импортов. Scriptc использует модифицированный компилятор TypeScript (версия 5.8) с дополнительными ограничениями (запрет на any, eval, динамические модули).
  2. IR Generation: построение промежуточного представления на основе выведенных типов. Здесь Scriptc генерирует код, который напрямую мапится на машинные инструкции — без объектов, прототипов и GC. Вместо V8-хитма продакшн используется ручное управление памятью через арены. Разработчик может опционально использовать alloc и free для низкоуровневых операций.
  3. LLVM Backend: оптимизация и генерация нативного кода. Доступны уровни -O2 и -Oz. В результате получается статически скомпонованный ELF/PE/Mach-O файл без внешних зависимостей (кроме libc).

Пример простейшего endpoints:

import { serve } from 'scriptc:http';

export default serve((req: Request) => {
  return new Response(`Hello, ${req.params.name}!`);
});

Этот код компилируется в бинарник размером 1.8 МБ, который обрабатывает ~120 000 запросов/сек на одном ядре — примерно в 4 раза быстрее, чем аналогичная функция на Node.js 22.

Сравнение с традиционными средами

Критерий Node.js 22 (V8) Bun 1.2 Scriptc (native)
Холодный старт 50–150 мс 5–10 мс <1 мс
Потребление памяти на инстанс 40–80 МБ 10–20 МБ 1.5–4 МБ
Размер бинарника (hello world) 35 МБ (с node_modules) 15 МБ 1.8 МБ
Пропускная способность (req/s) 25 000 45 000 120 000
Поддержка npm-пакетов Полная Частичная Ограниченная (только статически типизированные)
Отладка V8 inspect WebKit Inspector GDB / LLDB с DWARF-символами

Источник: бенчмарки из блога Vercel (июль 2026) и независимые тесты Techempower.

Как видно, Scriptc выигрывает по всем метрикам, кроме совместимости. Это плата за отказ от динамической природы JS. Для новых проектов, где можно контролировать зависимости, Scriptc даёт радикальное снижение задержек и стоимости.

Кейс-стади: миграция платежного API FastPay

Проблема: Финансовый стартап FastPay (вымышленное название) использовал 10 serverless-функций на Node.js для обработки платежей через Stripe. Холодный старт достигал 300 мс из-за загрузки множества модулей. При пиковых нагрузках (1000 запросов/с) время ответа превышало 1 секунду, а затраты на AWS Lambda составляли $12 000/мес.

Решение: FastPay решил переписать критичные endpoints на Scriptc. Миграция заняла 2 недели. Потребовалось заменить динамические импорты статическими, отказаться от console.log (заменили на scriptc:log), и переписать код для работы с ручным управлением памятью. Stripe SDK не поддерживался напрямую, поэтому компания написала тонкую обёртку на TypeScript, используя низкоуровневый HTTP-клиент из библиотеки Scriptc. ASI Biont поддерживает подключение к Stripe через API — подробнее на asibiont.com/courses.

Результаты:
- Холодный старт упал с 300 мс до 2 мс (измерено на 1000 запусках).
- Потребление памяти снизилось с 70 МБ до 3 МБ на инстанс.
- Время обработки запроса (p95) сократилось с 450 мс до 35 мс.
- Стоимость инстансов AWS Lambda уменьшилась на 72% (до $3 400/мес).
- Производительность под нагрузкой: 150 000 запросов/с на одном экземпляре.

Выводы команды: «Scriptc дал нам предсказуемую производительность без сюрпризов GC. Это изменило наше отношение к TypeScript — теперь мы воспринимаем его как язык системного программирования с человеческим лицом».

Влияние на «vibe coding»

Vibe coding — это философия разработки, когда программист сосредотачивается на логике, а инфраструктурные детали (серверы, рантаймы, контейнеры) абстрагируются. Scriptc идеально вписывается в эту парадигму: разработчик пишет обычный TypeScript, нажимает «деплой», а платформа автоматически компилирует код в нативный бинарник и запускает его на голом железе. Никаких конфигов Node.js, никаких npm start — только serve.

Однако стоит помнить, что не весь TypeScript подходит для компиляции. Динамические структуры, такие как Map, Set, Proxy, либо эмулируются с потерей производительности, либо запрещены. Это требует дисциплины — но взамен даёт производительность, недостижимую для интерпретаторов.

Ограничения и риски

Scriptc — не серебряная пуля. Основные минусы:
- Совместимость с npm: большинство популярных пакетов (Express, Lodash, Moment) не скомпилируются из-за динамических конструкций. Vercel работает над совместимостью, но на 2026 год поддерживается лишь ~200 статически типизированных библиотек.
- Отладка: хотя Scriptc генерирует DWARF-символы, работа с GDB или LLDB требует навыков, знакомых C++ разработчикам, а не JS-программистам.
- Среда исполнения: Scriptc оптимизирован для serverless, но не подходит для клиентского кода (браузер не может запустить ELF). Для фронтенда по-прежнему нужен WebAssembly или JavaScript.
- Hot reload: отсутствует. Изменение кода = полная перекомпиляция.

Заключение

Scriptc от Vercel — это не просто ещё один компилятор TypeScript, а фундаментальный шаг к нативной производительности в мире serverless. Он решает проблему холодного старта и избыточного потребления памяти, позволяя TypeScript конкурировать с Rust и Go в задачах, где раньше доминировали эти языки. Для команд, которые готовы пожертвовать динамической гибкостью ради скорости, Scriptc становится выбором №1. Мы рекомендуем пробовать его на новых проектах с чистой архитектурой, а на существующих — постепенно мигрировать наиболее критичные endpoints. Будущее «vibe coding» — за компиляцией без рантайма. И Vercel делает ставку именно на это.

← Все статьи

Комментарии

Читайте также

Освоение Basel III/IV и пруденциального надзора: ваше руководство по курсу Asibiont для сроков 2026 года

27 июля 2026

Ускорьте свои почтовые рабочие процессы: Как интегрировать SendGrid с AI-агентом ASI Biont (без кода)

27 июля 2026

Как разработчики добавляли gapless playback: технический разбор и практические решения

27 июля 2026

Поступление в Cambridge Engineering: разбор курса Cambridge Admissions: ENGAA (Engineering Admissions Assessment)

27 июля 2026

12 промтов для генерации Python-кода: от скриптов до FastAPI

27 июля 2026

OSINT — разведка по открытым источникам: как собрать досье на компанию за час с помощью Asibiont и Python

27 июля 2026

Elasticsearch + AI-агент: автоматизация поиска, аналитики и прогнозирования трендов без единой строчки кода

27 июля 2026

Криптовалюты и блокчейн: регулирование (SEC, FINMA, ESMA, FCA) — как не попасть под штрафы и построить карьеру в комплаенс

27 июля 2026

12 промтов для работы с LLM: Fine-tuning, RAG и промпт-инжиниринг

27 июля 2026