Видели мы уже Си++, D, Zig, а вот встречайте новый проект. Язык и компилятор С3: https://c3-lang.org/. Пока не такой развитый как Zig, но тоже представляет интерес. Работает на маке и Линуксе, на Windows я не пробовал.
Компилятор построен на основе LLVM: github.com/c3lang/c3c
Простейший пример:
Компилятор построен на основе LLVM: github.com/c3lang/c3c
Простейший пример:
Основные улучшения C3 по сравнению с обычным C:module hello_world;
import std::io;
fn void main()
{
io::printn("Hello, world!");
}
| Особенность / улучшение | Что добавлено в 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 стандартная библиотека минимальна, приходится писать всё вручную. |
