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 сознательно отказывается