45 votes

Le langage D comporte-t-il plusieurs bibliothèques standard et pose-t-il des problèmes avec GC?

Je me demande quelle est la maturité et la stabilité du D, et s'il pourrait remplacer utilement le C / C ++.

Je sais qu’il existe actuellement deux bibliothèques standard (Phobos et Tango). Est-il toujours vrai qu'il n'y a pas de bibliothèque standard unifiée?

De plus, j'ai entendu dire il y a quelque temps que les langages ont des problèmes au niveau des limites du code GCed / non GCed. Je n'ai trouvé aucune référence à ce sujet sur le site D, ce problème est-il toujours vrai?

34voto

Jonathan M Davis Points 19569

La Version 1 de D est mature et stable, et il y a certainement des gens qui l'utilisent pour de vrai travail. Phobos est la seule bibliothèque standard que D a jamais eu, ou susceptible pourra jamais avoir, mais de D1 Phobos est pas que les diverses bibliothèques de tiers ont été créés pour combler les lacunes. Le Tango est la plus importante et la plus largement utilisée de la troisième partie de la bibliothèque (donc pourquoi il atteint souvent appelé une deuxième bibliothèque standard, même si elle ne l'est pas, et Walter Bright seront prompts à souligner qu'il n'est pas). Cependant, de Tango et de Phobos en D1 ne mélangez pas très bien (IIRC parce que le Tango qui remplace la norme des choses comme le garbage collector), donc il ya une bonne chance que quelqu'un de la programmation en D1 va utiliser Tango sans Phobos. Aussi, D1 est pris en charge par plusieurs compilateurs en plus de l'compilateur de Numérique, Mars - y compris les PMA et les gdc.

La Version 2 de D est simplement en train d'atteindre la maturité et de la stabilité. Ils ont arrêté de faire de grands changements de la langue, de sorte que vous n'avez plus à vous soucier de tout briser sur vous avec un compilateur de mise à jour comme ce fut le cas dans le passé alors qu'ils étaient encore clouage de la langue vers le bas. En fait, il est maintenant assez mature qui Andrei Alexandrescu publié Le D Langage de Programmation comme définitif de ressources sur la langue qui doit rester valables sauf erreurs dans le texte (et c'est l'un des meilleur langage de programmation des livres que j'ai lu trop). Cependant, il ya encore beaucoup de correction de bugs en cours, donc c'est tout à fait possible d'exécuter dans un bug qui vous cause un peu juste de l'irritation pour votre application particulière. C'est certainement assez mature et assez stable pour faire du vrai travail avec elle, mais sachez qu'il est tout à fait possible d'exécuter dans les bugs.

