EnglishРусский Map

tc-lang (Tig)

title
tc-lang (Tig)
type
toolbox
summary
Минималистичный системный язык, транслируемый в читаемый C11, с fat pointer'ами, defer и ошибками
tags
language, systems-programming, c, transpiler, watchlist
language
C
license
MIT
created
2026-07-21
updated
2026-07-21
lang
ru
translation_of
tc-lang
source_updated
2026-07-21
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Tig (репозиторий называется tc-lang) - минималистичный системный язык от Alonso VM, транслируемый в переносимый C11. Основная идея - эргономика поверх C без необходимости платить за сборщик мусора, вывод типов или тяжёлый runtime: язык достаточно компактен, чтобы "поместиться в голове одного человека", и содержит 18 ключевых слов. Компилятор генерирует читаемый C-код, который затем передаётся в gcc или clang.

Находится в списке наблюдения - см. watchlist - так как это проект до версии 1.0 от одного автора с примерно 40 звёздами, нацеленный на применение на уровне ОС.

Как устроен

Транслятор source-to-source, около 4 600 строк кода на C: лексер, парсер, AST, checker, emitter, затем вывод C11 в системный компилятор. Здесь нет оптимизатора, промежуточного представления (IR) и вывода типов - генерация кода представляет собой, по сути, конкатенацию строк с читаемым C-кодом. Вся тяжёлая работа перекладывается на gcc/clang, благодаря чему сам компилятор остаётся небольшим и легко поддаётся аудиту.

Заявленный план раскрутки (bootstrap) состоит из двух этапов. Stage0 допускает C-ядро, сгенерированное ИИ (текущий транслятор). Stage1 - компилятор с самохостингом - требует рукописного кода: сгенерированный ИИ исходный код не допускается в зачёт самохостинга.

Особенности синтаксиса

Указатели представлены в двух вариантах: "сырые" (raw) указатели, записываемые как ->, и fat pointer'ы, записываемые как => (структура, содержащая .ptr + .len, со встроенным синтаксисом срезов вроде arr[1:3]). strun объединяет struct и union в единый спектр, используя & для обозначения полей с разделяемой памятью. defer выполняет очистку при выходе из области видимости. pin помечает привязку как неизменяемую внутри области видимости - это проверяется на этапе парсинга и не оставляет следов в сгенерированном C-коде.

Ошибки являются встроенным типом, а не соглашением о возвращаемых значениях. Объявление error содержит параметры контекста и логику очистки, возбуждается с помощью throw и обрабатывается через try/catch - где catch ведёт себя как match, включая подстановочный знак _. Диагностика выполнена в стиле Rust: цветной вывод с кодами ошибок.

Многопоточность не требует шаблонного кода. Функция async fn автоматически инициализирует runtime; асинхронные функции всегда имеют тип возврата void и общаются через встроенные каналы queue<T> / stack<T>. Конструкция select ожидает завершения нескольких операций, а @ передаёт владение. Предусмотрен глобальный режим горячей перезагрузки (-H/--hot), основанный на разделении Host/DLL: main остаётся в хост-процессе, а всё остальное компилируется в версионированную библиотеку hotlib_N.so/.dll, которая перезагружается через stub'ы с указателями на функции. Директива @use "lib.tc" встраивает другой файл во время компиляции, а C FFI оформляется блоком "C"{ #include ... }.

Использование

strun Point { x: i32; y: i32 }

fn main() -> i32 {
    nums => [1, 2, 3, 4]   // fat pointer / slice
    part = nums[1:3]       // built-in slicing
    defer cleanup()        // runs at scope exit
    return 0
}

Передача владения и каналы в асинхронном коде:

async fn worker(q: queue<i32>) {
    x = <- q               // receive
}

Ограничения

Явно не гарантирует безопасность памяти: нет borrow checker'а, нет GC, ручные alloc/free. Арены запланированы, но ещё не реализованы, поэтому сейчас управление памятью целиком лежит на программисте - тот же профиль рисков, что и в C, который к тому же не пытается маскироваться слоем безопасности вроде safe-gc или runtime-проверками в simplified-model-of-fil-c.

Ситуация с лицензией неоднозначна: в README есть значок MIT, но GitHub не находит в репозитории SPDX-файл лицензии, поэтому точные условия передачи прав неясны, пока не появится файл LICENSE. Цели проекта заявлены амбициозно - "первый пригодный к использованию системный язык из Мексики" и "написать на нём ОС" - при том, что кодовая база создаётся одним автором и пока не достигла версии 1.0.

Репозиторий

github.com/alonsovm44/tc-lang - C, MIT (согласно значку в README; файл лицензии SPDX не обнаружен GitHub'ом), ~40 звёзд.

Связанные страницы

  • zig - более зрелая замена C с той же позицией отказа от GC и скрытого runtime, но с полноценной проверкой типов и comptime
  • c3-lang - ещё одна минималистичная эволюция C, транслируемая близко к модели C
  • unsigned-sizes-c3-mistake - ретроспектива C3 по конкретному проектному решению, которую имеет смысл сопоставить с подходом Tig
  • safe-gc, simplified-model-of-fil-c - подходы к безопасности памяти, от которых Tig сознательно отказывается