Язык D (dlang) — системный статически типизированный язык программирования семейства фигурных скобок. Идейно схож с C и C++, но включает также функциональность родом из более высокоуровневых языков — таких, как Java, C#, Python и Ruby. Язык располагает мощным (но при этом необязательным) рантаймом, в нем есть автоматическое управление памятью, встроенные динамические и ассоциативные массивы, инструменты метапрограммирования, средства юнит-тестирования, профайлинга и статической интроспекции. Программы на D компилируются в машинный код. Стандартная библиотека D содержит богатый набор инструментов для обработки данных, работы с файлами, для создания многопоточных и сетевых приложений и многое другое. D доступен в нескольких реализациях, есть компиляторы для Windows, Linux и macOS, развивается поддержка ARM, iOS, Android, WebAssembly.

D начался как личный проект Уолтера Брайта, известного американского специалиста с многолетним опытом разработки компиляторов. В частности, он является автором первого нативного компилятора C++, а также компилятора Symantec C++ (ныне Digital Mars C++). Впоследствии к проекту примкнули другие именитые разработчики, в числе которых сам Андрей Александреску.

Программы на D легко писать и читать, они компактны и красивы. В отличие от других современных языков, D не изобретает велосипед, не навязывает программисту новую идеологию, не меняет сложившуюся парадигму разработки нативных приложений. Синтаксис D схож с синтаксисом C++, C# и Java — это облегчает его изучение для тех, кто знаком с этими языками. При этом выучить D и писать на нем качественные безопасные приложения, по сравнению с C++, не в пример легче. На D одинаково удобно писать в процедурном, объектно-ориентированном и функциональном стилях. Кроме того, на D очень легко портировать готовый код с любого из языков семейства фигурных скобок. Программы на D могут напрямую связываться с библиотеками C, есть также частичная поддержка библиотек C++, а также COM-интерфейсов под Windows.

D очень легко установить. В отличие от C# и Java, вам не понадобится устанавливать IDE, какие-либо системные компоненты, рантаймы и другие зависимости — достаточно добавить путь к тулчейну в переменную PATH, открыть терминал, текстовый редактор и начать работать.

D одинаково хорошо подходит для создания

  • консольных утилит и скриптов (есть возможность выполнять D-код напрямую, без предварительной компиляции);
  • бэкендов веб-приложений (есть веб-фреймворк и поддержка различных СУБД); 
  • игр и мультимедийных программ (real-time производительность, прямой доступ к OpenGL, DirectX и Vulkan, поддержка SSE);
  • GUI-приложений (есть привязки к различным графическим тулкитам с C-интерфейсом, в том числе Gtk+ и Tcl/Tk, а также враппер Qt и ряд нативных тулкитов);
  • драйверов и операционных систем (на D можно писать на уровне C — язык предоставляет прямой доступ к памяти, располагает близкой к железу системой типов, имеет встроенный ассемблер, а также специальное подмножество betterC без зависимости от рантайма).

Основные компиляторы D:

  • DigitalMars D Compiler (DMD) — официальный компилятор от создателей D. Является референсной реализацией языка — генерирует не самый быстрый код, но в нем всегда самые свежие фичи. DMD стабилен, хорошо поддерживает все основные десктопные платформы (Windows, Linux, macOS, FreeBSD), поддерживает как 32-, так и 64-битные системы.
  • LLVM D Compiler (LDC) — компилятор на основе фреймворка LLVM, что одновременно позволяет ему генерировать оптимизированный код и быть переносимым под самые разные платформы. Так, с LDC уже возможна компиляция D под ARM и iOS, а также (экспериментально) в Web Assembly. Windows и Unix-системы также поддерживаются в полной мере. Релизы LDC слегка отстают от DMD, но только на одну-две минорные версии.
  • GNU D Compiler (GDC) — компилятор на основе бэкенда GCC. Генерирует очень быстрый код, существует в вариантах для Windows, Linux и ARM с полноценной поддержкой 64-битных систем. По релизам, к сожалению, довольно сильно отстает от DMD.

Если вы затрудняетесь с выбором компилятора, советую начать с DMD, а затем перейти на LDC, если вас интересует производительность, либо на GDC, если вы работаете с Linux и GNU-тулчейном. Например, для создания небольших консольных утилит, нетребовательных к производительности, идеально подойдет DMD. Для игр и других ресурсоемких приложений лучше выбрать LDC, а для системной разработки — GDC. Я для своих проектов использую LDC.

