Czy D jest wiarygodną alternatywą dla Java i C ++? [Zamknięte]

163

Czy język D jest wiarygodną alternatywą dla Java i C ++? Czego potrzeba, aby stać się wiarygodną alternatywą? Czy powinienem się tego nauczyć? Czy zasługuje na ewangelizację?

Głównym powodem, dla którego pytam, jest to, że dzięki nowemu standardowi C ++ (c ++ 0x) prawie tutaj, jest dla mnie jasne, że język znacznie przekroczył punkt, z którego nie ma powrotu w odniesieniu do każdego, kto go kiedykolwiek zrozumiał. Wiem, że C / C ++ nigdy nie umrze, ale w pewnym momencie musimy przejść dalej. Nawet COBOL miał swój dzień, a Java pod wieloma względami cofnęła C ++. Więc, co dalej? Czy D wypełnia rachunek?

Mark Kegel
źródło
23
COBOL wraca, ale śmiało naucz się D, jeśli podoba ci się to. Czytanie fusów ma taką samą szansę jak cokolwiek innego w przewidywaniu The Next Big Language.
Shog9,
5
Nie przejmuję się tym, jaki jest następny duży język, bardziej martwię się, że gdybym powiedział mojemu pracodawcy, że chcę używać D w moim następnym projekcie, nie byłbym traktowany poważnie, ponieważ język nie jest t jeszcze.
Mark Kegel,
22
Należy zauważyć, że strony „D vs. C ++” stworzone przez digital Mars są wysoce dyskryminujące względem C ++. wielokrotnie mówią „c ++ nie mogę tego zrobić”, C ++ może to zrobić
Johannes Schaub - litb
23
@Johannes: Nie chodzi o to, co język umożliwia, ale o to, co język ułatwia. - Brian Hurt
missingfaktor
9
@Rahul, zgodził się, ale powinni to powiedzieć. na przykład „to nie jest łatwe do zrobienia w C ++” i nie oznacza to, że nie jest to w ogóle możliwe.
Johannes Schaub - litb

Odpowiedzi:

130

To, co decyduje o sukcesie i popularności języka programowania do tworzenia oprogramowania w świecie rzeczywistym, jest tylko częściowo związane z jakością samego języka. Jako czysty język, D prawdopodobnie ma wiele zalet w porównaniu z C ++ i Javą. Przynajmniej jest to wiarygodna alternatywa jako czysty język, przy czym wszystkie inne rzeczy są równe.

Jednak inne rzeczy mają znaczenie dla tworzenia oprogramowania - prawie więcej niż sam język: przenośność (na ilu platformach działa), obsługa debuggera, obsługa IDE, standardowa jakość bibliotek, obsługa bibliotek dynamicznych, powiązania dla wspólnych interfejsów API, dokumentacja, programista społeczność, rozmach i wsparcie komercyjne, żeby wymienić tylko kilka. Pod każdym względem D jest beznadziejnie za Javą, C ++ i C #. W rzeczywistości, argumentowałbym, że pod tym względem stoi on nawet za tak zwanymi językami „skryptowymi”, takimi jak Python, Perl, PHP, Ruby, a nawet JavaScript.

Mówiąc szczerze, po prostu nie możesz zbudować wieloplatformowej aplikacji na dużą skalę przy użyciu D.Z niedojrzałą standardową biblioteką, brak wsparcia w żadnym nowoczesnym IDE (istnieją wtyczki zarówno dla Visual Studio, jak i Xamarin Studio / MonoDevelop), ograniczone Obsługa bibliotek dynamicznych / współdzielonych i kilka powiązań z innymi językami, D po prostu nie jest dziś opcją.

Jeśli podoba Ci się to, co widzisz w D, naucz się tego - nie powinno to zająć dużo czasu, jeśli znasz już Javę i C ++. Nie sądzę, żeby ewangelizacja była pomocna - w tym momencie, jeśli D ma odnieść sukces, to, czego naprawdę potrzebuje, to więcej ludzi cicho z niego korzystających i zajmujących się jego głównymi niedociągnięciami, takimi jak obsługa biblioteki standardowej i IDE.

