D est-il une alternative crédible à Java et C ++? [fermé]

163

Le langage D est-il une alternative crédible à Java et C ++? Que faudra-t-il pour devenir une alternative crédible? Dois-je prendre la peine de l'apprendre? Mérite-t-il évangéliser?

La principale raison pour laquelle je pose la question est qu'avec le nouveau standard C ++ (c ++ 0x) presque ici, il est clair pour moi que le langage a bien dépassé le point de non-retour par rapport à quiconque l'a jamais compris. Je sais que C / C ++ ne mourra jamais, mais à un moment donné, nous devons avancer. Même COBOL a fait son temps et Java a à bien des égards défait le C ++. Alors, quelle est la prochaine étape? Est-ce que D remplit la facture?

Mark Kegel
la source
23
COBOL revient, mais allez-y et apprenez D si cela vous chatouille. La lecture des feuilles de thé a autant de chance que toute autre chose de prédire The Next Big Language.
Shog9 du
5
Je ne suis pas préoccupé par le prochain grand langage, je suis plus préoccupé par le fait que si je disais à mon autre employeur que je voulais utiliser D sur mon prochain projet, je ne serais pas pris au sérieux parce que la langue n'est pas t encore.
Mark Kegel le
22
il faut noter que les pages "D vs. C ++" de Digital Mars sont hautement discriminantes par rapport au C ++. plusieurs fois ils disent "c ++ ne peut pas le faire", C ++ peut le faire
Johannes Schaub - litb
23
@Johannes: Ce n'est pas ce que la langue rend possible, c'est ce que la langue rend facile. - Brian Hurt
missingfaktor
9
@Rahul, d'accord, mais ils devraient le dire. comme "ce n'est pas facile à faire en C ++" et non pas que ce n'est pas du tout possible.
Johannes Schaub - litb

Réponses:

130

Ce qui détermine le succès et la popularité d'un langage de programmation pour le développement de logiciels dans le monde réel n'est que partiellement lié à la qualité du langage lui-même. En tant que langage pur, D a sans doute de nombreux avantages par rapport à C ++ et Java. À tout le moins, c'est une alternative crédible en tant que langage pur, toutes choses égales par ailleurs.

Cependant, d'autres choses comptent pour le développement logiciel - presque plus que le langage lui-même: portabilité (sur combien de plates-formes s'exécute-t-il), prise en charge du débogueur, prise en charge de l'IDE, qualité de la bibliothèque standard, prise en charge de la bibliothèque dynamique, liaisons pour les API communes, documentation, le développeur soutien communautaire, dynamique et commercial, pour n'en nommer que quelques-uns. Dans chacun de ces aspects, D est désespérément derrière Java, C ++ et C #. En fait, je dirais que c'est même derrière les soi-disant langages de "scripting" comme Python, Perl, PHP, Ruby et même JavaScript à cet égard.

Pour être franc, vous ne pouvez tout simplement pas créer une application multiplateforme à grande échelle à l'aide de D.Avec une bibliothèque standard immature, aucune prise en charge dans les IDE modernes (il existe des plugins pour Visual Studio et Xamarin Studio / MonoDevelop), limité support de bibliothèque dynamique / partagée, et peu de liaisons avec d'autres langages, D n'est tout simplement pas une option aujourd'hui.

Si vous aimez ce que vous voyez de D, par tous les moyens, apprenez-le - cela ne devrait pas prendre longtemps si vous connaissez déjà Java et C ++. Je ne pense pas que l'évangélisation serait utile - à ce stade, si D veut réussir, ce dont il a vraiment besoin, c'est que plus de gens l'utilisent silencieusement et résolvent ses principales lacunes comme la bibliothèque standard et le support IDE.

Enfin, comme pour C ++, alors que la plupart conviennent que le langage est trop complexe, des milliers d'entreprises utilisent avec succès C ++ dans le cadre d'un mélange sain de langages en n'autorisant qu'un sous-ensemble plus petit et bien défini du langage. Il est toujours difficile de battre C ++ lorsque des performances brutes et une faible utilisation de la mémoire sont nécessaires.