Ссылки

  • Сайт языка: dlang.org
  • Вики по языку: wiki.dlang.org
  • Сайт компании DigitalMars: digitalmars.com
  • D-проекты на GitHub
  • Реестр пакетов: code.dlang.org
  • Англоязычный канал D Code Club в Discord
  • Русскоязычный сайт D: dlang.ru
  • Группа D ВКонтакте: vk.com/vk_dlang
  • Паблик новостей по D ВКонтакте: vk.com/dlang.news
  • Русскоязычный чат в Telegram: t.me/dlangru
  • Русскоязычная Jabber-конференция: d@conference.jabber.ru 
  • Раздел по D на КиберФоруме: www.cyberforum.ru/d
  • Статьи по D на Хабре: habr.com/hub/d
  • Сайт-блог LightHouse Software, где публикуются статьи по D
  • Также в разное время существовали порталы dprogramming.ru, lang-d.tk и ddevel.org, но, к сожалению, их жизнь была недолгой.

Известные личности в мире D

Интересные проекты на D

Веб:

  • Higgs — JIT-компилятор JavaScript

Системщина:

  • PowerNex — ядро операционной системы для x86_64
  • Vitis — семантическая файловая система для Linux

Игры:

  • DagoBan — клон Sokoban с хардкорно-сложными уровнями и встроенным редактором.
  • sacengine — свободная реализация движка игры Sacrifice.
  • Spectral Robot Task Force — трехмерная пошаговая стратегия в стиле X-COM и Fire Emblem о войне роботов со звероподобными монстрами. Разработана на движке Dash.
  • Mayhem Intergalactic — пошаговая стратегическая игра на космическую тематику. Необходимо управлять армиями космических кораблей для захвата вражеских территорий. Победитель конкурса инди-игр Independent Game Festival 2008.
  • Empire — классическая Empire, одна из первых стратегических игр в истории (первая версия была создана еще в 1977 г.) портирована на D! Кстати, автор Empire — тоже Уолтер Брайт.
  • Wormhol — трехмерный вариант игры «Змейка» для нескольких игроков. 
  • Laser Patriarch — игра для Ludum Dare 36, графический «рогалик» со случайно генерируемой картой.

Наука:

  • Mir GLAS — библиотека линейной алгебры, по тестам обгоняющая OpenBLAS.
  • BioD — фреймворк для написания приложений биоинформатики.
  • RIP — библиотека научного анализа и обработки изображений.

Библиотеки, фреймворки, тулкиты:

  • DUB — стандартный сборщик и пакетный менеджер для D, похожий на NPM для Node.js (входит в официальный дистрибутив компилятора, отдельно скачивать не нужно).
  • Dlang UI — нативный кроссплатформенный GUI-тулкит.
  • GtkD — тулкит для разработки графических приложений на D с использованием популярной библиотеки GTK+. GtkD включает прямой интерфейс к C-функциям GTK+, а также удобную и мощную объектно-ориентированную обертку над ними.
  • Vibe.d — быстрый и мощный веб-фреймворк.
  • BindBC — «джентльменский набор» разработчика игр: коллекция биндингов к мультимедийным библиотекам. На момент написания этого текста включает привязки к OpenGL, OpenAL, SDL, GLFW, FreeImage, FreeType, Lua.
  • Visual D — проект по интеграции D в среду разработки Microsoft Visual Studio.
  • Mono-D — аналогично для MonoDevelop.
  • DDT — для Eclipse.

Полезные инструменты:

  • Compiler Explorer — интерактивный компилятор на основе GDC с мгновенным выводом ассемблерного листинга.
  • DPLDocs — онлайн-генератор документации для D-проектов. Использует язык разметки Adrdox, являющийся надмножеством Ddoc.

Мои проекты на D:

  • dlib — коллекция библиотек для создания игр и игровых движков, мультимедийных и научно-инженерных приложений.
  • Dagon — фреймворк для разработки 3D-игр c рендером на основе OpenGL 4.0
  • BindBC-SoLoud — биндинг к звуковому движку SoLoud
  • BindBC-Newton — биндинг к физическому движку Newton Dynamics
  • BindBC-wgpu — биндинг к графическому API WebGPU
  • BindBC-OpenCL — биндинг к вычислительному API OpenCL
  • GScript2 — второе поколение моего скриптового языка GScript
  • Resolve — утилита для разрешения зависимостей проекта в локальные git-репозитории для удобной разработки и отладки
  • Box — архив-контейнер для хранения файлов с нелатинскими именами.