Является ли D надежной альтернативой Java и C ++? [закрыто]


163

Является ли язык D надежной альтернативой Java и C ++? Что потребуется, чтобы стать надежной альтернативой? Должен ли я научиться этому? Это заслуживает евангелизации?

Основная причина, по которой я спрашиваю, состоит в том, что с новым стандартом C ++ (c ++ 0x) почти здесь, для меня ясно, что язык далеко прошел точку невозврата по отношению к любому, кто когда-либо его понимает. Я знаю, что C / C ++ никогда не умрет, но в какой-то момент нам нужно двигаться дальше. Даже у COBOL был свой день, а Java во многом отменила C ++. Ну и что дальше? D заполняет счет?


23
Кобол возвращается, но продолжайте и изучите D, если это щекочет ваше воображение. Чтение чайных листьев имеет такое же преимущество, как и все остальное при предсказании следующего большого языка.
Shog9

5
Меня не интересует, какой будет следующий большой язык, меня больше беспокоит то, что если бы я сказал своему большему работодателю, что хочу использовать D в моем следующем проекте, то меня не воспримут всерьез, потому что язык не ' пока нет.
Марк Кегель

22
Следует отметить, что страницы «D vs. C ++», представленные цифровыми марсами, сильно дискриминируют C ++. много раз говорят, что с ++ не может этого сделать, C ++ может это сделать
Йоханнес Шауб - litb

23
@ Йоханнес: Дело не в том, что язык делает возможным, а в том, что язык делает легким. - Брайан Херт
пропавший фактор

9
@Rahul, согласился, но тогда они должны сказать это. как «это нелегко сделать в C ++», и совсем не так.
Йоханнес Шауб -

Ответы:


130

То, что определяет успех и популярность языка программирования для реальной разработки программного обеспечения, только частично связано с качеством самого языка. Как чистый язык, D, возможно, имеет много преимуществ по сравнению с C ++ и Java. По крайней мере, это надежная альтернатива как чистый язык, при прочих равных условиях.

Тем не менее, для разработки программного обеспечения важны другие вещи - больше, чем сам язык: переносимость (на скольких платформах он работает), поддержка отладчика, поддержка IDE, стандартное качество библиотеки, поддержка динамических библиотек, привязки для общих API, документация, разработчик сообщество, импульс и коммерческая поддержка, и это лишь некоторые из них. В каждом из этих аспектов D безнадежно отстает от Java, C ++ и C #. На самом деле, я бы сказал, что в этом отношении они даже стоят за так называемыми «скриптовыми» языками, такими как Python, Perl, PHP, Ruby и даже JavaScript.

Если говорить прямо, вы просто не можете создать крупномасштабное кроссплатформенное приложение с использованием D. С незрелой стандартной библиотекой, без поддержки каких-либо современных IDE (есть плагины для Visual Studio и Xamarin Studio / MonoDevelop), ограничено поддержка динамических / разделяемых библиотек и несколько привязок к другим языкам, D сегодня просто не подходит.

Если вам нравится то, что вы видите в D, обязательно изучите его - это не займет много времени, если вы уже знаете Java и C ++. Я не думаю, что евангелизация будет полезна - на данный момент, если D собирается добиться успеха, то на самом деле ему нужно больше людей, спокойно использующих его и устраняющих его основные недостатки, такие как поддержка стандартных библиотек и IDE.

Наконец, что касается C ++, хотя большинство согласны с тем, что язык слишком сложен, тысячи компаний успешно используют C ++ как часть здорового сочетания языков, допуская только меньшее, четко определенное подмножество языка. Все еще трудно победить C ++, когда требуются как высокая производительность, так и небольшое использование памяти.


8
Утверждение, что он «не поддерживается ни в одной из современных IDE», немного преувеличивает. В затмении есть поддержка. Это еще не 1-й класс, но он там и становится лучше.
БКС

46
Отсутствие доказательств не является доказательством отсутствия.
FeepingCreature

29
Если кто-то делает положительное утверждение, такое как «есть розовые единороги», он должен предоставить доказательства, прежде чем это будет разумно принять. Конечно, это не означает, что розовых единорогов нет, как сказано в @FeepingCreature, а просто указывает, что это не является убедительным или действительным аргументом.
JoshD

8
@Feeping: Это милая поговорка, которую Джеймс Рэнди любит бросать, но это просто неправда. Если ваши тесты имеют достаточные доказательства, подтверждающие, что тест должен что-то найти, но не доказывают, что это отсутствие.
GManNickG

