EnglishРусский Map

XS (xslang)

title
XS (xslang)
type
toolbox
summary
Язык с компилятором, JIT, LSP и всем тулчейном в одном бинарнике на 2.9 МБ с шестью бэкендами
tags
language, cross-platform, jit, single-binary, watchlist
language
C
license
unknown (verify before relying)
created
2026-05-21
updated
2026-05-21
lang
ru
translation_of
xslang
source_updated
2026-05-21
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

XS - язык программирования, чья главная идея - единый статически скомпонованный бинарник размером 2.9 МБ. Он содержит компилятор, language server, отладчик, форматтер, линтер, test runner, профайлер и пакетный менеджер, запускаясь без изменений на Linux, macOS, Windows, WASI, iOS, Android, ESP32 и Raspberry Pi. Один и тот же исходный код, шесть бэкендов, три цели транспиляции, никаких рантайм-зависимостей и 132 тысячи строк (KLOC) исходного кода на C (без учёта BearSSL).

Что заявляется

  • Шесть бэкендов исполнения из одного исходного кода:

    • xs --interp - древовидный интерпретатор (tree-walk) для REPL и отладки плагинов на уровне AST.
    • xs (по умолчанию) - байт-код VM, через которую идут обычные запуски.
    • xs --jit - JIT с распределением регистров для x86-64 и aarch64; опкоды вне поддерживаемого набора откатываются на VM.
    • xs --emit c - транспилятор в C, генерирующий самодостаточный исходный код для любого адекватного C-компилятора.
    • xs --emit js - транспилятор в JavaScript для Node или браузера; весит меньше сборки WASM, если нужна только одна программа.
    • xs.wasm - WASM-сборка самого компилятора с виртуальной файловой системой, позволяющая исполнять любую программу на XS прямо в браузере в рантайме.
  • Бенчмарки (холодный запуск с диска, лучший из трёх прогонов, Linux x86-64):

    • Старт hello-world: 3 мс.
    • fib(30): xs --jit 31 мс, VM 138 мс, node 20 ~62 мс, cpython 3.13 ~71 мс.
  • Оба инсталлятора (sh для macOS/Linux, пайп через irm для Windows) перед запуском сверяют релиз на GitHub с опубликованными суммами SHA-256.

Пример синтаксиса

{- classic recursive fib, memoised -}
@memoize fn fib(n) {
    if n < 2 { return n }
    return fib(n - 1) + fib(n - 2)
}

println(fib(30))   -- 832040

Фигурные скобки, блочные комментарии в стиле Haskell {- ... -}, декораторы (@memoize), if как выражение с неявными возвратами.

Почему это примечательно

Такой набор заявлений в одном проекте встречается редко. Мультиплатформенные языки в одном бинарнике есть (Tcl, встраиваемые движки JavaScript), динамические языки с JIT есть (Lua/LuaJIT, V8, SpiderMonkey), встроенный в компилятор language server встречается в современных проектах (Zig, Crystal). Но упаковка всего тулчейна - включая JIT и LSP - в один бинарник на 2.9 МБ, который нацелен и на ESP32, и на macOS, заслуживает внимания.

Для такого охвата 132 KLOC на C - это относительно компактный компилятор. Для сравнения: Lua - это ~30 KLOC на C, V8 - миллионы строк, компилятор Zig - ~250 KLOC на Zig.

Watchlist

Добавлено в watchlist - проект одного автора со скромной публичной историей на момент добавления. Что проверить через 90 дней:

  • Реальное использование: пишет ли на нём кто-то, кроме автора?
  • Подтверждаются ли заявления про iOS/Android/ESP32 на практике (мобильные платформы и микроконтроллеры часто несут с собой оговорки по части ABI и рантайма).
  • Ситуация с лицензией - на сайте это не указано явно, а язык категории "используй везде" без понятной лицензии закрывает путь к серьёзному внедрению.

Место в контексте

Соседствует с ryelang-blog / rye-lang (встраиваемый язык с компактным бинарником, построенный вокруг явных белых списков возможностей) и zig (ориентир среди кроссплатформенных системных языков). Каждый по-своему решает задачу сочетания кроссплатформенности и единого бинарника. XS делает ставку на куда более масштабную комплектацию (всё в одном бинарнике), чем Rye, и использует более привычный синтаксис, чем Zig.

Сайт: xslang.org - версия 1.2.32 на момент добавления.