14864
Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика Связь: @devmangx РКН: https://clck.ru/3Foc4d
Основы разработки компиляторов в формате конспектов лекций:
https://www.cs.cornell.edu/courses/cs4120/2026sp/notes/
👉 @Cpportal
Разбор абстрактного синтаксического дерева — AST — с примером на C:
https://t.co/QSYzFju5mJ
👉 @Cpportal
Стив Борн не любил C. Оболочка Bourne shell из Unix V7 написана на C, но из-за макросов код выглядит как Algol 68.
👉 @Cpportal
9 месяцев назад автор выложил демо, в котором его движок (Kaigen) оказался в 17 раз быстрее Unity ECS в браузере.
На него обрушилось много хейта: выяснилось, что тогда Unity не поддерживала Burst в браузере.
Теперь поддерживает. Так что время для реванша:
ECS: ~2 мс против ~9 мс.
Время на CPU: ~3 мс против ~28 мс.
Kaigen3D по-прежнему быстрее в 4,2–8,7 раза.
Ссылка на демо — можно запустить и Unity, и Kaigen.
https://kaigen3d.com/demos/boids/
Исходный код демо на Kaigen:
https://github.com/Kaigen-Technologies/kaigen-boids
Исходный код демо на Unity — форк репозитория Unity:
https://github.com/Kaigen-Technologies/EntityComponentSystemSamples
Керниган и Ритчи использовали этот пример, чтобы показать, насколько C «близок к железу».
Код копирует строку и останавливается на нулевом символе NUL, потому что само присваивание служит условием.
👉 @Cpportal
В C можно реализовать наследование с помощью одного простого правила: сделай родительскую структуру первым полем дочерней.
C гарантирует, что адрес структуры совпадает с адресом её первого поля, поэтому приведение указателей между ними работает.
👉 @Cpportal
Обязательно к прочтению, если интересуешься управлением памятью.
https://www.gingerbill.org/series/memory-allocation-strategies/
👉 @Cpportal
Если ещё не пробовали, стоит посмотреть на эту отличную визуализацию конвейера, построенную на реальных данных Intel. Она помогает оценить задержку и пропускную способность.
https://uica.uops.info
Видео, как обычно, сделал Opus 5.5.
👉 @Cpportal
В этой статье разбирается страничная организация памяти — широко распространённая схема управления памятью, которую мы также будем использовать в своей операционной системе.
Объясняется, зачем нужна изоляция памяти, как работает сегментация, что такое виртуальная память и как страничная организация решает проблемы фрагментации памяти. Также рассматривается устройство многоуровневых таблиц страниц в архитектуре x86_64.
https://os.phil-opp.com/paging-introduction/
👉 @Cpportal
Parallel C++ — параллельное программирование на C++
Учебник посвящён практическому параллельному программированию на C++ на уровне магистратуры и аспирантуры. В нём рассматриваются API и связанные с ними возможности языка из стандартов C++17 и C++20 — как для систем с одним вычислительным узлом, так и для распределённых систем.
Учебник показывает, что благодаря средствам параллельного программирования в C++17 и C++20 изучать метаязыки вроде OpenMP больше не обязательно.
С помощью HPX, библиотеки C++ для параллелизма и конкурентного выполнения, те же возможности языка можно распространить на распределённый код. Это даёт более высокоуровневый интерфейс C++ для распределённого программирования, чем MPI — интерфейс передачи сообщений.
https://github.com/TheHPXProject/hpx
👉 @Cpportal
Разработчик, который годами писал на C и C++ в Microsoft и Google, спроектировал сотни систем и провёл тысячи код-ревью, описал проблему Claude Code, с которой столкнулся на практике.
Плохой код он чувствуюет примерно так же, как некоторые чувствуют запах дыма.
В первую неделю с Claude ему казалось, что он просто взломал систему. Фичи выкатывались, все проверки проходили, и он впервые начал рано ложиться спать.
А потом каждый исправленный баг начал порождать ещё два. Работа резко замедлилась.
Правишь checkout — ломается биллинг. Чинишь биллинг — отваливаются уведомления. "Быстро поменять одно поле" — и уже развалились три модуля.
Это всё тот же спагетти-код, который лентяи-разработчики писали годами. Просто Claude пишет его в 200 раз быстрее.
Anthropic обучила гения на свалке из Stack Overflow и корпоративной Java-разработки и назвала это полезным ассистентом.
Обращение через цепочки объектов. Чрезмерный DRY. Хуки "на будущее". Деревья наследования. Один файл делает пять разных вещей. God functions.
Решение существует ещё с 1994 года.
Просто вставьте это в AGENTS.md:
# Вечные ограничения, а не чек-лист
Если два принципа конфликтуют, выбирай тот, который сильнее снижает будущую стоимость изменений ИМЕННО в этой кодовой базе.
ЖЁСТКОЕ ПРАВИЛО: сначала отрефактори код под принцип, и только потом меняй поведение.
1. Separation of Concerns — одна категория работы на одну часть системы: UI / domain / persistence / infra. Базовый принцип.
2. Encapsulation / Information Hiding — небольшой стабильный контракт, внутренности скрыты.
3. High Cohesion + Loose Coupling — то, что меняется вместе, должно жить вместе; независимые части общаются через узкие интерфейсы.
4. DRY — одно авторитетное представление для каждого знания, а не для каждой похожей строки. Не переусердствуй с DRY.
5. KISS — самая простая архитектура, которая работает. Сложность — это долгосрочный налог.
6. Single Responsibility — одна причина для изменения.
7. Depend on Abstractions — политика не зависит от деталей; и то и другое зависит от контрактов.
8. YAGNI — никаких спекулятивных фич, фреймворков и хуков «на потом».
9. Composition over Inheritance — собирай систему из компонентов, а не выращивай хрупкие иерархии.
10. Open/Closed, но с дисциплиной — расширяй систему через стабильные границы и только там, где одно и то же изменение уже понадобилось дважды.
Также полезно: Law of Demeter · fail fast / illegal states unrepresentable · optimize for deletion · Unix-принцип «делай одну вещь и хорошо» + композиция.
Относись к этому как к ограничениям. Если здравый смысл требует нарушить лозунг — нарушай.
Уже видели интерактивное объяснение Transformer?
Очень крутая визуализация того, как работает архитектура.
https://poloclub.github.io/transformer-explainer/
👉 @Cpportal
Кто-то попытался протащить в OpenBSD клоны GNU CoreUtils, переписанные на Rust
Тео де Раадт, руководитель OpenBSD, идею не оценил.
А его ответы были... занятными.
"Пахнет продвижением повестки."
"А, потому что это написано на Rust. Ваша повестка уже слишком заметна."
"В этом нет никакого смысла. Никому не нужны бинарники, которые ведут себя чуть иначе, как часть привычного воркфлоу... В этой вселенной нет людей, которые захотят заменить один ls на другой ls, а потом удивляться конфликтам из-за нестандартизированного поведения инструментов."
Напишите минимальное ядро ОС с нуля.
Начните с загрузчика и постепенно дойдите до рабочего ядра операционной системы, запущенного в защищённом режиме.
Проект показывает, что на самом деле происходит между загрузчиком и main().
https://www.lowlevelcraft.com/capstone/minimal-os-kernel
👉 @Cpportal
В 2000 году программист обнаружил, что корутины в C можно реализовать с помощью того же трюка со switch, что используется в Duff’s Device.
Этот приём получил название Tatham’s Coroutine и использовался в PuTTY.
Сам Саймон Тэтэм назвал его «худшим хаком на C», который ему доводилось видеть в продакшене.
👉 @Cpportal
CS 6120: «Продвинутые компиляторы» — онлайн-курс Корнеллского университета для самостоятельного изучения.
https://www.cs.cornell.edu/courses/cs6120/
👉 @Cpportal
C++:
«Ты можешь делать что угодно»
Rust:
«Ты можешь делать что угодно»
«Но сначала объясни почему»
👉 @Cpportal
Триграфы добавили, чтобы код на C можно было писать на клавиатурах без символов #, { и }.
Это корректный код на C для стандартов от C89 до C17. В C23 триграфы убрали.
👉 @Cpportal
Возвращаемся к основам! Скопируем строку на C, а затем посмотрим, как это делается на ассемблере!
// Как скопировать строку на C и ассемблере:
// На C:
while ((*dst++ = *src++))
;
; R0 = src, R1 = dst
10$: MOVB (R0)+,(R1)+
BNE 10$
REP MOVSB, если бы длина строки была известна. Но она неизвестна, поэтому:; RSI = src, RDI = dst, флаг направления сброшен
copy:
lodsb ; AL = *src++
stosb ; *dst++ = AL
test al, al
jnz copy
Кажется, для SHA-3 должна понадобиться огромная криптографическая библиотека.
Но эта реализация умещается примерно в 120 строк C.
Вся перестановка Keccak-f[1600] развёрнута с помощью макросов.
Только C, битовые операции и состояние размером 200 байт.
👉 @Cpportal
Как виртуальная память влияет на задержки — статья Эрика Ригторпа.
https://rigtorp.se/virtual-memory/
👉 @Cpportal
Давайте изучать ассемблер x86-64: практическая серия.
https://gpfault.net
👉 @Cpportal
В 2007 году один разработчик спросил, почему Git написан на C, а не на C++.
Линус Торвальдс ответил:
«ТЫ несёшь полную чушь».
«C++ — ужасный язык».
Он добавил, что уже одного желания держать C++-программистов подальше от проекта было бы достаточно, чтобы выбрать C.
👉 @Cpportal
Скорее всего, вы прямо сейчас используете SQLite и даже не знаете об этом.
Она лежит в основе всего — от вашего браузера до локального хранилища на телефоне.
Вот как эта маленькая, невероятно мощная база данных устроена внутри.
https://sqlite.org/arch.html
👉 @Cpportal
Компиляторы и то, как их создавать — подробный журнал, в котором разбираются все тонкости процесса.
https://github.com/DoctorWkt/acwj
👉 @Cpportal
C-движок наконец готов к полноценному использованию. Он называется Kaigen.
Первое демо — Minecraft Test.
kaigen отлично работает с ИИ. Главное отличие от Three.js в том, что готовый проект запускается на Windows, Mac, iPhone, Android и в браузере. Скоро добавят и VR.
И ещё он выдаёт больше 330 FPS на видеокарте шестилетнего ноутбука.
Ссылка на демо и код.
👉 @Cpportal
Если вы давно не заглядывали в дорожную карту Cornell «Understanding GPU Architecture», стоит посмотреть ещё раз.
Её обновили и добавили современные архитектуры для высокопроизводительных вычислений, включая NVIDIA Blackwell B200.
https://cvw.cac.cornell.edu/gpu-architecture
👉 @Cpportal
Портал в основы архитектуры GPU.
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/Archive/EECS-2016-143.pdf
👉 @Cpportal
Как только начинаешь визуализировать свои SQL-схемы вот так, назад пути уже нет.
sqltoerdiagram.com
👉 @Cpportal
Профессору Иллинойсского университета надоели существующие учебники по системному программированию, поэтому он начал писать Wikibook вместе со студентами.
В одной бесплатной книге собраны C, процессы, потоки, память, сети, файловые системы, планирование и безопасность.
https://github.com/cs341-illinois/coursebook
👉 @Cpportal