Подтвердить что ты не робот

Имеет ли язык D несколько библиотек и проблем с GC?

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

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

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

4b9b3361

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

Ответ 2

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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