Язык D


Язык D, предложенный фирмой Digital Mars, представляет собой развитие C++, дополненное новыми идеями из современных интерпретируемых языков - таких, как Java, C#, Python и Ruby. Язык располагает мощным рантаймом, в нем есть автоматическое управление памятью, встроенные динамические и ассоциативные массивы,  средства unit-тестирования, профайлинга и статической интроспекции. Одновременно с этим, D компилируется в машинный код - производительность программ на нем практически не уступает C++. Стандартная библиотека D содержит богатый набор инструментов для обработки данных, работы с файлами, для создания многопоточных и сетевых приложений и многое другое. D доступен в нескольких реализациях, есть компиляторы для Windows, Linux и Mac OS X.

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 - язык предоставляет прямой доступ к памяти, располагает близкой к "железу" системой типов, в нем есть встроенный ассемблер).
Основные компиляторы D:
  • DigitalMars D Compiler (DMD) - официальный компилятор от создателей D. Является референсной (эталонной) реализацией языка - генерирует не самый быстрый код, но в нем всегда самые свежие фичи. DMD стабилен, работает "из коробки" на всех основных платформах (Windows, Linux, Mac OS X, FreeBSD), поддерживает как 32-, так и 64-битные системы.
  • LLVM D Compiler (LDC) - компилятор на основе фреймворка LLVM, что одновременно позволяет ему генерировать оптимизированный код и быть переносимым под самые разные платформы. Так, с LDC уже возможна компиляция D под ARM и iOS. Windows, Linux, Mac OS X также поддерживаются в полной мере. Релизы 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: dsource.org (законсервирован, большинство активных проектов переехало на GitHub)
  • Сайт с общей информацией по D на русском: https://dlangru.github.io
  • Википроект, посвященный D: www.prowiki.org/wiki4d
  • Агрегатор блогов D-разработчиков: planet.dsource.org
  • Группа D ВКонтакте: vk.com/vk_dlang
  • Русскоязычная Jabber-конференция: d@conference.jabber.ru 
  • Англоязычный чат по D в Telegram: https://telegram.me/joinchat/BeLaugMz35ZxQUq2fks4YQ
  • Русскоязычный: https://telegram.me/joinchat/AtK90wNnU7mm0gx7yKo82w 
  • Раздел по D на КиберФоруме: www.cyberforum.ru/d
  • Статьи по D на Хабрахабре: habrahabr.ru/hub/d
  • Сайт-блог LightHouse Software, где публикуются статьи по D
  • Сайт dlang.ru, раньше служивший главным русскоязычным коммьюнити, а теперь на нем хостится книга по D Дмитрия Бубненкова 
  • Мой небольшой сайт, посвященный D: sites.google.com/site/dlangprogramming
  • Также в разное время существовали порталы dprogramming.ru, lang-d.tk и ddevel.org, но, к сожалению, их жизнь была недолгой (DDevel, кстати, был настоящей социальной сетью для разработчиков с поддержкой блогов и сообществ). Будем надеяться, что отсутствие главного русского сайта по D - лишь временное явление.
Известные разработчики и личности в мире D:
Проекты на D

Игры, написанные на D:
  • 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, графический "рогалик" со случайно генерируемой картой.
В последнее время D часто используется учеными и инженерами. Вот только несколько самых известных научных проектов с использованием языка:
  • Eilmer - симулятор динамики сжимаемых газов.
  • Mir GLAS - библиотека линейной алгебры, по тестам обгоняющая OpenBLAS.
  • BioD - фреймворк для написания приложений биоинформатики.
  • RIP - библиотека научного анализа и обработки изображений.
Библиотеки, фреймворки и тулкиты:
  • DUB - стандартная система сборки и пакетный менеджер для D (теперь DUB входит в официальный дистрибутив компилятора, так что отдельно скачивать его не нужно).
  • 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.
  • Dash - самый популярный игровой движок на D (к сожалению, не развивается).
  • Visual D - проект по интеграции D в среду разработки Microsoft Visual Studio.
  • Mono-D - аналогично для MonoDevelop.
  • DDT - для Eclipse.
