Чи є D надійною альтернативою Java та C ++? [зачинено]


163

Чи є мовою D надійною альтернативою Java та C ++? Що знадобиться, щоб стати надійною альтернативою? Чи варто мені турбуватися, вивчаючи це? Чи заслуговує на євангелізацію?

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


23
COBOL повертається, але вперед і дізнайся D, якщо він тикає твоїй фантазії. Читання чайних листків має стільки ж пострілу, як і все інше при прогнозуванні наступної великої мови.
Shog9

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

22
слід зауважити, що сторінки "D проти C ++" цифровими маршами вкрай дискримінують C ++. багато разів вони кажуть "c ++ не може цього зробити", C ++ може це зробити
Йоганнес Шауб - litb

23
@Johannes: Справа не в тому, що мова робить можливою, а в тому, що мова робить її легкою. - Брайан Херт
зниклий фактор

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
кажучи, що у нього немає "жодної підтримки в будь-яких сучасних ІДЕ", це трохи завищує. Є підтримка в затемненні. Це ще не перший клас, але він там і покращується.
BCS

46
Відсутність доказів не є свідченням відсутності.
FeepingCreature

29
Якщо висловлюєте позитивне твердження, наприклад, "є рожеві єдинороги", вам слід запропонувати докази, перш ніж це можна прийняти. Зрозуміло, це не означає, що немає рожевих єдинорогів, як заявлено @FeepingCreature, а просто заявляючи, що це не є переконливим або допустимим аргументом.
JoshD

8
@Feeping: Це мила приказка, що Джеймс Ренді любить кидатись, але це просто неправда. У ваших тестах є обґрунтовані докази, що підтверджують, що у тесті щось слід знайти, але ні, це не свідчить про відсутність.
GManNickG

9
Хочу додати, що ми створюємо великомасштабні програми з D1 та Tango. Гаразд, ми не крос-платформні, а лише Linux, але все ж. Вся наша інфраструктура написана на D, і ми обробляємо більше 30 кб запитів на годину з великим зворотним
кодом

109

Просто додати мій власний досвід у суміш:

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

Ми любили його використовувати. Це було швидко вчитися і легко писати. Багато її функцій виявилися безцінними, і я сумую за тим, що повернулися до C ++.

Однак наступні моменти ускладнили наше життя:

  1. На той час не було хорошого ІДЕ, що було головним питанням. Ми закінчилися робити власні, налаштовуючи Scite. Це працювало нормально, але не було ідеальним.
  2. Налагодження на той час не було. Нам вдалося змусити WINDBG працювати на основі попадання, але це було ненадійно. Налагодження коду без налагоджувача зробило життя пекельним часом.
  3. У той час було обрано 2 стандартні бібліотеки (Танго та Фобос). Ми почали з одного, перейшли на інший, і нам дійсно потрібна була суміш функцій обох (Tangobos!). Це спричинило головні болі та перезапис деяких кодів.
  4. Прив’язки до інших інструментів недоступні. Врешті-решт нам довелося перейти на DirectX (з причин я не потрапляю). Для DirectX не було прив’язок, тому нам довелося написати своє власне в C ++, побудувати його як .dll і прив’язати до цього. Це була досить неприємна робота і зайняла деякий час.

Загалом ми любили писати D. Це насправді полегшило написання коду і було швидко вивчити. Питання, про які я згадав, - це відповідь, яку було прийнято на це питання - це "зайві" біти, які потребують адреси в D, суть її суцільна.


4
крутий вклад ... зараз є налагоджувач !! :)
bbqchickenrobot

14
Я не розумію, чому DirectX - це проблема. Я не програміст D, але я думав, що D може зрозуміти C? А DirectX має API API?

відносно просто використовувати матеріали DirectX з власними інтерфейсами D, тому писати обгортку в c ++ не потрібно, за винятком деяких особливих випадків
Quonux

@Quonux: Це був наш досвід того часу, ще в 08 році. Не сумнівайтеся, що з того часу все змінилося багато. Я вже не можу пригадати деталі горі.
xan

1
Оновлення на 2019 рік: Мова програмування D значно розширився. Тепер ви можете використовувати GDB нестандартно з Dlang. DPP, давайте вам безпосередньо включити будь-який заголовок C у Dlang. Каліпсо дозволимо вам використовувати будь-яку бібліотеку C ++ у Дланге, включаючи 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 був підвищений до One True Language-статусу, і більше нічого не використовується.
jalf

16
Приємний прогноз Минуло 2 роки з моменту цієї посади, і D не наближається до прийняття основної лінії.
mikerobi

18
@mikeobi LOL! Два роки починаються з кожного разу, коли ви читаєте це речення ;-)
фільтрований

20

