Язык D, предложенный фирмой Digital Mars, представляет собой развитие C++, дополненное идеями из более молодых языков - таких, как Java, C#, Python и Ruby. Язык располагает мощным рантаймом, в нем есть автоматическое управление памятью, встроенные динамические и ассоциативные массивы, средства unit-тестирования, профайлинга и статической интроспекции. D компилируется в машинный код - производительность программ на нем практически не уступает C++. Стандартная библиотека D содержит богатый набор инструментов для обработки данных, работы с файлами, для создания многопоточных и сетевых приложений и многое другое. D доступен в нескольких реализациях, есть компиляторы для Windows, Linux и macOS.
D изначально был разработан как личный проект Уолтера Брайта, американского специалиста с многолетним опытом создания компиляторов. В частности, он является автором первого нативного компилятора C++, а также компилятора Symantec C++ (ныне Digital Mars C++). Впоследствии к проекту примкнули другие именитые разработчики, в числе которых сам Андрей Александреску. D активно развивается и обновляется, с каждым днем растет число программистов на нем.
D не навязывает программисту какую-либо идеологию или парадигму, не привязывает программиста к какой-либо среде или платформе, не "тянет" с собой большой динамический рантайм и другие зависимости. Программы на D легко писать и читать, они компактны и в большинстве случаев близки к псевдокоду. На D можно писать в процедурном, объектно-ориентированном и функциональном стиле. Синтаксис D схож с синтаксисом C++, C# и Java - это облегчает его изучение для тех, кто знаком с этими языками. Кроме того, на D очень легко портировать готовый код с любого из языков семейства фигурных скобок. Программы на D могут напрямую связываться с библиотеками C.
D одинаково хорошо подходит для создания
- консольных утилит и скриптов (есть возможность выполнять D-код напрямую, без предварительной компиляции);
- веб-приложений (есть веб-фреймворк и поддержка различных БД);
- игр и мультимедийных программ (высокая производительность, прямой доступ к OpenGL и DirectX, поддержка SSE);
- GUI-приложений (есть привязки к различным тулкитам с C-интерфейсом, в том числе Gtk+ и Tcl/Tk, а также враппер Qt и ряд нативных тулкитов);
- драйверов и операционных систем (на D можно писать на уровне C - язык предоставляет прямой доступ к памяти, располагает близкой к "железу" системой типов, имеет встроенный ассемблер, а также специальное подмножество betterC для компиляции без рантайма).
- 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, если вас интересует производительность или платформы, отличные от x86, либо на GDC, если вы работаете с Linux и GNU-тулчейном. Например, для создания небольших консольных утилит или графических программ, нетребовательных к производительности, идеально подойдет DMD. Для игр и других ресурсоемких приложений лучше выбрать LDC, а для системного программирования и создания ядер операционных систем - GDC.
Ссылки
- Сайт языка: dlang.org
- Вики по языку: wiki.dlang.org
- Сайт компании DigitalMars: digitalmars.com
- D-проекты на GitHub
- Реестр пакетов: code.dlang.org
- Википроект, посвященный D: www.prowiki.org/wiki4d
- Агрегатор блогов D-разработчиков: planet.dsource.org
- Англоязычный канал D Code Club в Discord
- Русскоязычный сайт D: dlang.ru
- Группа D ВКонтакте: vk.com/vk_dlang
- Паблик новостей по D ВКонтакте: vk.com/dlang.news
- Русскоязычная Jabber-конференция: d@conference.jabber.ru
- Раздел по D на КиберФоруме: www.cyberforum.ru/d
- Статьи по D на Хабре: habr.com/hub/d
- Сайт-блог LightHouse Software, где публикуются статьи по D
- Мой небольшой сайт, посвященный D: sites.google.com/site/dlangprogramming
- Также в разное время существовали порталы dprogramming.ru, lang-d.tk и ddevel.org, но, к сожалению, их жизнь была недолгой.
Известные разработчики и личности в мире D
- Walter Bright (автор языка)
- Andrei Alexandrescu (главный соавтор языка и стандартной библиотеки)
- David Nadlinger (наряду с Kai Nake, основной разработчик проекта LDC)
- Mike Parker aka Aldacron (автор Derelict)
- LightHouse Software
- h3r3tic
- Владимир Пантелеев
- David Simcha
- Benjamin Thaut
- Deadalnix
- John Colvin
- Martin Nowak
- Gary Willoughby
- Jesse Philips
Интересные проекты на D
Веб:
- Higgs - JIT-компилятор JavaScript
Игры:
- 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, графический "рогалик" со случайно генерируемой картой.
- Eilmer - симулятор динамики сжимаемых газов.
- Mir GLAS - библиотека линейной алгебры, по тестам обгоняющая OpenBLAS.
- BioD - фреймворк для написания приложений биоинформатики.
- RIP - библиотека научного анализа и обработки изображений.
- DUB - стандартная система сборки и пакетный менеджер для D (теперь DUB входит в официальный дистрибутив компилятора, так что отдельно скачивать его не нужно).
- Dlang UI - нативный кроссплатформенный GUI-тулкит.
- GtkD - тулкит для разработки графических приложений на D с использованием популярной библиотеки GTK+. GtkD включает прямой интерфейс к C-функциям GTK+, а также удобную и мощную объектно-ориентированную обертку над ними.
- Vibe.d - быстрый и мощный веб-фреймворк.
- Derelict - "джентльменский набор" разработчика игр: коллекция привязок к мультимедийным библиотекам (OpenGL, OpenAL, SDL, ODE, DevIL, FreeType, OGG/Vorbis и т.д.). Поддерживает все версии OpenGL, включая 3.1, 3.2, 3.3 и 4.0.
- BindBC - аналог Derelict, не использующий сборщик мусора, конкатенацию строк, классы и исключения. На момент написания этого текста включает привязки к OpenGL, OpenAL, SDL, GLFW, FreeImage, FreeType.
- Visual D - проект по интеграции D в среду разработки Microsoft Visual Studio.
- Mono-D - аналогично для MonoDevelop.
- DDT - для Eclipse.
- Compiler Explorer - интерактивный компилятор на основе GDC с мгновенным выводом ассемблерного листинга.
- Travis D Compilers - автогенерируемая таблица со всеми компиляторами D, которые на данный момент поддерживаются Travis CI.
- DPLDocs - онлайн-генератор документации для D-проектов. Использует язык разметки Adrdox, являющийся надмножеством Ddoc.
- dlib - коллекция библиотек для создания игровых движков, а также мультимедийных и научно-инженерных приложений.
- Dagon - фреймворк для разработки 3D-игр c графическим движком на базе OpenGL 4.0.
- dmech - физический движок, симулятор динамики твердых тел.
- Box - архив-контейнер для хранения файлов с нелатинскими именами.
Обратите внимание D lang-у можно помочь...https://www.bountysource.com/trackers/383571-d-programming-language
ОтветитьУдалитьЗдравствуйте, Какое у вас впечатление от этого языка? Какие недостатки встречали при написании кода? Чем он лучше по сравнению с c++?
ОтветитьУдалитьНедостаток у D, по сути, только один - привязка некоторых встроенных фич к сборщику мусора. Поначалу в языке мне нравилось абсолютно все, но потом я решил вручную выделять и высвобождать память, и оказалось, что это не так просто. Пришлось, например, написать свои контейнеры. Сейчас я пишу, по сути, на некоем подмножестве D, где не используются ассоциативные массивы, замыкания и т.д. В принципе, пока доволен. У D очень богатые возможности метапрограммирования, при помощи шаблонов можно обеспечить любой нужный уровень абстракции. Где требуется, можно писать на уровне C, а где-то - как в скриптовых языках. Основные преимущества перед C++, как мне кажется - это именно шаблоны, а также диапазоны как часть языка. Ну и скорость компиляции, само собой.
УдалитьЕще на D есть Derelict, прямого аналога которому на C++ я не знаю - очень удобный фреймворк для динамической линковки, создавать биндинги одно удовольствие. OpenGL любой версии, расширения - все из коробки. Повторюсь, может быть, на C++ тоже что-то такое написали, я не в курсе.
Здравствуйте, спасибо за ответ, ещё есть вопрос про concurrency(модель message passing): если использовали, были ли какие-то проблемы при использовании?
УдалитьВот message passing не использовал, как-то не приходилось активно работать с многопоточностью.
УдалитьДоброго времени суток! У вас написано следующее:
ОтветитьУдалить>> прямой доступ к OpenGL и DirectX
Однако, где ни погуглю, везде пишут про derelict. Подскажите, где поискать про прямой доступ к OpenGL
Здравствуйте! Извините за поздний ответ - только сейчас заметил комментарий. Derelict - это и есть прямой биндинг (привязка) OpenGL. Он упрощает динамическую линковку OpenGL, позволяя выбрать нужную версию в рантайме. Сами функции вызываются напрямую, без дополнительных слоев абстракции.
УдалитьВообще Derelict - это биндинг-фреймворк. Он поддерживает не только OpenGL, но и много других библиотек, так что это очень полезная штука. Можно на его основе создавать свои биндинги.
Здравствуйте. Подскажите как попробовать Dagon.
ОтветитьУдалитьПри компиляции учебного примера Dagon выдаёт ошибку - "Error: Nuklear library is not found. Please, install Nuklear.". Компиляция в Linux через dub.
Решил собрать nuklear сам - библиотека собралась. Скачал Dagon и nuklear и собрал их по отдельности в директории проекта libs.
Указал зависимости так (согласно путей):
"dependencies": {
"dagon": {"path": "./libs/dagon-master/"},
"nukleard": {"path": "./libs/nukleard-master/"}
}
При компиляции всё равно выдает: "Error: Nuklear library is not found. Please, install Nuklear."
Как можно решить данную проблему?
Нашел библиотеку bindingc-nuclear - статически собрать не получилось.
УдалитьПроект Dagon компиллируется - но требует динамических библиотек nuklear при запуске.
На github официального nuklear написано, что компиляция идет привязкой кода nuclear к коду проекта (без создания библиотек).
В пакетах AltLinux самой nuklear нет.
Буду пробовать создать библиотеки загрузкой кода в CodeBlocks и последующей компилляцией (не факт, что заработает).
Нужно установить Nuklear в систему. Проверьте, нет ли готового пакета в системных репозиториях. Если нет, то остается только собирать из исходников.
УдалитьНо я к очередному релизу планирую сделать Nuklear отключаемым на этапе компиляции, так что все, кроме SDL и OpenGL, станет необязательным.
Теперь можно отключить привязку к Nuklear при помощи субконфигурации "NoNuklear" в dub.json:
Удалить"subConfigurations": {
"dagon": "NoNuklear"
}