Системное программирование на языке Dlang

Освойте BetterC — подмножество Dlang без GC и рантайма. Полная ABI-совместимость с C-библиотеками и системными вызовами, шаблоны, CTFE, LibMir и ручное управление памятью для highload и embedded-систем.
Средний уровень

Чему вы научитесь

  • - Работать в режиме BetterC: отключать тяжелый рантайм DRuntime и писать производительный системный код без сборщика мусора.
  • - Использовать объектно-ориентированное программирование без GC: эмулировать объектно-ориентированную архитектуру без GC с помощью экосистемы numem, управлять памятью используя nogc_new и nogc_delete.
  • - Применять концепцию RAII и защиту памяти: настраивать гарантированное уничтожение ресурсов через деструкторы структур и конструкции scope(exit), и др.
  • - Бесшовно интегрироваться с экосистемой Си.
  • - Многое другое в планах

О курсе

Вы устали от макросов Си, но не хотите мириться с тяжелым рантаймом C++? Добро пожаловать в BetterC!

Этот курс посвящен уникальному режиму компилятора языка D (Dlang) — betterC(далее BC). Мы предлагаем вам взглянуть на системное программирование по-новому: сохранив полный контроль над памятью и железом, вы получите доступ к мощным современным инструментам, которых так не хватает в обычном Си.

BC превосходит стандартный язык D с рантаймом в задачах, где критически важны минимальный размер бинарного файла, предсказуемость производительности и простота интеграции с существующим кодом на C.

Курс находится в активной разработке и обновляется каждую неделю. Мы пройдем последовательный путь от фундаментальных основ синтаксиса до продвинутых инженерных решений.

🌍 Кросс-компиляция «из коробки»

Связка LDC2 + Zig позволяет собрать статический бинарник под любую ОС без установки системных библиотек. Zig использует кастомный порт musl (единая libc для всех платформ), что даёт минимальные бинарники размером ~50-100 КБ. Один исходник → работает на Windows, Linux, macOS без зависимостей.

📊 Ключевые отличия BC от стандартного Dlang:

  • Сборщик мусора (GC): В стандартном D включен (вызывает паузы «stop-all»). В BC — полностью отключен.
  • Размер бинарника: В стандартном D весит от нескольких мегабайт. В BC — всего несколько килобайт (как в C).
  • Использование памяти: В стандартном D непредсказуемое из-за GC. В BC — строго контролируемое вручную.
  • Поддержка RAII: В стандартном D ограничена для классов. В BC — полная через деструкторы структур (struct).
  • Интеграция с C / WebAssembly: В стандартном D требует сложной инициализации рантайма. В BC — прямая, без накладных расходов.

⚡ Четыре столпа BC

Отсутствие сборщика мусора

  • Проблема: Стандартный GC может остановить выполнение программы в любой момент. Это недопустимо в системах реального времени (видеоигры, аудио-плагины, робототехника).
  • Решение BC: Память выделяется вручную (malloc/free) или автоматически на стеке. Вы получаете детерминированное время отклика без неожиданных пауз.

Минимальный размер выходных файлов

  • Проблема: Даже простая программа «Hello World» тащит за собой DRuntime и весит мегабайты.
  • Решение BC: Бинарный файл содержит только ваш код. Это делает BC идеальным выбором для микроконтроллеров (embedded систем), драйверов устройств и WebAssembly (Wasm).

Идеальная интеграция с экосистемой C

  • Проблема: Чтобы вызвать код на D из C, нужно предварительно настраивать рантайм D с помощью rt_init().
  • Решение BC: Код компилируется в стандартные объектные файлы, которые ведут себя в точности как код на C. Вы можете использовать BC как прямую, более безопасную замену C в существующих проектах, не меняя сборочную систему.

Безопасность без накладных расходов

В отличие от чистого C, в режиме BC вам остаются доступны лучшие защитные механизмы D:

  • Защита от переполнения буфера: Массивы знают свою длину и проверяют границы.
  • Контроль на этапе компиляции: Мощнейшие шаблоны, static if и вычисления во время компиляции (CTFE).
  • Управление ресурсами: Гарантированное уничтожение объектов через RAII (деструкторы структур) и конструкции scope(exit).

🛠️ Реальные проекты