Мені подобається, що D - робота генія, передусім одного розуму - Вальтера Брайта, укладач якого Zortech був фантастичним у свій час.

На відміну від C ++ занадто багато дизайну комітетом, навіть якщо Bjarne є впливом. Занадто багато додаткових функцій та дивний новий синтаксис. Ця різниця відображається у простоті навчання та простоті щоденного використання, меншій кількості помилок.

Більш узгоджені мови призводять до кращої продуктивності та радості програміста - але це суб'єктивно та сперечально! (я думаю, я повинен проголосувати свою відповідь вниз)


9
Зараз над цим працює і інший геній - Андрій Олександреску. Що він зробив з D2.0, це IMHO, принаймні настільки ж дивовижно, як і те, що Уолтер зробив з D1.x. Між двома з них (не оминаючи уваги численних інших учасників) D стає мовою, з якою слід рахуватися. Дивіться цей простір
фільтрований

5
зробити так, щоб 3 (і більше) прокляли хороших програмістів: Бартош Мілевський
BCS

7
Так C ++ спочатку був створений одним дійсно розумним хлопцем, а зараз його контролює комітет справді розумних людей, тоді як D спочатку створювався одним дійсно розумним хлопцем, а зараз його контролює ... група справді розумних людей. Так, я бачу, як це робить D вищим. ;) (натяк: потворність C ++ не має нічого спільного з комітетами. Це є наслідком мовних цілей дизайну. Це було призначено бути (майже) підмножиною C. D - це не так і не було призначено бути таким , це означає, що вона може уникнути багатьох бородавок (ціною також уникнути популярності, яку вона принесла)
jalf

4
@jalf Ви праві, що "потворність" C ++ не обумовлена ​​комітетом. Однак повільність в еволюції є.
фільтрований

15

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

Я рекомендую переглянути таблицю порівняння D, щоб побачити, які особливості є для мови, і побачити, чи правильно це для вас.


10

D мова - сучасна. Жодна мова не ідеальна, і в цьому немає сумнівів. Але мови народжуються, щоб полегшити життя. Де мова D порівняно з C ++ має багато хороших особливостей за рівнем складності. Задіяно багато інших спеціальностей комбінації мов, що допомагає кодерам швидше кодувати, з TOP-функціями, запровадженими іншими мовами. Будь ласка, дивіться також: для отримання детальної інформації про D та інші мови

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

  • D vs C ++, C ++ - це моя думка, дуже гарна мова, але її важко кодувати і забирає багато часу, для досягнення успіху потрібно все більше і більше досвіду, але D дозволяють робити те саме з простотою

  • D vs C ++, я не впевнений, чи C ++ це робить, але D не дозволяють присвоювати змінну обмеження типу жодного типу за допомогою "auto", що добре мати змінну динаміку, коли потрібно, щоб ви могли зробити строгий тип

  • D vs C ++, якщо у вас є інший мовний досвід, ви можете безпосередньо розпочати роботу, у ньому є легка дорожня карта та її підготовка розроблена сильною досвідченою командою та службою підтримки компанії

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

Є набагато більше вагомих причин для мови D, немає причин недооцінювати будь-яку мову, її завжди вибір користувача.


7

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

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


1
ви можете навести приклад такого комерційного додатка?
Олександр Малахов

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

7

Д доволі вражає, і книга Андрія про це добре написана. Але, як говорили інші, вам потрібні інструменти та підтримка платформи. 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 .


Я мало знаю про Расту; Я чекаю, коли він потрапить у 1,0. Але ти маєш рацію, це, безумовно, варто переглянути і, здається, грає в цьому ж просторі.
AmigoNico

1
Єдине, що мені не подобається у D - це система типів. Це виглядає по-старому. Ієрархії ОО є нав'язливими. Мені це не подобається як відправна точка. Іржа краще в цьому.
Герман Діаго

4

Схоже, на запитання відповіли. D - краща мова порівняно з C ++.

Питання про те, чи має для D практику краща інфраструктура, є другорядним.

Якщо коротко, якщо вони обидві нові мови без будь-якої підтримки D - це краща мова, ergo - це краща мова.


4

Як мова, я завжди відчував, що D ближче до C #, ніж до C ++. Не в особливостях і бібліотеках, а в «почутті». Це набагато чистіше, приємніше ... весело (ніж C ++). IMHO найбільшою перешкодою для досягнення надійної альтернативи є інструменти, IDE та налагоджувач. Якщо D подолає деякі перешкоди для широкого використання / використання, з'явиться більше інструментів та бібліотек. (Я сам повернусь у D, якщо знайдеться IDE та налагоджувач.)


як щодо модуля моно-d ?: mono-d.alexanderbothe.com
користувач1284631

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.