Wreszcie, podobnie jak w przypadku C ++, chociaż większość zgadza się, że język jest zbyt złożony, tysiące firm z powodzeniem używają C ++ jako części zdrowej mieszanki języków, zezwalając tylko na mniejszy, dobrze zdefiniowany podzbiór języka. Nadal trudno jest pokonać C ++, gdy wymagana jest zarówno surowa wydajność, jak i niewielkie zużycie pamięci.

dmazzoni
źródło
8
stwierdzenie, że „nie obsługuje on żadnych nowoczesnych IDE”, jest nieco przesadzone. Jest wsparcie w zaćmieniu. To nie jest jeszcze pierwsza klasa, ale jest i jest coraz lepsza.
BCS
46
Brak dowodów nie jest dowodem nieobecności.
FeepingCreature
29
Jeśli ktoś uczyni twierdzenie pozytywne, takie jak „są różowe jednorożce”, należy przedstawić dowody, zanim będzie to uzasadnione. To prawda, nie oznacza to, że nie ma różowych jednorożców, jak stwierdził @FeepingCreature, ale po prostu stwierdzając, że nie jest to przekonujący ani ważny argument.
JoshD
8
@Feeping: To urocze powiedzenie, które James Randi lubi rzucać, ale to po prostu nieprawda. Jeśli twoje testy mają rozsądne dowody na to, że test powinien coś znaleźć, ale nie rób tego, oznacza to brak.
GManNickG,
9
Chcę dodać, że TWORZYMY aplikacje na dużą skalę za pomocą D1 i Tango. Okay, nie jesteśmy wieloplatformowi, ale tylko Linux, ale nadal. Cała nasza infrastruktura jest napisana w języku D i przetwarzamy ponad 30 000 żądań na godzinę z dużym zapleczem DHT również napisanym w języku D.
Marenz
109

Aby dodać do tego moje własne doświadczenia:

Około rok temu pracowałem nad małym projektem gry (3 programistów) trwającym 3 miesiące, w którym używaliśmy D jako naszego podstawowego języka. Wybraliśmy go częściowo jako eksperyment, częściowo dlatego, że miał już powiązania dla SDL i niektórych innych narzędzi, których używaliśmy, a głównie ze względu na korzyści, które wydaje się mieć w porównaniu z C ++.

Uwielbialiśmy go używać. Szybka nauka i łatwa do napisania. Wiele z jego funkcji okazało się nieocenionych i tęsknię za nimi po powrocie do C ++.

Jednak następujące kwestie utrudniły nam życie:

  1. W tamtym czasie nie było dobrego IDE, co było poważnym problemem. Skończyło się na tym, że stworzyliśmy własne, dostosowując Scite. To działało dobrze, ale nie było idealne.
  2. W tym czasie nie było debuggera. Udało nam się zmusić WINDBG do pracy na zasadzie trafienia lub chybienia, ale było to zawodne. Debugowanie kodu bez debuggera czasami sprawiało, że życie było piekielne.
  3. W tamtym czasie do wyboru były 2 standardowe biblioteki (Tango i Phobos). Zaczęliśmy od jednego, przerzuciliśmy się na drugi i naprawdę potrzebowaliśmy mieszanki funkcji obu (Tangobos!). To spowodowało bóle głowy i ponowne napisanie kodu.
  4. Brak powiązań z innymi narzędziami. W końcu musieliśmy przejść na DirectX (z powodów, w które nie wchodzę). Nie było dostępnych powiązań dla DirectX, więc musieliśmy napisać własne w C ++, skompilować je jako .dll i powiązać z tym. To była dość paskudna praca i zajęła trochę czasu.

