Буквально вчера всё-таки нашел время разобраться с этим языком. Нашёл у себя какую-то старую версию GDC (скачать последнюю версию DMD-бандл не могу по причине GPRS-интернета).
Я ещё до этого знал, что он продвигается как замена C++, что даже Андрей Александреску плюнул на C++ и ушёл делать D, что по возможностям и красоте кода этот язык превосходит C++, но боялся, что в этом относительно молодом языке встанет проблема с библиотеками.
Я ошибался!!!
Мало того, что стандартная библиотека Phobos сочетает положительные стороны C++, Delphi, C#, Java, а к тому же и имеет сразу модули для Windows- и Linux-зависимых системных вызовов, но и уже созданные сторонние библиотеки очень впечатляют.
Знакомый Java-программист, которому я начал описывать возможноcти D, резонно спросил насчёт поддержки GUI. Я, ссылаясь на отсутсвие такой поддержки со стороны Phobos, сослался на возможность конвертировать хедеры GTK+ и обращаться к этой библиотеке. Но после этого, на одном из сайтов по D с удивлением обнаружил, что для этого языка уже существуют 4 мощных GUI-библиотеки: DFL, wxD, DWT и GtkD. DFL оказалась пратически копией WinForms из .NET; wxD - обёртка на wxWidgets; DWT - клон Java-библиотеки SWT, на которой написан Eclipse (сходство настолько велико, что разработчики просто ссылаются на Javadocs и прочую документацию к SWT, упоминая лишь некоторые различия в именовании); GtkD - как можно догадаться, обёртка для GTK+. Как говорится, выбирайте по вкусу. Таким образом, об уродских (ну за исключением Qt, хотя тот и использует свои "расширения" C++) GUI-тулкитах для C++, думаю, можно забыть.
Но этого мне было мало, т.к. в первую очередь для меня интересны 3D-приложения. Что интересно, уже существует полноценная обёртка над OpenGL, GLU, SDL, OpenAL, ODE, DevIL и т.п. - Derelict. Причём требует она со стороны программиста только включения и выключения модулей, в остальном работа с этими библиотеками очень похожа на сишную с точностью до различий синтаксиса между C и D, причём в заметно лучшую сторону. Вдобавок язык D предоставляет нам свои богатые объектно-ориентированные и некоторые функциональные возможности без запутанных конструкций C++. Вдобавок и скорость компиляции D-программ намного выше, т.к. компилятору не приходится постоянно перелопачивать гигантские хедеры с нагромождениями #include-директив, а также макросами и запутанными шаблонными конструкциями, т.к. применяется принцип модульности. Имхо скорость компиляции (к сожалению не замерял) должна сравниваться со скоростью компиляции Delphi и Java.
У меня даже появилась идея бросить к чертям этот инопланетный C++, в котором оптимизация зависит от каждой лишней строчки const, virtual или inline (в D данные оптимизации применяются автоматически исходя из опций компиляции), а постоянные невидимые преобразования типов (коих к каждому типу C++ может применить кучу, причём по цепочке и плевать он хотел на то, что думал программист - лишь бы скомпилировалось), якобы призванные упростить код, на самом деле придают больше головной боли из-за малоявных эффектов. Интересно, что низкоуровневость при этом никуда не исчезла, убрали только всё лишнее (например оператор -> заменили на точку - компилятор всё-таки не настолько тупой, чтобы не понять когда ему предлагают SomeClass, а когда SomeClass*). Шаблоны переделали, сделали их, как мне показалось, более чёткими, добавили микшины вместо множественного наследования - имхо к лучшему.
Да, рантайм-возможностей Java, C# или Objective-C у языка D нет... Думается, что этот недостаток всё-таки был обоснован... Тем более, что D может выполняться и интерпретатором DMDScript. Причём скрипты эти получаются достаточно низкоуровневые.
Спасибо за внимание.