dmazzoni
la source
8
dire qu'il n'a "aucun support dans les IDE modernes" l'exagère un peu. Il y a un support dans eclipse. Ce n'est pas encore la première classe, mais il est là et s'améliore.
BCS
46
L'absence de preuve n'est pas une preuve d'absence.
FeepingCreature
29
Si l'on fait une affirmation positive telle que «il y a des licornes roses», on doit offrir des preuves avant qu'il ne soit raisonnable d'accepter. Certes, cela ne signifie pas qu'il n'y a pas de licornes roses comme l'a déclaré @FeepingCreature, mais simplement affirmer que ce n'est pas un argument convaincant ou valide.
JoshD
8
@Feeping: C'est un adorable dicton que James Randi aime lancer, mais ce n'est tout simplement pas vrai. Si vos tests ont des preuves raisonnables soutenant que le test devrait trouver quelque chose, mais ne le faites pas, c'est une preuve d'absence.
GManNickG
9
Je veux ajouter que nous construisons des applications à grande échelle avec D1 et Tango. D'accord, nous ne sommes pas multiplateformes mais uniquement Linux, mais quand même. Toute notre infrastructure est écrite en D et nous traitons plus de 30k requêtes par heure avec un gros back-end DHT également écrit en D.
Marenz
109

Juste pour ajouter mes propres expériences au mélange:

Il y a environ un an, j'ai travaillé sur un projet de jeu à petite échelle (3 codeurs) d'une durée de 3 mois, où nous utilisions D comme langue principale. Nous l'avons choisi en partie comme une expérience, en partie parce qu'il avait déjà des liaisons pour SDL et certains autres outils que nous utilisions, et surtout pour les avantages qu'il semble avoir par rapport au C ++.

Nous avons adoré l'utiliser. C'était rapide à apprendre et facile à écrire. Beaucoup de ses fonctionnalités se sont avérées inestimables, et elles me manquent étant retournées au C ++.

Cependant, les points suivants ont rendu nos vies plus difficiles:

  1. Il n'y avait pas de bon IDE à l'époque, ce qui était un problème majeur. Nous avons fini par créer le nôtre en personnalisant Scite. Cela fonctionnait bien, mais ce n'était pas idéal.
  2. Il n'y avait pas de débogueur à l'époque. Nous avons réussi à faire fonctionner WINDBG sur une base aléatoire, mais ce n'était pas fiable. Le débogage du code sans débogueur rendait parfois la vie infernale.
  3. Il y avait 2 bibliothèques standards à choisir à l'époque (Tango et Phobos). Nous avons commencé avec l'un, sommes passés à l'autre et avions vraiment besoin d'un mélange de fonctionnalités des deux (Tangobos!). Cela a causé des maux de tête et une réécriture du code.
  4. Liaisons à d'autres outils non disponibles. En fin de compte, nous avons dû passer à DirectX (pour des raisons que je n'entrerai pas). Il n'y avait pas de liaisons pour DirectX disponibles, nous avons donc dû écrire la nôtre en C ++, la construire en tant que .dll et la lier à cela. C'était un travail assez désagréable et a pris du temps.

Dans l'ensemble, nous avons adoré écrire D. Cela a rendu l'écriture de code facile et a été rapide à apprendre. Les problèmes que j'ai mentionnés font écho à la réponse qui a été acceptée pour cette question - ce sont les bits «supplémentaires» qui doivent être adressés en D, le cœur de celui-ci est solide.

xan
la source
4
entrée cool ... maintenant il y a un débogueur !! :)
bbqchickenrobot
14
Je ne comprends pas pourquoi DirectX est un problème. Je ne suis pas un programmeur D, mais je pensais que D pouvait comprendre C? Et DirectX a une API C?
il est relativement facile d'utiliser le contenu DirectX avec des interfaces D natives, donc l'écriture d'un wrapper en c ++ n'est pas nécessaire sauf dans certains cas particuliers
Quonux
@Quonux: C'était notre expérience à l'époque, en 08. Il ne fait aucun doute que les choses ont beaucoup évolué depuis. Je ne me souviens plus des détails sanglants.
xan
1
Mise à jour 2019: le langage de programmation D s'est considérablement développé. Vous pouvez désormais utiliser GDB prêt à l'emploi avec Dlang. DPP vous permet d'inclure directement n'importe quel en-tête C dans Dlang. Calypso vous permet d'utiliser n'importe quelle bibliothèque C ++ dans Dlang, y compris Qt - elle a quelques bogues, mais cela fonctionne en grande partie.
noɥʇʎԀʎzɐɹƆ
60

Je suis d'accord que C ++ est en train de devenir un langage sans issue - et cela me peine de le dire, après l'avoir utilisé pendant les 17 dernières années.

