C3
- title
- C3
- type
- entity
- summary
- Системный язык Кристоффера Лерно в традициях C: бескомпромиссный преемник, пересматривающий настройки C по умолчанию
- tags
- language, systems-programming, blog
- created
- 2026-05-03
- updated
- 2026-05-03
- lang
- ru
- translation_of
- c3-lang
- source_updated
- 2026-05-03
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
C3 - системный язык в традициях C, спроектированный под руководством Кристоффера Лерно (Christoffer Lerno). Позиционируется как "альтернатива C", а не конкурент C++ или Rust: сохраняет ручную модель памяти и совместимость по ABI с C, но смело меняет настройки по умолчанию там, где процесс стандартизации C этого сделать не смог. Компилируется через LLVM, линкуется с C, умеет напрямую подключать заголовочные файлы C.
Чем выделяется
C3 попал в эту вики не из-за синтаксиса, а из-за готовности открыто пересматривать базовые решения C, когда те перестают себя оправдывать. Заметка "беззнаковые размеры были пятилетней ошибкой" - пример того, как обсуждение дизайна языка ведётся письменно и с открытым признанием собственных промахов.
Характерные проектные решения:
- Встроенные модули и срезы, нет препроцессора в понимании C.
- Макросы - отдельная гигиеническая система (префикс
@), а не текстовая подстановка. - Объединение optionals и ошибок - возвращаемые значения могут содержать типы "fault", а операторы
?и!отвечают за распространение ошибок. - Defer, как в Go и Zig.
- Контракты - аннотации предусловий и постусловий на уровне функций.
- Вычисления на этапе компиляции через префикс
$- аналог comptime в терминах zig, но лексически отделённый от рантайм-кода.
Переход на знаковые размеры
После пяти лет использования беззнаковых размеров по умолчанию в C3 0.8.0 (2026 год) подход изменили на противоположный. В ретроспективе (unsigned-sizes-c3-mistake) утверждается, что исходное соглашение, унаследованное от size_t в C, служит первопричиной целого класса известных ошибок с беззнаковыми типами, а эргономические заплатки до сути проблемы не добираются. В качестве языков, где это сделано правильно, приводятся Java и Go.
Знаковый тип размера переименовали из isz в sz, а для явно беззнакового оставили usz. Неявное приведение знаковых к беззнаковым и смешанные сравнения убрали.
Блог
Блог C3 на c3-lang.org/blog - площадка, где Лерно публикует обоснования проектных решений, ретроспективы и описания релизов. В отличие от большинства блогов о языках программирования, здесь не боятся публиковать статьи в духе "это решение по умолчанию было ошибкой".
Обработанные статьи
- unsigned-sizes-c3-mistake - заметка за май 2026 года о переходе на знаковые размеры по умолчанию
См. также
- zig - ещё один проект по переосмыслению C; отличается сохранением беззнаковых размеров и моделью метапрограммирования
- signed-vs-unsigned-sizes - концепция, для которой этот язык сейчас служит хрестоматийным примером
- type-systems-vocabulary - смежное пространство дискуссий о том, какими терминами создатели языков описывают типы
Внешние ссылки: c3-lang.org, github.com/c3lang/c3c