Giving C a superpower: custom header file (safe_c.h) 🔥 Горячее 💬 Длинная дискуссия
Автор создал заголовочный файл safe_c.h (600 строк), добавляющий в C современные средства безопасности из C++ и Rust, сохраняя при этом производительность и простоту языка. Этот файл используется для создания высокопроизводительного grep-клона cgrep, демонстрируя, как можно обуздать "опасные возможности" C. safe_c.h предоставляет семантику RAII через атрибуты [[cleanup]] с обратной совместимостью для старых компиляторов, а также умные указатели UniquePtr и SharedPtr для автоматического управления памятью.
Заголовочный файл включает макросы LIKELY/UNLIKELY для оптимизации ветвления и гарантирует очистку ресурсов даже при раннем возврате или goto. UniquePtr автоматически освобождает память при выходе из области видимости, устраняя утечки, а SharedPtr реализует автоматический подсчёт ссылок. Автор утверждает, что с помощью таких инструментов C остаётся языком свободы и гибкости, позволяющим писать безопасный код без потери производительности.
Комментарии (218)
- Обсуждение показало, что безопасность в C требует компромисов: либо платить за счёт производительности (POSIX-мьютексы), либо отказаться от переносимости кода.
- Участники спорят, стоит ли вообще пытаться эмулировать современные примитивы безопасности в C, или лучше просто использовать C++ там, где это возможно.
- Поднимается вопрос, что макросы и обёртки в C ведут к созданию "мини-языка" внутри проекта, что затрудняет понимание кода для новых участников команды.
- Обсуждается, что C++ уже реализовал всё, что пытаются эмулировать в C, и что это не избежно ведёт к "переизобретению велосипеда".
- Участники обсуждают, что встроенные в компилятор возможности C++ вроде
std::unique_ptrиstd::shared_ptrне только более безопасны, но и более производительны, чем попытки их эмулировать в C.
Titania Programming Language
Titania — экспериментальный язык от автора Odin.
Цель: максимум производительности, минимум «магии», ясный код.
Ключевые идеи
- Статическая типизация, компиляция «в ноль»
- Нет GC: ручной или автоматический RAII
- Процедурный, но с мощными шаблонами и compile-time вычислениями
- Прямая работа с SIMD, FFI, встраиваемый ASM
- Синтаксис: C-подобный, но короче; нет препроцессора
Статус
Публичный прототип, API меняется. Собирается LLVM или собственный бэкэнд.
Комментарии (42)
- Участники обсуждают язык Wirthwhile: критикуют обязательное объявление всех переменных в начале функции, но @munificent объясняет, что это упрощает однопроходную компиляцию.
- Появляются вопросы о мотивации создания ещё одного языка и его отличиях от Oberon-07; @khaledh напоминает, что автор — создатель Odin.
- Предлагаются экспериментальные синтаксические идеи: спец-символ «.» для перевода строки и отказ от println; сообщество отмечает конфликт с методами и контекстно-зависимость грамматики.