Ogólnie uwielbialiśmy pisać D. Dzięki temu pisanie kodu było łatwe i szybko się uczyliśmy. Kwestie, o których wspomniałem, odzwierciedlają odpowiedź, która została przyjęta na to pytanie - to „dodatkowe” bity, które wymagają adresowania w D, rdzeń jest solidny.

xan
źródło
4
fajne wejście ... teraz jest debugger !! :)
bbqchickenrobot
14
Nie rozumiem, dlaczego DirectX jest problemem. Nie jestem programistą D, ale myślałem, że D może zrozumieć C? A DirectX ma C API?
jest stosunkowo łatwe w użyciu rzeczy DirectX z natywnymi interfejsami D, więc pisanie wrappera w języku c ++ nie jest potrzebne, z wyjątkiem niektórych specjalnych przypadków
Quonux
@Quonux: Takie było nasze doświadczenie w tamtym czasie, w 08. Nie mam wątpliwości, że od tamtej pory wiele się zmieniło. Nie mogę już sobie przypomnieć krwawych szczegółów.
xan
1
Aktualizacja 2019: Język programowania D znacznie się rozszerzył. Możesz teraz używać GDB po wyjęciu z pudełka z Dlang. DPP umożliwia bezpośrednie dołączenie dowolnego nagłówka C do Dlang. Calypso pozwala ci użyć dowolnej biblioteki C ++ w Dlang, w tym Qt - ma kilka błędów, ale w dużej mierze działa.
noɥʇʎԀʎzɐɹƆ
60

Zgadzam się, że C ++ staje się językiem ślepej uliczki - i boli mnie to powiedzieć po tym, jak używałem go przez ostatnie 17 lat.

Myślę, że D jest prawowitym następcą C ++. Z punktu widzenia języka „robi wszystko, co należy” (nawet jeśli nie zgadzam się z każdą minutą decyzji). Myślę, że wraz z upadkiem C i C ++ nie ma innego języka na poziomie systemów, który naprawdę mógłby robić to, co robią, jednocześnie utrzymując się w świecie języków współczesnych - z wyjątkiem D! D nie tylko spełnia tę rolę - jest w niej doskonały! Rzut oka na D1.x powinien cię o tym przekonać - ale kiedy spojrzysz na D2.0, to cię powala. Uważam, że nie ma obecnie innego języka, który działałby tak dobrze, jak D2.0 w łączeniu imperatywnych i funkcjonalnych paradygmatów programowania - co tylko nabierze większego znaczenia w nadchodzących latach.

Brak akceptacji głównego nurtu - czy nawet widoczności - jak również dużą skalę, dojrzały, bibliotek - przeszkodą oczywiście. Jednak myślę, że nie można tego odpisać z tego powodu. Jestem przekonany, że w ciągu najbliższych kilku lat język D stanie się jednym z najważniejszych języków - a ci, którzy teraz traktują go poważnie, będą dobrze przygotowani, aby przejąć inicjatywę, gdy nadejdzie czas.

Myślę, że różnica nastąpi, w dużej mierze, dzięki zaangażowaniu Andrieja Alexandrescu. Nie chodzi o to, aby w żaden sposób zdyskredytować Waltera Brighta, który wykonał doniosłą pracę, aby sprowadzić D na świat. Ale Alexandrescu jest ważną i fascynującą postacią w społeczności C ++ - i stamtąd pochodzi większość potencjalnych przełączników D. Wniósł także znaczący i ważny wkład w rozwój D2.0, wspierając programowanie funkcjonalne.

Nadal może się okazać, że D jest skazany na bycie Betamaxem języków na poziomie systemowym - ale moje pieniądze będą się obracać w ciągu najbliższych dwóch lat.

