Видели мы уже Си++, 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 стандартная библиотека минимальна, приходится писать всё вручную. |

no subject
Date: 2025-10-09 21:44 (UTC)http://c2lang.org/
no subject
Date: 2025-10-09 21:45 (UTC)no subject
Date: 2025-10-09 21:49 (UTC)А вот через некоторое время C2 тоже проснулся, и теперь у нас и C2 и C3, в активном развитии.
no subject
Date: 2025-10-09 21:59 (UTC)no subject
Date: 2025-10-09 21:50 (UTC)no subject
Date: 2025-10-09 22:03 (UTC)no subject
Date: 2025-10-09 22:07 (UTC)no subject
Date: 2025-10-10 02:06 (UTC)no subject
Date: 2025-10-10 17:46 (UTC)no subject
Date: 2025-10-09 22:27 (UTC)Особенно при использованием слайсов.
Смарт указатели со счётчиками? Сборка мусора?
no subject
Date: 2025-10-09 22:50 (UTC)no subject
Date: 2025-10-10 01:08 (UTC)no subject
Date: 2025-10-10 01:12 (UTC)no subject
Date: 2025-10-10 02:30 (UTC)no subject
Date: 2025-10-10 04:37 (UTC)А вот besmtool.c смог, но результат такой, что лучше не надо. 😀
no subject
Date: 2025-10-10 04:50 (UTC)Вот именно. Как говорили лет 20-25 назад, imagine a
Beowulf clusterBillion lines of these.а третьего не миновать
Date: 2025-10-10 03:32 (UTC)Очень сильно пахнет индусскими рацухами, типа записи сравнений справа налево, чтобы ошибки с "=" и "==" ловить.
Не, не климатит ...
P.S.
"В C часто встречаются ошибки из‑за неинициализированной памяти" -- вот, прямо таки C в этом виноват, а не собственные кривые руки ...
Лентяи и халтурщики :)