Язык 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-разработчиков: planet.dsource.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 – архив-контейнер для хранения файлов с нелатинскими именами.