philsquared
źródło
20
C nie traci na znaczeniu w programowaniu na poziomie systemowym. Linux, Windows i OS X zostały opracowane w C. Podobnie wiele mikrokontrolerów i systemów operacyjnych dla mikrokontrolerów jest programowanych za pomocą C.
Kevin,
12
Nie sądzę, że D „robi wszystko, co należy”. Właściwie byłoby zacząć od zera, a nie próbować tworzyć lepsze C ++. Myślę, że potrzebne są bardziej radykalne zmiany, aby uzasadnić odejście od C ++ na dużą skalę.
jalf
9
Kevin: Windows i OS X nie są rozwijane w C. Fragmenty jądra są oczywiście, ale Windows używa wielu C ++ i OS X Obj-C. Linux jest jedynym systemem operacyjnym, jaki znam, w którym C został podniesiony do statusu One True Language i nic więcej nie jest używane.
jalf
16
Niezła prognoza. Minęły 2 lata od tego postu, a D nie jest już bliżej przyjęcia do głównego nurtu.
mikerobi
18
@mikeobi LOL! Te dwa lata zaczynają się od chwili, gdy przeczytasz to zdanie ;-)
philsquared
20

Podoba mi się, że D jest dziełem geniusza, przede wszystkim jednego umysłu - Waltera Brighta, którego kompilator Zortech był fantastyczny w swoich czasach.

W przeciwieństwie do tego C ++ to zbyt wiele projektów komitetów, nawet jeśli Bjarne ma na to wpływ. Zbyt wiele dodatkowych funkcji i dziwna nowa składnia. Ta różnica odzwierciedla łatwość uczenia się i łatwość codziennego użytkowania, mniej błędów.

Bardziej spójne języki prowadzą do lepszej produktywności i radości programisty - ale to jest subiektywne i dyskusyjne! (chyba powinienem zagłosować na własną odpowiedź)