Je pense que D est le successeur légitime de C ++. Du point de vue de la langue, il «fait tout ce qu'il faut» (même si je ne suis pas d'accord avec chaque minute de décision). Je pense qu'avec le déclin du C et du C ++, il n'y a pas d'autre langage de niveau système qui puisse vraiment faire ce qu'il fait, tout en se tenant debout dans le monde des langages modernes - sauf D! Non seulement D remplit ce rôle - il y excelle! Un coup d'œil à D1.x devrait suffire à vous en convaincre - mais lorsque vous regardez D2.0, cela vous épate. Je suis d'avis qu'il n'y a pas d'autre langage aujourd'hui qui fonctionne aussi bien que D2.0 pour relier les paradigmes de programmation impératifs et fonctionnels - ce qui ne fera que devenir plus significatif dans les années à venir.

Le manque d'acceptation générale - ou même de visibilité - ainsi que les bibliothèques matures à grande échelle - sont un obstacle bien sûr. Cependant, je ne pense pas que vous puissiez l'annuler à cause de cela. Je suis convaincu que D va se développer pour devenir l' une des langues les plus importantes autour dans les prochaines années - et ceux qui prennent ce vont être bien placé au sérieux maintenant prendre la tête le moment venu.

Je pense que la différence sera due, en grande partie, à l'implication d'Andrei Alexandrescu. Cela ne discrédite en aucun cas Walter Bright, qui a fait un travail considérable pour amener D au monde. Mais Alexandrescu est une figure importante et convaincante de la communauté C ++ - et c'est de là que la plupart des commutateurs D potentiels vont venir. Et il a également apporté une contribution significative et importante à D2.0 dans son soutien à la programmation fonctionnelle.

Il se peut encore que D soit condamné à être le Betamax des langages de niveau système - mais mon argent est là pour tourner dans les deux prochaines années.

philsquared
la source
20
C n'est pas en déclin pour la programmation au niveau des systèmes. Linux, Windows et OS X sont tous développés en C. De même, de nombreux micro-contrôleurs et systèmes d'exploitation pour micro-contrôleurs sont programmés à l'aide de C.
Kevin
12
Je ne pense pas que D "fasse toutes les bonnes choses". La bonne chose serait de recommencer à zéro, pas d'essayer de faire un meilleur C ++. Je pense que des changements plus radicaux sont nécessaires pour justifier un abandon à grande échelle du C ++.
jalf
9
Kevin: Windows et OS X ne sont pas développés en C. Des morceaux du noyau le sont, bien sûr, mais Windows utilise des tas de C ++ et OS X Obj-C. Linux est le seul OS que je connaisse où C a été élevé au statut de One True Language et rien d'autre n'est utilisé.
jalf
16
Belle prédiction. Cela fait 2 ans depuis ce post, et D n'est pas plus proche de l'adoption traditionnelle.
mikerobi du
18
@mikeobi LOL! Les deux ans commencent à partir de chaque fois que vous lisez cette phrase ;-)
philsquared
20

J'aime que D soit le travail d'un génie, avant tout d'un esprit - Walter Bright, dont le compilateur Zortech était fantastique en son temps.

En revanche, C ++ est trop conçu par un comité, même si Bjarne est une influence. Trop de fonctionnalités complémentaires et une nouvelle syntaxe étrange. Cette différence se traduit par la facilité d'apprentissage et la facilité d'utilisation au quotidien, moins de bugs.

Les langages plus cohérents conduisent à une meilleure productivité et à la joie des programmeurs - mais c'est subjectif et discutable! (Je suppose que je devrais voter ma propre réponse)

