2025-10-09

vak: (Знайка)
Видели мы уже Си++, D, Zig, а вот встречайте новый проект. Язык и компилятор С3: https://c3-lang.org/. Пока не такой развитый как Zig, но тоже представляет интерес. Работает на маке и Линуксе, на Windows я не пробовал.

Компилятор построен на основе LLVM: github.com/c3lang/c3c

Простейший пример:
module hello_world;
import std::io;

fn void main()
{
io::printn("Hello, world!");
}
Основные улучшения C3 по сравнению с обычным C:

Особенность / улучшение Что добавлено в C3 Зачем это нужно / какую проблему решает
Совместимость с ABI C Программы на C3 могут напрямую вызывать функции C и наоборот, без обёрток. Можно использовать существующие C‑библиотеки и постепенно переходить на C3.
Модульная система (namespaces) Код организуется в модули с контролем экспорта и изоляцией имён. В C всё глобально, имена часто конфликтуют, сложное управление зависимостями.
Дженерики (обобщённые модули) Код можно писать для разных типов данных без макросов. В C приходится копировать код или использовать сложные макросы.
Срезы и безопасные массивы Встроенные типы «срезов» (указатель + длина), безопасное индексирование, foreach. В C легко выйти за пределы массива и получить утечку или сбой.
Ошибки и опциональные типы Встроенные типы для ошибок (например, Result, Optional) без накладных расходов. В C обработка ошибок громоздкая и легко забыть проверить код возврата.
defer — автоматическая очистка ресурсов Можно указать действия, выполняемые при выходе из функции. В C приходится вручную дублировать код освобождения или писать goto cleanup.
Контракты (пред- и постусловия) Можно описывать логические условия, проверяемые в отладочном режиме. В C нет встроенных средств проверки инвариантов.
Семантические макросы и код во время компиляции Макросы понимают типы; можно выполнять код на этапе компиляции. В C макросы чисто текстовые, часто приводят к ошибкам.
SIMD и inline‑assembler первого класса Поддержка векторных типов и встроенного ассемблера на уровне языка. В C это делается через нестандартные расширения и платформозависимо.
«Zero‑is‑Initialization» (ZII) Нулевая инициализация создаёт корректное состояние объекта, где это имеет смысл. В C часто встречаются ошибки из‑за неинициализированной памяти.
Расширенная стандартная библиотека Есть готовые динамические массивы, хэш‑карты, строки и другие утилиты. В C стандартная библиотека минимальна, приходится писать всё вручную.