DarenW
źródło
9
Teraz pracuje nad tym inny geniusz - Andrei Alexandrescu. To, co zrobił z D2.0, jest, IMHO, przynajmniej tak zdumiewające, jak to, co Walter zrobił z D1.x. Między nimi dwoma (nie pomijając wielu innych autorów) D staje się językiem, z którym należy się liczyć. Obserwuj tę przestrzeń
philsquared
5
sprawiają, że 3 (lub więcej) cholernie dobrych programistów: Bartosz Milewski
BCS
7
Więc C ++ został pierwotnie stworzony przez jednego naprawdę sprytnego faceta, a teraz jest kontrolowany przez komitet naprawdę sprytnych ludzi, podczas gdy D zostało pierwotnie stworzone przez jednego naprawdę inteligentnego faceta, a teraz jest kontrolowane przez ... grupę naprawdę inteligentnych ludzi. Tak, widzę, jak to sprawia, że ​​D jest lepszy. ;) (wskazówka: brzydota C ++ nie ma nic wspólnego z komitetami. Jest konsekwencją celów projektowych języka. Miał być (prawie) podzbiorem C. D nie jest i nie miał być taki , co oznacza, że ​​mógłby uniknąć wielu brodawek (kosztem też uniknięcia popularności, jaką przyniosła)
jalf
4
@jalf masz rację, że „brzydota” C ++ nie jest wynikiem projektu komitetu. Jednak ewolucja jest powolna.
philsquared
15

D to dobry język i przyzwoicie popularny , ale jak wszystkie języki, to tylko kolejne narzędzie. To, jakiego narzędzia użyć, zależy od rodzaju osoby, którą myślisz, środowiska, w którym pracujesz, jakie ograniczenia językowe obowiązują w programie, a co najważniejsze, od samego programu. Jeśli masz czas, zdecydowanie polecam naukę D. W najgorszym przypadku nigdy z niego nie skorzystasz. Bardziej prawdopodobne jest, że dowiesz się, które jego aspekty lubisz najbardziej iw jakich warunkach świeci najjaśniej, i wykorzystasz to przy tworzeniu nowych programów.

Poleciłbym spojrzeć na tabelę porównawczą D, aby zobaczyć, jakie funkcje są dla tego języka i sprawdzić, czy brzmi to dobrze dla Ciebie.

Spodi
źródło
10

Język D jest nowoczesny. Żaden język nie jest doskonały i nie ma co do tego wątpliwości. Ale języki rodzą się, aby ułatwić życie. Gdzie język D w porównaniu do C ++ ma wiele dobrych funkcji pod względem złożoności. W grę wchodzi wiele innych specjalizacji w zakresie kombinacji języków, co pomaga programistom szybciej kodować, z NAJLEPSZYMI funkcjami wprowadzonymi przez inne języki. Zobacz także: aby uzyskać więcej informacji o D i innych językach

  • D vs C ++, to kompatybilność, w której zaangażowane są ogromne języki C ++ i wymaga zgodności z D. D pozwala już na 100% zgodność z C, co nadal jest dobrym wynikiem.

  • D vs C ++, C ++ to moim zdaniem bardzo fajny język, ale jest trudny do kodowania i czasochłonny, wymaga coraz większego doświadczenia, aby osiągnąć sukces, ale D pozwala zrobić to samo z prostotą

  • D vs C ++, nie jestem pewien, czy C ++ tak, ale D nie zezwala na przypisywanie zmiennych ograniczających żadne typy przy użyciu „auto”, co dobrze jest mieć zmienną dynamiczną, gdy jest to wymagane, można utworzyć ścisły typ

  • D vs C ++, jeśli masz inne doświadczenie językowe, możesz od razu zacząć z nim korzystać, ma łatwy do nauczenia mapę drogową i jest zaprojektowany przez silny, doświadczony zespół i wsparcie firmy

  • D vs C ++, bardzo fajna rzecz, jaką znalazłem w D, to styl kodu, wygląda dokładnie tak samo jak C / C ++, podczas gdy kodowanie przypomina, że ​​robię naprawdę nowoczesne C / C ++, które nazywało się D

Jest o wiele więcej dobrych powodów dla języka D, nie ma powodu, aby lekceważyć jakikolwiek język, zawsze jest to wybór użytkownika.

Społeczność
źródło
7

To naprawdę zależy od tego jakie są Twoje potrzeby - aplikacje komercyjne wielkogabarytowe napisane D robić istnieje na stronie serwera, a do tego D (zazwyczaj przy użyciu Tango / Mango) to idealne dopasowanie, i jest prawdopodobne, aby być w stanie obsłużyć więcej żądań niż w jakimkolwiek innym języku / platformie.

W przypadku bardziej wyspecjalizowanych rozwiązań pod względem protokołów i interaktywności (których jest wiele), będziesz mieć więcej problemów ze znalezieniem potrzebnych bibliotek, a brak narzędzi prawdopodobnie będzie miał na Ciebie większy wpływ.

larsivi
źródło
1
czy możesz podać przykład takiej komercyjnej aplikacji?
Alexander Malakhov
1
@ Alexander Malakhov: A ... hmm ... dobre pytanie .... Cieszę się, że zapytałeś, czy istnieje aplikacja komercyjna ... dobrze przemyślane pytanie ... oczywiście ..... Podziwiam ... ... tego rodzaju pytania powinniśmy zadać ..... pokazuje twój intelekt ..... hmm ... pozwól mi poszukać ... Aplikacja komercyjna w D ... hmm ... cóż ... . Po prostu poczekaj ... Wiem, ale ... po prostu nie mogę sobie tego przypomnieć ... na pewno są ... po prostu poczekaj ... wciąż szukam ... poczekaj!
Simple Fellow
7

D robi wrażenie, a książka Andrieja o tym jest dobrze napisana. Ale jak powiedzieli inni, potrzebujesz narzędzi i wsparcia platformy. GDC może z czasem być odpowiedzią na jedno i drugie.

Widziałeś to?

„Debugger GNU dodaje obsługę języka D”: http://www.linux.com/news/enterprise/biz-enterprise/358956-gnu-debugger-adds-d-language-support

Ponadto witryna digitalmars zawiera strony omawiające interfejsy do C i C ++ (dla tych bibliotek, bez których nie możesz żyć). Zastanawiam się, czy są jakieś narzędzia, które mając plik nagłówkowy C, podejmą próbę napisania prototypów D.

Osobiście nie chciałbym w tym momencie naciskać na zrobienie dużego projektu w D, ale użyłbym D do narzędzi wewnętrznych, zdobywania doświadczenia i wprowadzania do niego innych.

Pierwotne pytanie dotyczyło tego, czy D jest wiarygodną alternatywą dla Javy i C ++. Nie sądzę, żeby D i Java naprawdę ze sobą konkurowały w praktyce; D konkuruje z C ++ i teraz Go. Inne pytania dotyczą różnic między D i Go, ale Go jest ogólnie uważane za łatwiejsze w użyciu. Podejrzewam więc, że przyszłość D zależy w dużej mierze od tego, ile jest miejsca na oddychanie między C ++, obecnym królem wzgórza, a Go, znacznie łatwiejszą alternatywą, która ma wsparcie Google.

AKTUALIZACJA: Właśnie odkryłem, że mój ulubiony rozdział książki Andrieja , ten o współbieżności, jest dostępny bezpłatnie online. Zdecydowanie warte przeczytania!

A oto loooong dyskusja o zaletach / celów / podejść idź i D .

AmigoNico
źródło
Niewiele wiem o Rust; Czekam, aż trafi 1.0. Ale masz rację, zdecydowanie wygląda na warte obejrzenia i wydaje się, że gra w tej samej przestrzeni.
AmigoNico
1
Jedyne, co mi się nie podoba w D, to system czcionek. Wygląda staro. Hierarchie OO są uciążliwe. Nie podoba mi się to jako punkt wyjścia. Rdza jest w tym lepsza.
Germán Diago,
4

Wygląda na to, że udzielono odpowiedzi na pytanie. D to lepszy język w porównaniu z C ++.

Pytanie, czy ze względów praktycznych D ma wokół lepszą infrastrukturę, jest drugorzędne.

Krótko mówiąc, jeśli oba są zupełnie nowymi językami bez żadnego wsparcia wokół nich, D jest lepszym językiem, a więc lepszym językiem.

vfclists
źródło
4

Jako język zawsze uważałem, że D jest bliżej C # niż C ++. Nie w funkcjach i bibliotekach, ale w „odczuwaniu”. Jest o wiele czystszy, przyjemniejszy ... zabawny (niż C ++). IMHO największą przeszkodą w staniu się wiarygodną alternatywą są narzędzia, IDE i debugger. Jeśli D pokona pewne przeszkody w powszechnym użyciu / przyjęciu, pojawi się więcej narzędzi i bibliotek. (Sam wrócę do D, jeśli będzie użyteczne IDE i debugger).

gerleim
źródło
a co z wtyczką mono-d ?: mono-d.alexanderbothe.com
user1284631
3

Świetnie sprawdza się w przypadku moich własnych projektów domowych. Używałbym go w projektach pracodawców, ale nie wiedząc, jak trudno byłoby im znaleźć kogoś, kto przejmie źródło, gdy przejdę dalej. Nie ma technicznych powodów, aby tego unikać, przynajmniej na obsługiwanych platformach. (odpukać)

DarenW
źródło
3

Jednym ze sposobów jest szukanie pracy w Twojej okolicy. Znajdź pracę, którą chciałbyś wykonywać i zobacz, o jakie umiejętności proszą. Jeśli proszą o C ++, Ruby, Oracle lub D, to jest to umiejętność, która głównie pomoże ci znaleźć pracę, którą chcesz.

Peter Lawrey
źródło
3

Wygląda na bardzo dobrze zaprojektowany język; znacznie lepiej niż C - C ++ - Objective C. Mogę żyć przez chwilę bez IDE lub debuggera, ale nie bez dobrej, udokumentowanej biblioteki dla D 2.0.

Wrócę za 6 miesięcy ...

Bill the Lizard
źródło