Ответ 1
Версия 1 из D зрелая и стабильная, и есть определенно люди, которые используют ее для реальной работы. Phobos - единственная стандартная библиотека, которую D когда-либо имела или, вероятно, когда-либо имела, но у D1 Phobos недостаточно, чтобы были созданы различные сторонние библиотеки, чтобы заполнить пробелы. Танго является самой крупной из них и является наиболее часто используемой сторонней библиотекой (поэтому ее часто называют второй стандартной библиотекой, хотя ее нет, и Уолтер Брайт будет быстро указать, что это не так). Тем не менее, Tango и Phobos в D1 не очень хорошо сочетаются (IIRC, потому что Tango заменяет некоторые стандартные вещи, такие как сборщик мусора), поэтому есть хороший шанс, что кто-то программирует в D1, будет использовать Tango без Phobos. Кроме того, D1 поддерживается несколькими компиляторами в дополнение к основному компилятору от Digital Mars, включая LDC и gdc.
Версия 2 D только что достигла зрелости и стабильности. Они перестали вносить существенные изменения в язык, поэтому вам, как правило, не приходится беспокоиться обо всем, что ломается над вами с обновлением компилятора, как это было в прошлом, в то время как они все еще прибивали язык вниз. Фактически, теперь он достаточно зрелый, что Андрей Александреску выпустил The D Programming Language в качестве окончательного ресурса на языке, который должен оставаться допустимым ошибками запрета в тексте (и это одна из лучших книг по языку программирования, которую я тоже читал). Тем не менее, все еще есть много исправлений ошибок, поэтому вполне можно столкнуться с ошибкой, которая вызывает у вас некоторое раздражение для вашего конкретного приложения. Он определенно достаточно зрелый и достаточно стабилен, чтобы делать с ним настоящую работу, но имейте в виду, что вполне можно столкнуться с ошибками.
Tango еще не портирован на D2, так что это не вариант при программировании в D2. Тем не менее, Фобос идет довольно хорошо сейчас. Он получает много отличных дополнений к нему (у него на самом деле есть контейнеры сейчас! - отсутствие контейнеров в Phobos является большой причиной использования Tango в D1, а не Phobos), и в нем есть некоторые действительно мощные вещи - std.algorithm is особенно приятно. Способ D обрабатывает лямбда-функции, вложенные функции и указатели на функции облегчает передачу летных функций в алгоритмы легче, чем в текущем стандарте С++. Кроме того, он был исправлен в D2, так что сборщик мусора и некоторые другие элементы ядра, которые Tango дублировал, теперь отделены от Phobos. Итак, как только Tango портирован на D2, вы сможете смешивать код Фобоса и Танго, хотя, как было указано в предыдущем ответе, Phobos и Tango используют довольно разные философии дизайна (Tango - очень Java-подобный и Phobos сильно используя шаблоны и мета-программирование с утиным набором, а не интерфейсами), поэтому я не знаю, насколько хорошо они будут смешиваться с этой точки зрения.
В настоящее время я считаю, что dmd является единственным компилятором, который является последним в отношении спецификации для D2, но я считаю, что есть работа над компиляторами gdc и LDC D (хотя насколько активна эта работа есть, я не знаю). Кроме того, Walter Bright в настоящее время работает над 64-битным портом dmd, поэтому на ближайшее время мы получим собственную 64-битную компиляцию.
В целом, я бы сказал, что D2 готов к использованию, но вам нужно знать, что до сих пор много работы с ним связано с исправлениями ошибок и т.п. Таким образом, D2 определенно готов для использования в хобби и потенциально для серьезного использования на работе, но если вам действительно нужна стабильность (например, если вы Boeing и ошибка означает смерть), то D1, вероятно, все же будет лучшим выбором. Конечно, большая вещь, о которой нужно помнить о D2, состоит в том, что у нее много функций, которые D1 не имеет, поэтому, если вам действительно не нужна устойчивая стабильность, тогда D2, скорее всего, будет идти. К счастью, он продолжает созревать и стабилизироваться, поэтому время определенно приближается, когда не будет вопроса, что лучше использовать D2.
Несмотря на это, оба D1 и D2 являются хорошими заменами для C и С++ в общем случае. Они могут делать то, что делают C и С++, и (особенно в случае D2), вероятно, могут сделать это лучше. Основное место, которое D может отстать, заключается в том, насколько он оптимизирован. Там много кода, который будет столь же быстрым в D, как и на C или С++, но все еще много работы делается на D, поэтому есть много возможностей для его дальнейшего улучшения, и это будет иногда отставать от C и С++ для эффективности, Итак, как правило, D эффективен, но если вам действительно нужна такая же эффективная эффективность, как вы можете получить, это может оказаться недостаточно хорошим для того, что вам нужно (хотя оно и есть). Кроме того, существует множество зрелых библиотек C и С++, тогда как D не имеет нигде около того уровня кода, плавающего там, где можно работать. Любой C-код можно использовать с D, так как функции C могут быть вызваны из D, а некоторые из кода С++ могут быть (хотя при смешивании кода С++ с D) существует немало ограничений, поэтому это не обязательно будет препятствие, но это то, о чем нужно знать. Основным местом, где ему не хватало, были бы библиотеки GUI. Есть некоторые для D1, и в GUI-библиотеках для D2 выполняется работа, но я не считаю, что на данный момент они особенно зрелы.
Итак, как и во всем, какой язык вы должны использовать, зависит от того, что вы делаете. D сделает большинство вещей и сделает их хорошо. Но он не делает все, и он все еще созревает. Лично, на данный момент, я использую D, если мне не нужно использовать что-то еще для конкретного проекта, что не часто, если проект уже не написан ни в чем другом, и нет смысла его переносить прямо сейчас. Поэтому я настоятельно рекомендую использовать D, но вам нужно будет изучить его и использовать, чтобы увидеть, действительно ли он будет делать то, что вы хотите в данный момент.