Язык D имеет несколько стандартных библиотек и проблем с GC?

Я задаюсь вопросом, как сформировавшийся и стабильный D, и если это могла бы быть хорошая замена для C/C++.

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

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

45
задан Owen 27 August 2014 в 21:02
поделиться

6 ответов

Версия 1 D является зрелой и стабильной, и определенно есть люди, которые используют ее для реальной работы. Phobos - это единственная стандартная библиотека, которую D когда-либо имел и, вероятно, будет иметь, но Phobos в D1 не хватает настолько, что были созданы различные сторонние библиотеки, чтобы заполнить пробелы. Tango - самая большая из них и наиболее активно используемая сторонняя библиотека (именно поэтому ее часто называют второй стандартной библиотекой, хотя это не так, и Уолтер Брайт не преминет указать, что это не так). Однако Tango и Phobos в D1 не очень хорошо сочетаются (IIRC, потому что Tango заменяет некоторые стандартные вещи, такие как сборщик мусора), поэтому есть большая вероятность, что кто-то, программирующий в D1, будет использовать Tango без Phobos. Кроме того, D1 поддерживается несколькими компиляторами в дополнение к основному компилятору от Digital Mars - включая LDC и gdc.

Версия 2 D только сейчас достигает зрелости и стабильности. Они прекратили вносить серьезные изменения в язык, поэтому вам не нужно беспокоиться о том, что все сломается при обновлении компилятора, как это было в прошлом, когда они все еще дорабатывали язык. Фактически, сейчас он уже достаточно развит, чтобы Андрей Александреску выпустил The D Programming Language как окончательный ресурс по языку, который должен оставаться актуальным, за исключением ошибок в тексте (и это одна из лучших книг по языку программирования, которые я читал). Тем не менее, в языке по-прежнему много ошибок, поэтому вполне возможно столкнуться с ошибкой, которая вызовет у вас раздражение в вашем конкретном приложении. Она определенно достаточно зрелая и стабильная, чтобы с ней реально работать, но имейте в виду, что столкнуться с ошибками вполне возможно.

Tango еще не был перенесен в D2, поэтому при программировании в D2 он не очень подходит. Однако Phobos сейчас развивается довольно хорошо. Он получает множество замечательных дополнений (теперь у него есть контейнеры! - отсутствие контейнеров в Phobos было большой причиной использовать Tango в D1, а не Phobos), и в нем есть некоторые действительно мощные вещи - 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 определенно готов для использования в хобби и потенциально для серьезного использования на работе, но если вам действительно нужна стабильность (например, если вы на Boeing и ошибка означает смерть), то 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, но вам придется изучить и использовать его, чтобы понять, действительно ли он сделает то, что вам нужно в данный момент.

34
ответ дан 26 November 2019 в 21:15
поделиться

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

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

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

5
ответ дан 26 November 2019 в 21:15
поделиться

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

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

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

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

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

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

12
ответ дан 26 November 2019 в 21:15
поделиться

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

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

0
ответ дан 26 November 2019 в 21:15
поделиться

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

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

  • официального веб-форума, на котором люди могут получать помощь и искать ответы (НЕ в группах новостей);
  • официального репозитория для многих SDK, преобразованных в D (например, SDL, Gtk и т. Д.) . Их часто трудно найти и использовать, когда они вообще существуют.)
4
ответ дан 26 November 2019 в 21:15
поделиться

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

28
ответ дан 26 November 2019 в 21:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: