Есть ли в языке D несколько стандартных библиотек и проблем с GC? - PullRequest
45 голосов
/ 08 июля 2010

Мне интересно, насколько зрелый и стабильный D, и может ли он быть хорошей заменой C / C ++.

Я знаю, что в настоящее время есть две стандартные библиотеки (Phobos и Tango).Это все еще тот случай, когда нет единой стандартной библиотеки?

Кроме того, я слышал некоторое время назад, что у языков есть проблемы на границах кода GCed / не-GCed.Я не смог найти никаких ссылок на этот счет на веб-сайте D, так что проблема по-прежнему актуальна?

Ответы [ 6 ]

34 голосов
/ 08 июля 2010

Версия 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, но вам придется изучить его и использовать, чтобы увидеть, действительно ли он будет делать то, что вы хотите в данный момент.

28 голосов
/ 09 июля 2010

Я рекомендую использовать D2 с Фобосом.Это тот момент, когда язык становится достаточно приятным и достаточно стабильным, чтобы компенсировать случайные разочарования, вызванные проблемами реализации.

12 голосов
/ 08 июля 2010

Я знаю, что в настоящее время есть две стандартные библиотеки (Фобос и Танго), поэтому я предполагаю, что могут быть люди, пытающиеся их объединить.

"Объединение" крайне маловероятно из-заразличия в лицензиях.Когда Tango будет портирован на D 2.0, вы сможете использовать его вместе с Phobos, что (легко) невозможно в D 1.0.

Кроме того, некоторое время назад я слышал, что языкипроблемы на границах кода GCed / не-GCed.Я не смог найти никакой ссылки об этом на веб-сайте D, так что эта проблема все еще актуальна?

Я считаю, что есть проблемы, только если вы не осторожны с тем, как вы управляете памятью.Если все ссылки на выделенный GC объект хранятся за пределами областей памяти, помеченных как корни GC, GC сочтет объект не связанным и удалит его.

Если бы мне пришлось выбрать D в качестве Cзамена сегодня, что D (v 1.0 или v 2.0) и какую стандартную библиотеку вы бы предложили?

Фобос и Танго движутся в несколько разных направлениях.Phobos (в D 2.0) тесно связан с новыми функциями D2.Tango более функциональный и содержит модули, которых нет в Phobos, например, поддержка HTTP / FTP-клиентов, различные классы криптографии и т. Д. Они также следуют разным философиям дизайна (Phobos более обязателен / мета-программирующий, хотяТанго очень строго ООП-подобен и, таким образом, похож на Java в этом отношении.

5 голосов
/ 08 июля 2010

Мне интересно, насколько зрелый и стабильный D, и если бы он мог быть хорошей заменой C / C ++.

Я бы опасался использовать любой язык, который не былвсе же поддержанный органом по стандартизации, таким как ANSI, ISO или ECMA.Это, возможно, показатель зрелости.При этом Java и Delphi, например, попадают в эту категорию, и хотя я не использую эти языки, их, вероятно, можно назвать «зрелыми».

Еще одним показателем может быть количество и качество книг и статей.написано для языка.Есть одна книга для D, которую я знаю от Андрея Александреску.Он также написал длинную статью на языке для доктора Доббса, где он конкретно занимается проблемой стандартной библиотеки.

4 голосов
/ 09 июля 2010

У меня был хороший опыт написания небольшой игры на D1 для Phobos и SDL, но это был довольно маленький проект.

На мой взгляд, D не хватает:

  • официальный веб-форум, где люди могут получать помощь и искать ответы (НЕ группы новостей)
  • официальный репозиторий для многих SDK, преобразованных в D (например, SDL, Gtk и т. Д. Их часто трудно найти и использовать, когда они вообще существуют).
0 голосов
/ 08 июля 2010

Я не думаю, что вопрос замены C заключается в том, является ли потенциальная замена "хорошей" или "достаточно зрелой" на теоретическом уровне, а скорее в практических соображениях и в том, что C "достаточно хорош" для чегоэто используется для.Если язык не имеет законченных встроенных сред сборки и среды выполнения для каждой основной операционной системы, то для целей C это не очень практично.Тот факт, что C является языком POSIX, является большой частью всей проблемы.

Конечно, другие полууровневые языки, такие как D, могут найти отличное применение в специализированных областях.Но вы вряд ли увидите основное многоплатформенное программное обеспечение (веб-серверы, серверы баз данных, текстовые процессоры, веб-браузеры и т. Д.), Написанное на D, потому что ни одна крупная ОС (а тем более все) не поставляется с D-средой сборки или среды выполнения.

...