Le Tango n'a pas encore été porté à la D2, il n'est donc pas vraiment une option lors de la programmation en D2. Cependant, Phobos est à venir le long de tout à fait bien maintenant. Il se fait beaucoup de grands ajouts (en fait, il a conteneurs maintenant! - le manque de conteneurs dans Phobos être une grande raison de l'utilisation de Tango en D1 plutôt que de Phobos), et a quelques très puissante en elle - std.l'algorithme est particulièrement agréable. La voie d'poignées lambda fonctions, des fonctions imbriquées, et des pointeurs de fonction rend le passage de fonctions à des algorithmes d'années-lumière plus facile qu'il ne l'est dans la norme actuelle de C++. Aussi, il a été résolu dans D2, de sorte que le garbage collector et quelques autres trucs que le Tango était une duplication est maintenant séparée de Phobos. Donc, une fois que le Tango a été porté à D2, vous serez en mesure de mélanger Phobos et Tango code - même si, comme cela a été souligné dans une précédente réponse, Phobos et Tango utiliser plutôt les différentes philosophies de conception (Tango être très Java-like et Phobos fortement à l'aide de modèles et méta-programmation avec le duck-typing plutôt que des interfaces), donc je ne sais pas comment ils vont mix de ce point de vue.

Actuellement, je crois que la dmd est le seul compilateur qui est up-to-date en ce qui concerne les spécifications pour la D2, mais je crois qu'il ya du travail fait sur les gdc et les PMA D compilateurs (actif que le travail est, je ne sais pas). Aussi, Walter Bright est actuellement en train de travailler sur la version 64 bits du port de la dmd, nous allons donc être prise en 64 bits natif de compilation un de ces jours dans relativement peu de temps.

Dans l'ensemble, je dirais que D2 est prêt pour l'utilisation, mais vous ne devez être conscient qu'il reste encore beaucoup de travail à faire pour elle en ce qui concerne les corrections de bogues et comme. Donc, D2 est définitivement prêt pour hobby et potentiellement graves pour l'utiliser au travail, mais si vous avez vraiment besoin de la stabilité (comme, si vous êtes de Boeing et d'une erreur, cela signifie la mort), alors D1 serait probablement encore être un meilleur choix. Bien sûr, la chose importante à retenir à propos de D2, c'est qu'il a beaucoup de fonctionnalités que D1 n'ont pas, de sorte que si vous avez vraiment besoin de solide comme le roc de stabilité, puis D2 est probablement la voie à suivre. Heureusement, il continue de mûrir et de se stabiliser, de sorte que le temps est certainement bientôt, il n'y aura aucun doute que l'utilisation d'D2 serait mieux.

Peu importe, tant que D1 et D2 sont de bons remplaçants pour le C et le C++ dans le cas général. Ils peuvent faire ce que le C et le C++ n', et (surtout dans le cas de D2) peut sans doute faire mieux. Le principal lieu D pourrait tomber en arrière dans la façon dont il est optimisé. Il y a beaucoup de code qui sera tout aussi rapidement dans D comme C ou C++, mais il reste encore beaucoup de travail à faire sur D, donc il y a beaucoup de place pour l'optimiser un peu plus, et il sera parfois à la traîne C et C++ pour plus d'efficacité. Donc, en général, D est efficace, mais si vous avez vraiment besoin d'autant d'efficacité que vous pouvez obtenir, il pourrait ne pas encore être assez bon pour ce que vous avez besoin (même si c'est d'y arriver). Aussi, il ya beaucoup de la maturité de C et de C++ bibliothèques, tandis que D n'est pas n'importe où près le même niveau de code flottant là-bas pour travailler avec. Tout C code peut être utilisé avec D comme C les fonctions peuvent être appelées à partir de D, et certains le code C++ pourrait être (si il y a assez peu de restrictions lors du mélange de code C++ avec D), donc ce n'est pas être un obstacle, mais c'est quelque chose d'être conscient de. Le principal lieu où il en manque serait bibliothèques GUI. Il y en a pour D1, et il y a du travail effectué sur le GUI bibliothèques pour la D2, mais je ne crois pas qu'aucun d'entre eux sont particulièrement mature à ce point.

Donc, comme pour tout, la langue dans laquelle vous devez utiliser dépend de ce que vous faites. D va faire la plupart des choses et de les faire bien. Mais il ne fait pas tout, et il est encore en phase de maturation. Personnellement, à ce stade, j'utilise D, sauf si j'ai besoin d'utiliser autre chose pour un projet particulier, ce qui n'est pas souvent, à moins que le projet était déjà écrit dans autre chose, et il n'est pas logique de port dès maintenant. Donc, j'avais à vous suggère fortement d'utiliser D, mais vous aurez à le regarder et de l'utiliser pour voir si c'est vraiment à faire ce que vous voulez à ce point.

28voto

Je recommande d'utiliser D2 avec Phobos. C'est au moment où le langage est suffisamment agréable et stable pour compenser les frustrations occasionnelles causées par des problèmes de mise en œuvre.

12voto

CyberShadow Points 13244

Je sais qu'il y a actuellement deux bibliothèques standard (Phobos et Tango), donc je suppose qu'il pourrait y avoir des gens qui essaient de les unifier.

"L'Unification" est extrêmement peu probable en raison de différences dans les licences. Quand le Tango va être porté à D 2.0, vous serez en mesure de l'utiliser avec Phobos, ce qui n'est pas (facilement) possible D 1.0.

En outre, j'ai entendu il y a quelques temps que les langues a des problèmes sur les limites de GCed/non-GCed code. Je ne pouvais pas trouver aucune référence à ce sujet sur le D site web, de sorte que ce problème est-il toujours vrai?

Je crois qu'il y a seulement des problèmes si vous n'êtes pas prudent avec la façon dont vous gérer la mémoire. Si toutes les références à un catalogue global alloué par l'objet est stocké à l'extérieur de la mémoire régions marquées comme GC racines, le GC considère l'objet non référencé et va le supprimer.

Si j'avais à choisir D du C de remplacement aujourd'hui, ce que D (v, v 1.0 ou 2.0) et en ce que la bibliothèque standard suggérez-vous?

Phobos et Tango vont en quelque sorte dans des directions différentes. Phobos (2.0 D) liens en étroite collaboration avec D2 nouvelles fonctionnalités. Le Tango est plus riche en fonctionnalités, et contient des modules qui ne sont pas présents dans Phobos, par exemple HTTP/FTP support client, les différentes classes de chiffrement, etc. Ils ont également suivre les différentes philosophies de conception (Phobos est plus impératif/meta-programmation-ish, tandis que le Tango est très strictement la programmation orientée objet, et donc similaire à Java à cet égard).

5voto

Clifford Points 29933

Je me demande comment une mature et stable D est, et si elle pourrait être un bon remplacement pour le C/C++.

Je me méfie de l'utilisation de toute langue qui n'était pas encore soutenu par un corps de normes telles que la norme ANSI, ISO ou de l'ECMA. C'est peut-être un indicateur de la maturité. Cela dit Java et Delphi, par exemple, entrent dans cette catégorie, et alors que je n'utilise pas ces langues, ils pourraient sans doute être décrit comme "mature".

Une autre mesure pourrait être le nombre et la qualité des livres et des articles écrits pour la langue. Il y a un livre pour D que je suis conscient de par Andrei Alexandrescu. Il a également écrit un long article sur la langue pour le Dr Dobbs, où il traite en particulier de la bibliothèque standard de problème.

4voto

Roger Rabbit Points 41

J'ai eu une bonne expérience en écrivant un petit jeu en D1 avec Phobos et SDL, mais c'était un assez petit projet.

A mon avis, D manque:

  • un forum Web officiel où les gens peuvent obtenir de l'aide et chercher des réponses (PAS les groupes de discussion)
  • un référentiel officiel pour de nombreux SDK convertis en D (par exemple, SDL, Gtk, etc. Ils sont souvent difficiles à trouver et à utiliser, même lorsqu'ils existent.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X