9
Я хочу добавить, что мы действительно создаем крупномасштабные приложения с D1 и Tango. Хорошо, мы не кроссплатформенные, а только Linux, но все же. Вся наша инфраструктура написана на D, и мы обрабатываем более 30 тыс. Запросов в час, а большой
сервер

109

Просто чтобы добавить мой собственный опыт в смесь:

Около года назад я работал над небольшим игровым проектом (3 программиста) продолжительностью 3 месяца, где мы использовали D в качестве основного языка. Мы выбрали его частично в качестве эксперимента, частично потому, что в нем уже были привязки для SDL и некоторых других инструментов, которые мы использовали, и в основном для преимуществ, по-видимому, по сравнению с C ++.

Мы любили его использовать. Это было быстро учиться и легко писать. Многие из его функций оказались неоценимыми, и я скучаю по ним, вернувшись к C ++.

Тем не менее, следующие моменты сделали нашу жизнь сложнее:

  1. В то время не было хорошей IDE, что было серьезной проблемой. В итоге мы сделали свой собственный, настроив Scite. Это работало хорошо, но не было идеальным.
  2. В то время не было отладчика. Нам удалось заставить WINDBG работать по принципу «попал или нет», но это было ненадежно. Отладка кода без отладчика иногда делала жизнь адской.
  3. В то время на выбор было две стандартные библиотеки (Танго и Фобос). Мы начали с одного, переключились на другое, и нам действительно нужно было объединить функции обоих (Tangobos!). Это вызвало головную боль и переписывание кода.
  4. Привязки к другим инструментам недоступны. В конце концов нам пришлось переключиться на DirectX (по причинам, которые я не буду касаться). Для DirectX не было никаких привязок, поэтому нам пришлось написать свою собственную на C ++, собрать ее как .dll и привязать к ней. Это была довольно неприятная работа и заняла некоторое время.

В целом, мы любили писать D. Это действительно облегчало написание кода и быстро усваивалось. Упомянутые мною проблемы повторяют ответ, который был принят на этот вопрос, - это «лишние» биты, которые необходимо адресовать в D, ядро ​​которого твердое.


4
классный ввод ... теперь есть отладчик !! :)
bbqchickenrobot

14
Я не понимаю, почему DirectX является проблемой. Я не программист D, но я думал, что D может понять C? А у DirectX есть C API?

относительно легко использовать материал DirectX с нативными интерфейсами D, поэтому написание оболочки на c ++ не требуется, за исключением некоторых особых случаев
Quonux

@Quonux: Это был наш опыт в то время, еще в 08 году. Без сомнения, с тех пор многое изменилось. Я не могу вспомнить кровавые подробности больше.
Xan

1
Обновление 2019: язык программирования D значительно расширился. Теперь вы можете использовать GDB "из коробки" с Dlang. DPP позволяет напрямую включать любой заголовок C в Dlang. Calypso позволяет вам использовать любую библиотеку C ++ в Dlang, включая Qt - в ней есть несколько ошибок, но она в основном работает.
noɥʇʎԀʎzɐɹƆ

60

Я согласен с тем, что C ++ становится тупиковым языком - и мне больно говорить об этом после его использования в течение последних 17 лет.

Я думаю, что D - законный преемник C ++. С языковой точки зрения он «делает все правильно» (даже если я не согласен с каждым минутным решением). Я думаю, что с C и C ++ в упадке нет другого языка системного уровня, который действительно мог бы делать то, что они делают, удерживая себя в мире современных языков - кроме D! Мало того, что D исполняет эту роль - она ​​превосходна в этом! Достаточно взглянуть на D1.x, чтобы убедить вас в этом, но когда вы посмотрите на D2.0, он вас унесет. По моему мнению, сегодня нет другого языка, который бы работал так же хорошо, как D2.0 в соединении парадигм императивного и функционального программирования, который станет более значимым в ближайшие годы.

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

Я думаю, что разница произойдет во многом благодаря участию Андрея Александреску. Это ни в коем случае не дискредитирует Уолтера Брайта, который проделал огромную работу по привлечению D в мир. Но Александреску - важная и неотразимая фигура в сообществе C ++, и именно здесь собирается появиться большинство потенциальных D-переключателей. И он также внес значительный и важный вклад в D2.0 в поддержку функционального программирования.

Может все еще оказаться, что D обречен быть Betamax языков системного уровня - но мои деньги на это развернутся в течение следующих двух лет.


