Язык D
Язык 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
- Walter Bright (автор языка)
- Andrei Alexandrescu aka andralex (главный соавтор языка и стандартной библиотеки)
- Jonathan M Davis aka jmdavis (один из ключевых контрибьюторов языка)
- Martin Nowak (один из ключевых контрибьюторов языка)
- Владимир Пантелеев aka CyberShadow (один из ключевых контрибьюторов языка)
- David Nadlinger aka klickverbot (разработчик LDC)
- Kai Nake aka redstar (разработчик LDC)
- Mike Parker aka Aldacron (автор Derelict и BindBC)
- Tomasz Stachowiak aka h3r3tic (автор compile-time трассировщика лучей)
Интересные проекты на D
Веб:
- Higgs — JIT-компилятор JavaScript
Системщина:
Игры:
- 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 — архив-контейнер для хранения файлов с нелатинскими именами.