Полезные инструменты:
  • DPaste - онлайн-компилятор и pastebin-сервис. Поддерживает DMD и LDC.
  • Compiler Explorer - интерактивный компилятор на основе GDC с мгновенным выводом ассемблерного листинга.
  • Travis D Compilers - автогенерируемая таблица со всеми компиляторами D, которые на данный момент поддерживаются Travis CI.
  • DPLDocs - онлайн-генератор документации для D-проектов. Использует язык разметки Adrdox, являющийся надмножеством Ddoc.
Мои проекты на D:
  • dlib - коллекция библиотек для создания игровых движков, а также мультимедийных и научно-инженерных приложений. Реализует типовую функциональность, необходимую в любом таком проекте - линейная алгебра, потоковый ввод/вывод, импорт/экспорт изображений и т.д.
  • Cook - программа сборки проектов, альтернатива DUB (я написал ее задолго до того, как появился DUB, и до недавних пор по привычке собирал свои программы с ее помощью).
  • DGL - графический движок для 2D- и 3D-игр. Выдает достаточно современную картинку, поддерживает различные модные технологии, включая динамические мягкие тени, анти-алиасинг, parallax mapping, неограниченное количество источников света и т.д.
  • Dagon - развитие DGL, фреймворк для разработки игр.
  • dmech - физический движок, симулятор динамики твердых тел. Ориентирован на использование в играх - с его помощью можно организовать единую систему обработки столкновений, в которой будут учитываться как динамические, так и кинематические тела, а также статическая геометрия уровня. Отлично работает в связке с DGL.
  • GScript - моя попытка написать скриптовый язык, с компилятором в байт-код и виртуальной машиной для исполнения байт-кода. Язык очень простой - процедурный, с C-подобным синтаксисом и динамической типизацией. Есть поддержка массивов и строк.
  • Box - архив-контейнер для хранения файлов с нелатинскими именами. Я написал его как альтернативу TAR для личного использования. Все имена в архиве хранятся в UTF-8, что делает его полностью кроссплатформенным, в отличие от TAR, где имена просто копируются из файловой системы, и информация о кодировке не сохраняется.  
  • DIOS - костяк ядра операционной системы.

7 комментариев:

  1. Обратите внимание D lang-у можно помочь...https://www.bountysource.com/trackers/383571-d-programming-language

    ОтветитьУдалить
  2. Вы бы ссылки обновили, половина неактуальна уже.

    ОтветитьУдалить
    Ответы
    1. А какие вы имеете в виду? Сейчас проверил - почти все ссылки рабочие (DDT только переехал и на wiki.dlang.org неправильная ссылка стояла). OpenMW решил убрать, т.к. проект переписали на C++.

      Удалить
  3. Здравствуйте, Какое у вас впечатление от этого языка? Какие недостатки встречали при написании кода? Чем он лучше по сравнению с c++?

    ОтветитьУдалить
    Ответы
    1. Недостаток у D, по сути, только один - привязка некоторых встроенных фич к сборщику мусора. Поначалу в языке мне нравилось абсолютно все, но потом я решил вручную выделять и высвобождать память, и оказалось, что это не так просто. Пришлось, например, написать свои контейнеры. Сейчас я пишу, по сути, на некоем подмножестве D, где не используются ассоциативные массивы, замыкания и т.д. В принципе, пока доволен. У D очень богатые возможности метапрограммирования, при помощи шаблонов можно обеспечить любой нужный уровень абстракции. Где требуется, можно писать на уровне C, а где-то - как в скриптовых языках. Основные преимущества перед C++, как мне кажется - это именно шаблоны, а также диапазоны как часть языка. Ну и скорость компиляции, само собой.
      Еще на D есть Derelict, прямого аналога которому на C++ я не знаю - очень удобный фреймворк для динамической линковки, создавать биндинги одно удовольствие. OpenGL любой версии, расширения - все из коробки. Повторюсь, может быть, на C++ тоже что-то такое написали, я не в курсе.

      Удалить
    2. Здравствуйте, спасибо за ответ, ещё есть вопрос про concurrency(модель message passing): если использовали, были ли какие-то проблемы при использовании?

      Удалить
    3. Вот message passing не использовал, как-то не приходилось активно работать с многопоточностью.

      Удалить