20
C не снижается для программирования уровня системы. Linux, Windows и OS X все разработаны на языке C. Аналогичным образом, многие микроконтроллеры и операционные системы для микроконтроллеров программируются с использованием C.
Кевин,

12
Я не думаю, что D "делает все правильно". Правильнее было бы начать с нуля, а не пытаться сделать лучший C ++. Я думаю, что необходимы более радикальные изменения, чтобы оправдать масштабный переход от C ++.
Джалф

9
Кевин: Windows и OS X не разрабатываются на C. Конечно, фрагменты ядра есть, но Windows использует кучи C ++ и OS X Obj-C. Linux - единственная операционная система, о которой я знаю, где C был переведен в статус «Один истинный язык» и больше ничего не используется.
Джалф

16
Хорошее предсказание. Прошло 2 года с этой должности, и D ничуть не ближе к массовому усыновлению.
Микероби

18
@mikeobi LOL! Два года начинаются с того
момента,

20

Мне нравится, что D - это работа гения, прежде всего одного ума - Уолтера Брайта, чей компилятор Zortech был фантастическим в свое время.

В отличие от C ++ слишком много дизайна комитетом, даже если Бьярне оказывает влияние. Слишком много дополнительных функций и странный новый синтаксис. Эта разница отражается в легкости обучения и простоте повседневного использования, уменьшении количества ошибок.

Более когерентные языки приводят к лучшей производительности и программатор радости - но это субъективно и спорно! (я думаю, я должен проголосовать за мой собственный ответ)


9
Над этим сейчас работает еще один гений - Андрей Александреску. То, что он сделал с D2.0, ИМХО, по меньшей мере, столь же удивительно, как то, что Уолтер сделал с D1.x. Между двумя из них (не исключая многочисленных других участников) D становится языком, с которым нужно считаться. Смотрите это место
philsquared

5
сделать это 3 (или более) чертовски хороших программистов: Бартош Milewski
BCS

7
Таким образом, C ++ изначально был создан одним действительно умным парнем, а теперь контролируется комитетом действительно умных людей, тогда как D изначально был создан одним действительно умным парнем, а теперь контролируется ... группой действительно умных людей. Да, я вижу, как это делает D лучше. ;) (подсказка: уродство C ++ не имеет ничего общего с комитетами. Это является следствием целей разработки языка. Он должен был (почти) быть подмножеством языка C. D, и не должен был быть таковым). Это означает, что он может избежать многих бородавок (за счет того, что он также избежал популярности, которую он принес)
января

4
@jalf Вы правы в том, что "безобразие" C ++ не связано с тем, что оно разработано комитетом. Это медлительность в эволюции, однако.
philsquared

15

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

Я бы порекомендовал взглянуть на таблицу сравнения D, чтобы увидеть, какие функции есть у языка, и посмотреть, подходит ли он вам.


10

Язык D современный. Ни один язык не идеален, и в этом нет никаких сомнений. Но языки рождаются, чтобы облегчить жизнь. Где язык D по сравнению с C ++ имеет много хороших возможностей с точки зрения сложности. Используется множество других языковых комбинаций, которые помогают кодерам быстрее кодировать, с ТОП-функциями, представленными другими языками. Пожалуйста, смотрите также: для более подробной информации о D и других языках

  • D против C ++ - это совместимость, в которой задействованы огромные языки C ++, и она требует совместимости с D. D обеспечивает уже 100% совместимость с C, что по-прежнему является хорошей победой.

  • D против C ++, C ++ - это, на мой взгляд, очень хороший язык, но его трудно кодировать, и он требует много времени, чтобы получить успех, но D позволяет делать то же самое с простотой

  • D против C ++, я не уверен, что это делает C ++, но D не разрешает присваивать переменные ограничения типа без использования «auto», что хорошо для динамической переменной, когда требуется сделать строгий тип

  • По сравнению с C ++, если у вас есть опыт работы с другими языками, вы можете сразу приступить к работе с ним, он имеет простую схему обучения и разрабатывается сильной опытной командой и поддержкой компании.

  • D против C ++, очень хорошая вещь, которую я нашел в D, это стиль кода, он выглядит и чувствует себя точно так же, как C / C ++, хотя кодирование напоминает, что я делаю действительно современный C / C ++, который называется D

Есть много более веских причин для языка D, нет причин недооценивать любой язык, его всегда выбирает пользователь.


7

