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