Второму языку Си не бывать, а третьего не миновать
Oct. 9th, 2025 02:16 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Видели мы уже Си++, 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 стандартная библиотека минимальна, приходится писать всё вручную. |