Это действительно зависит от ваших потребностей - крупномасштабные коммерческие приложения, написанные на D , существуют на стороне сервера, и для этого D (как правило, использующий Tango / Mango) идеально подходит, и вы, вероятно, сможете обслуживать больше запросов. чем с любым другим языком / платформой.

Для более специализированных решений с точки зрения протоколов и интерактивности (которых много) у вас будет больше проблем с поиском необходимых библиотек, и нехватка инструментов, скорее всего, повлияет на вас больше.


1
Не могли бы вы привести пример такого коммерческого приложения?
Александр Малахов

1
@ Александр Малахов: А ... хм ... хороший вопрос .... я рад, что вы спросили, существует ли коммерческое приложение ... хорошо продуманный вопрос ... конечно ..... я восхищаюсь ... ... это те вопросы, которые мы должны задать ..... показывает ваш интеллект ..... хм ... позвольте мне искать ... Коммерческое приложение в D ... хм .... ну .. .Просто подожди ... Я знаю, но ... просто не могу вспомнить это ... конечно, есть .... просто держись ... Я все еще ищу ... подожди!
Простой парень

7

D довольно впечатляет, и книга Андрея об этом хорошо написана. Но, как уже говорили другие, вам нужны инструменты и поддержка платформы. Со временем GDC может стать ответом на оба вопроса.

Вы видели это?

«Отладчик GNU добавляет поддержку языка D»: http://www.linux.com/news/enterprise/biz-enterprise/358956-gnu-debugger-adds-d-language-support

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

Лично я бы не стал настаивать на том, чтобы делать большой проект на D, но я бы использовал D для внутренних инструментов, чтобы получить опыт работы с ним и познакомить с ним других.

Первоначальный вопрос заключался в том, является ли D надежной альтернативой Java и C ++. Я не думаю, что D и Java действительно будут сильно конкурировать на практике; D конкурирует с C ++ и теперь Go. Другие вопросы касаются различий между D и Go, но обычно считается, что Go проще в использовании. Поэтому я подозреваю, что будущее D во многом зависит от того, сколько места у него есть, чтобы дышать между C ++, нынешним королем холма, и Go, гораздо более легкой альтернативой, которую поддерживает Google.

ОБНОВЛЕНИЕ: Я только что обнаружил, что моя любимая глава книги Андрея , посвященная параллелизму, доступна бесплатно онлайн. Определенно стоит прочитать!

А вот займет слишком много дискуссии о сравнительных достоинствах / задачах / подходах Go и D .


Я не знаю много о Rust; Я жду, пока он достигнет 1,0. Но вы правы, это определенно выглядит достойным внимания и, кажется, играет в этом же пространстве.
AmigoNico

1
Единственное, что мне не нравится в D - это система типов. Это выглядит старым. ОО иерархии навязчивы. Мне не нравится это как отправная точка. Ржавчина лучше в этом.
Герман Диаго

4

Похоже, что вопрос был дан ответ. D - лучший язык по сравнению с C ++.

Вопрос о том, имеет ли для практических целей лучшую инфраструктуру вокруг, является вторичным.

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


4

Как язык, я всегда чувствовал, что D ближе к C #, чем к C ++. Не в функциях и библиотеках, а в «ощущениях». Это намного чище, приятнее ... веселее (чем в C ++). ИМХО, самым большим препятствием в становлении надежной альтернативы являются инструменты, IDE и отладчик. Если D преодолеет некоторые препятствия для широкого использования / принятия, появятся другие инструменты и библиотеки. (Я сам вернусь к D, если будет полезная IDE и отладчик.)


А как насчет плагина mono-d ?: mono-d.alexanderbothe.com
user1284631

3

Прекрасно работает для моих любимых проектов. Я бы использовал его для проектов работодателей, но не знал, как трудно им будет найти кого-то, кто возьмет на себя источник после того, как я уйду дальше. Нет технических причин, чтобы этого избежать, по крайней мере на поддерживаемых платформах. (постучать по дереву)


3

Один из подходов заключается в поиске работы в вашем районе. Найдите работу, которую вы хотели бы сделать, и посмотрите, какие навыки они просят. Если они просят C ++, Ruby, Oracle или D, то это навык, который в основном поможет вам получить работу, которую вы хотите.


3

Это выглядит как очень хорошо разработанный язык; намного лучше, чем C - C ++ - Цель C. Некоторое время я могу жить без IDE или отладчика, но не без хорошей документированной библиотеки для D 2.0.

Я проверю через 6 месяцев ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.