EnglishРусский Map

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

Sub-pages