Проекты numem и nulib от команды Inochi2D доказывают: выбирать между эргономикой кода и системными требованиями больше не нужно. Они буквально переворачивают традиционное представление о компромиссах:

  • ООП больше не проблема в NoGC: Вы можете использовать полноценные классы, интерфейсы и строки D, создавая их на куче через nogc_new и уничтожать через nogc_delete. Архитектура уровня C# или Java со скоростью чистого C!
  • Выброшенный druntime: Минималистичный рантайм nurt вообще без GC. Высокоуровневые конструкции D теперь работают там, где стандартный D просто не запустился бы.
  • Влияние на индустрию: Популярный аудио-фреймворк Dplug - создание музыкальных VST-плагинов, где малейшая задержка критична, официально перешел на numem для безопасного выделения памяти в реальном времени.

🧮 Быстрые вычисления с LibMir: NumPy на стероидах

Экосистема LibMir (mir-algorithm, mir-random, mir-ion) меняет представление о тяжелых вычислениях в режиме -betterC, работая в безопасных атрибутах @nogc, pure и nothrow.

  • mir.ndslice — без аллокаций: n-мерные слайсы — это zero-cost «окна» над любым куском памяти (стек, куча, Си-массивы). Срезы, транспонирование и изменение формы матриц происходят мгновенно, без копирования памяти.
  • Авто-векторизация (SIMD): Сложные математические выражения компилятор автоматически превращает в один цикл, выполняемый процессором через векторные инструкции.
  • mir-ion — Сверхскоростная сериализация: Фреймворк парсит JSON, YAML и CSV лениво, без аллокаций в куче, являясь одной из самых быстрых библиотек в мире.

⚡ Что мы разберем на курсе:

1. Базовый фундамент (Доступно сейчас)

  • Специфика компиляции и отличия от стандартного Dlang.
  • Базовые конструкции языка Dlang и их отличия от Си
  • Типы данных, управление потоком выполнения, функции и т.д.

2. Системные механизмы и метапрограммирование (В разработке)

  • Документирование кода средствами языка D.
  • Структуры данных и гарантированное уничтожение ресурсов через деструкторы (RAII, scope).
  • CTFE — скриптинг в процессе сборки. Пишите обычный Dlang-код, который выполняется во время компиляции и встраивает результат прямо в бинарник. Генерация таблиц, валидация конфигов, парсинг данных — всё это происходит до запуска программы, не добавляя ни байта в рантайм.

3. Низкоуровневый контроль (Финальный этап)

  • Динамическая память, ручные аллокаторы, malloc/free и работа без сборщика мусора (NoGC).
  • Введение в экосистемы Inochi2D (numem/nulib) для создания ООП-архитектуры без GC.
  • Быстрые n-мерные вычисления с помощью библиотеки LibMir (mir.ndslice).

Для кого этот курс

Системные программисты (C/C++). Embedded-разработчики. Backend-инженеры (Highload). Разработчики игр и графических движков. Энтузиасты Dlang

Начальные требования

  • Базовые знания языка Си: понимание указателей, структур данных, стека и кучи.
  • Опыт работы с терминалом: умение запустить компилятор и выполнить базовые команды.
  • Основы алгоритмов: циклы, условия, функции (синтаксис D похож на C-family, вы быстро освоитесь).
  • 📌 Примечание: Мы изучаем строгое подмножество языка D с нуля. Знать «стандартный» Dlang с его сборщиком мусора не требуется.

Наши преподаватели

Как проходит обучение

  • 📖 Теория без «воды»: Короткие и емкие уроки по BetterC с жестким фокусом на системное программирование.
  • 💻 Локальная разработка: Весь код вы пишете на своем компьютере. Никаких встроенных браузерных песочниц — только реальный компилятор и терминал.
  • 🛠️ Прозрачная сборка: Мы настроим легковесные ручные билд-системы. Вы увидите, как ваш бинарный файл собирается «изнутри», без скрытой магии тяжелых IDE.
  • 🏗️ Хардкорная практика: Основная работа идет в вашем любимом редакторе кода. Вы сами реализуете управление памятью, сокеты, графику на OpenGL и математику в LibMir
  • 🔍 Глубокий разбор кода: Мы детально анализируем архитектуру решений, чтобы вы могли сразу перенести эти паттерны в свои боевые проекты.
  • 💬 Инженерное комьюнити: Застряли на ошибке компиляции или сегфолте? Обсуждайте технические нюансы и детелизируйте логи сборки прямо в комментариях к урокам.

Программа курса

загружаем...

Что вы получаете

  • 🚀 Навык работы с современным стеком
  • 🧠 Полный контроль над памятью
  • ⚡ Магию метапрограммирования.
  • 📁 Готовые шаблоны билд-скриптов.
  • 🔗 Опыт бесшовной интеграции с Си.
  • 🎛️ Фундамент для low-level систем.
Price: Бесплатно

Расскажите о курсе друзьям

Price: Бесплатно