DarenW
la source
9
Il y a un autre génie qui y travaille maintenant aussi - Andrei Alexandrescu. Ce qu'il a fait avec D2.0 est, à mon humble avis, au moins aussi étonnant que ce que Walter a fait avec D1.x. Entre les deux (sans oublier les nombreux autres contributeurs), D devient une langue avec laquelle il faut compter. Regarder cet espace
philsquared
5
faire que 3 (ou plus) sacrément bons programmeurs: Bartosz Milewski
BCS
7
Donc, C ++ a été créé à l'origine par un gars vraiment intelligent, et est maintenant contrôlé par un comité de personnes vraiment intelligentes, alors que D a été créé à l'origine par un gars vraiment intelligent, et est maintenant contrôlé par un ... groupe de personnes vraiment intelligentes. Ouais, je vois comment cela rend D supérieur. ;) (indice: la laideur du C ++ n'a rien à voir avec les comités. C'est une conséquence des objectifs de conception du langage. Il était censé être (presque) un sous-ensemble de C. D ne l'est pas, et n'était pas censé l'être , ce qui signifie qu'il pourrait éviter beaucoup de verrues (au prix d'éviter également la popularité qu'il a apportée)
jalf
4
@jalf vous avez raison de dire que la "laideur" du C ++ n'est pas due au fait d'avoir été conçu par un comité. C'est la lenteur de l'évolution, cependant.
philsquared
15

D est une bonne langue et décemment populaire , mais comme toutes les langues, ce n'est qu'un autre outil. L'outil à utiliser dépend du type de personne que vous êtes, de votre façon de penser, de l'environnement dans lequel vous travaillez, des restrictions de langues qui s'appliquent au programme et, surtout, au programme lui-même. Si vous avez le temps, je vous recommande vivement d'apprendre D. Le pire des cas, vous ne l'utiliserez jamais. Plus probablement, vous apprendrez quels sont les aspects que vous aimez le plus, et dans quelles conditions il brille le plus, et en profiterez pour créer de nouveaux programmes.

Je recommanderais de consulter le tableau de comparaison D pour voir quelles sont les fonctionnalités de la langue et voir si cela vous convient.

Spodi
la source
10

Le langage D est moderne. Aucune langue n'est parfaite et cela ne fait aucun doute. Mais les langues sont nées pour rendre la vie plus facile. Où le langage D par rapport au C ++ a beaucoup de bonnes fonctionnalités, en termes de complexité. De nombreuses autres spécialités de combinaison de langues sont impliquées, ce qui aide les codeurs à coder plus rapidement, avec des fonctionnalités TOP introduites par d'autres langues. S'il vous plaît voir aussi: pour plus de détails sur D et d'autres langues

  • D vs C ++, c'est la compatibilité, où d'énormes langages C ++ sont impliqués et nécessitent une compatibilité avec D. D permettent déjà une compatibilité à 100% avec C, ce qui est encore une bonne victoire.

  • D vs C ++, C ++ est à mon avis un langage très sympa, mais difficile à coder, et prend du temps, nécessite de plus en plus d'expérience pour réussir, mais D permet de faire de même avec simplicité

  • D vs C ++, je ne suis pas sûr que C ++ le fasse, mais D n'autorise aucune affectation de variable de restriction de type en utilisant "auto", ce qui est bon d'avoir une variable dynamique, lorsque vous le souhaitez, vous pouvez créer un type strict

  • D vs C ++, si vous avez une autre expérience linguistique, vous pouvez commencer directement avec lui, il a une feuille de route d'apprentissage facile, et il est conçu par une équipe expérimentée et le support de l'entreprise

  • D vs C ++, la très belle chose que j'ai trouvée de D, est le style de code, il donne l'apparence et la sensation exactement les mêmes que C / C ++, tout en codant cela rappelle que je fais du C / C ++ vraiment moderne qui a appelé D

Il y a beaucoup plus de bonnes raisons pour le langage D, il n'y a aucune raison de sous-estimer une langue, c'est toujours le choix de l'utilisateur.

Communauté
la source
7

Cela dépend vraiment de vos besoins - des applications commerciales à grande échelle écrites en D do exister sur le côté serveur, et que D (typiquement en utilisant Tango / Mango) est un ajustement parfait, et vous êtes susceptibles d'être en mesure de servir plus de demandes qu'avec toute autre langue / plateforme.

Pour des solutions plus spécialisées en termes de protocoles et d'interactivité (qui sont nombreuses), vous aurez plus de difficultés à trouver les bibliothèques nécessaires, et le manque d'outils est susceptible de vous affecter davantage.

larsivi
la source
1
pouvez-vous donner un exemple d'une telle application commerciale?
Alexander Malakhov
1
@ Alexander Malakhov: A ... hmm ... bonne question .... Je suis heureux que vous ayez demandé si une application commerciale existe .... question bien pensée ... certainement ..... J'admire ... ... c'est le genre de questions que nous devrions nous poser ..... montre votre intellect ..... hmm ... laissez-moi chercher ... Application commerciale en D ... hmm .... eh bien ... .attendez ... je sais mais ... je ne m'en souviens pas ... il y en a certainement ... attendez ... je cherche toujours ... attendez!
Simple Fellow
7

D est assez impressionnant et le livre d'Andrei à ce sujet est bien écrit. Mais comme d'autres l'ont dit, vous avez besoin des outils et du support de la plate-forme. GDC peut, au fil du temps, être la réponse aux deux.

Avez-vous vu cette?

«Le débogueur GNU ajoute la prise en charge du langage D»: http://www.linux.com/news/enterprise/biz-enterprise/358956-gnu-debugger-adds-d-language-support

En outre, le site digitalmars contient des pages traitant de l'interfaçage avec C et C ++ (pour les bibliothèques dont vous ne pouvez tout simplement pas vous passer). Je me demande s'il existe des outils qui, étant donné un fichier d'en-tête C, tenteront d'écrire les prototypes D.

Personnellement, je ne voudrais pas à ce stade pousser pour faire un grand projet en D, mais je le ferais utiliser D pour les outils en interne, acquérir de l' expérience avec elle et en introduisant d' autres à lui.

La question initiale était de savoir si D est une alternative crédible à Java et C ++. Je ne pense pas que D et Java vont vraiment rivaliser dans la pratique; D est en concurrence avec C ++ et maintenant Go. D'autres questions abordent les différences entre D et Go, mais Go est généralement considéré comme plus facile à utiliser. Je soupçonne donc que l'avenir de D dépend beaucoup de la marge de manœuvre qui lui reste pour respirer entre C ++, l'actuel roi de la colline, et Go, l'alternative beaucoup plus facile qui bénéficie du soutien de Google.

MISE À JOUR: Je viens de découvrir que mon chapitre préféré du livre d'Andrei , celui sur la concurrence, est disponible gratuitement en ligne. Vaut vraiment le détour!

Et voici une discussion Loooong sur les mérites relatifs / objectifs / approches de Go et D .

AmigoNico
la source
Je ne sais pas grand-chose sur Rust; J'attends qu'il atteigne la 1.0. Mais vous avez raison, cela vaut vraiment la peine d'être regardé et semble jouer dans ce même espace.
AmigoNico
1
La seule chose que je n'aime pas chez D est le système de types. Ça a l'air vieux. Les hiérarchies OO sont intrusives. Je n'aime pas ça comme point de départ. La rouille est meilleure dans ce domaine.
Germán Diago
4

Il semble que la question ait été répondue. D est le meilleur langage par rapport au C ++.

La question de savoir si, à des fins pratiques, D dispose d'une meilleure infrastructure autour est secondaire.

Bref, si ce sont tous les deux de nouvelles langues sans aucun support autour d'elles, D est la meilleure langue, ergo c'est la meilleure langue.

vfclists
la source
4

En tant que langage, j'ai toujours pensé que D était plus proche du C # que du C ++. Pas dans les fonctionnalités et les bibliothèques, mais dans le "feeling". C'est beaucoup plus propre, plus agréable ... amusant (que C ++). IMHO le plus grand obstacle à devenir une alternative crédible est les outils, l'IDE et le débogueur. Si D surmonte certains obstacles d'une utilisation / adoption généralisée, davantage d'outils et de bibliothèques se manifesteront. (Je reviendrai moi-même sur D, s'il y a un IDE et un débogueur utilisables.)

Gerleim
la source
qu'en est-il du plug-in mono-d?: mono-d.alexanderbothe.com
user1284631
3

Fonctionne très bien pour mes propres projets pour animaux de compagnie. Je l'utiliserais pour les projets des employeurs mais pour ne pas savoir à quel point il leur serait difficile de trouver quelqu'un pour reprendre la source après mon départ. Il n'y a aucune raison technique de l'éviter, du moins sur les plateformes prises en charge. (touchons du bois)

DarenW
la source
3

Une approche consiste à rechercher des emplois dans votre région. Trouvez les emplois que vous aimeriez faire et voyez quelles compétences ils recherchent. S'ils demandent C ++ ou Ruby ou Oracle ou D, c'est la compétence qui est principalement pour vous aider à obtenir l'emploi que vous voulez.

Peter Lawrey
la source
3

Cela ressemble à un langage très bien conçu; bien mieux que C - C ++ - Objective C. Je peux vivre sans IDE ou débogueur pendant un certain temps, mais pas sans une bonne bibliothèque documentée pour D 2.0.

Je reviendrai dans 6 mois ...

Bill le lézard
la source