Question

Je me demande à quel point D mature et stable D est, et si cela pourrait être un bon remplacement pour C / C ++.

Je sais qu'il existe actuellement deux bibliothèques standard (phobos et tango).Est-il toujours le cas qu'il n'y a pas de bibliothèque standard unifiée?

En outre, j'ai entendu il y a quelque temps que les langues ont des problèmes sur les limites du code GCED / non giqué.Je ne pouvais trouver aucune référence à ce sujet sur le site Web, de même que ce problème est toujours vrai?

Était-ce utile?

La solution

La version 1 de D est mature et stable, et il y a des gens qui l'utilisent pour un travail réel. Phobos est la seule bibliothèque standard que D a jamais eu ou si probablement aura jamais, mais les phobos de D1 font suffisamment que diverses bibliothèques tiers ont été créées pour combler les lacunes. Tango est la plus grande de celles-ci et constitue la bibliothèque tiers la plus utilisée (pourquoi elle est donc fréquemment appelée une deuxième bibliothèque standard, même si ce n'est pas le cas, et Walter Bright sera rapide à souligner que ce n'est pas). Cependant, le tango et les phobos dans D1 ne se mélangent pas très bien (IIRC parce que Tango remplace certaines choses standard telles que le collecteur des ordures), il y a donc une bonne chance que quelqu'un de programmation dans D1 utilise le tango sans phobos. De plus, D1 est pris en charge par plusieurs compilateurs en plus du compilateur principal de Digital Mars - y compris PMA et GDC.

La version 2 de D vise maintenant la maturité et la stabilité. Ils ont cessé de faire des changements majeurs à la langue, de sorte que vous n'avez donc pas à vous soucier de tout ce que vous vous rompez avec une mise à jour du compilateur, comme auparavant, alors qu'ils clouaient toujours la langue. En fait, il est maintenant mature suffisamment mature que Andrei Alexandrescu a publié le langage de programmation D en tant que ressource définitive sur la langue qui devrait rester en vigueur des erreurs de sauvegarde dans le texte (et c'est l'un des meilleurs livres de langage de programmation que je 'j'ai lu aussi). Cependant, il reste encore beaucoup de correction de bugs, il est donc tout à fait possible de rencontrer un bogue qui vous entraîne un peu d'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 de rencontrer des bugs.

tango n'a pas encore été porté à D2, ce n'est donc pas vraiment une option lors de la programmation en D2. Cependant, Phobos arrive assez bien maintenant. Il y a beaucoup de bons ajouts (il a en fait des conteneurs maintenant! - Le manque de conteneurs dans des phobos étant une grande raison d'utiliser le tango dans D1 plutôt que des phobos) et a des trucs très puissants dedans - std.algorithm est particulièrement gentil. La façon dont les fonctions de lambda, les fonctions imbriquées et les pointeurs de fonction facilitent les algorithmes d'algorithmes les années-lumière plus facilement que dans la norme actuelle de C ++. De plus, il a été fixé dans D2 de sorte que le collecteur des ordures et d'autres éléments centraux que le tango soit duplication du tango est maintenant séparé des phobos. Donc, une fois que Tango a été porté à D2, vous pourrez mélanger des phobos et du code tango - bien que, comme indiqué dans une réponse précédente, des phobos et du tango utilisent des philosophies de conception plutôt différentes (Tango étant très java-like et phobos Heureusement à l'aide de modèles et de méta-programmation avec typing de canard plutôt que des interfaces), donc je ne sais pas à quel point ils vont bien mélanger de ce point de vue.

Actuellement, je pense que DMD est le seul compilateur à jour en ce qui concerne la spécification de D2, mais je pense qu'il y a du travail effectué sur les compilateurs de la GDC et des PMA D (bien que cela fonctionne. est, je ne sais pas). En outre, Walter Bright travaille actuellement sur le port de DMD 64 bits. Nous obtiendrons donc une compilation natale de 64 bits un de ces jours plus bientôt.

Dans l'ensemble, je dirais que D2 est prêt à être utilisé, mais vous devez être conscient de savoir qu'il y a encore beaucoup de travail en cours de travail en ce qui concerne les correctifs de bugs et similaires. Donc, D2 est définitivement prêt à être utilisé et potentiellement à une utilisation sérieuse au travail, mais si vous vraiment besoin de stabilité (comme si vous êtes une erreur et une erreur signifie la mort), alors D1 serait probablement toujours Un meilleur choix. Bien sûr, la grande chose à retenir à propos de D2 est qu'il a beaucoup de fonctionnalités que D1 n'a pas, donc à moins que vous n'ayez vraiment besoin de stabilité solide, alors D2 est probablement la voie à suivre. Heureusement, il continue de mûrir et de se stabiliser, de sorte que le temps s'approche définitivement lorsqu'il ne sera pas question que l'utilisation de D2 serait meilleure.

Quoi qu'il en soit, D1 et D2 sont de bons remplacements pour C et C ++ dans le cas général. Ils peuvent faire ce que C et C ++ font et (surtout dans le cas de D2) peuvent probablement mieux le faire mieux. L'endroit principal que D pourrait tomber est dans votre optimisation. Il y a beaucoup de code qui sera tout aussi rapide en D comme dans C ou C ++, mais il y a encore beaucoup de travail à être fait sur D, il y a donc beaucoup de place pour l'optimiser davantage, et il sera parfois décalé derrière C et C ++ pour l'efficacité. . Donc, généralement, D est efficace, mais si vous vraiment avez besoin autant d'efficacité que vous pouvez obtenir, cela pourrait ne pas encore être suffisamment bon pour ce dont vous avez besoin (bien que cela puisse y arriver). De plus, il existe de nombreuses bibliothèques matures C et C ++, tandis que D ne possède pas près du même niveau de code flottant pour travailler avec. Tout code C pourrait être utilisé avec D car les fonctions C peuvent être appelés à partir de D, et une partie du code C ++ pourrait être (bien qu'il y ait plusieurs restrictions lors du mélange de code C ++ avec d), de sorte que cela ne serait pas nécessairement une grande partie de Un obstacle, mais c'est quelque chose à être conscient. T

Il est le lieu principal où il fait défaut serait des bibliothèques d'interface graphique.Il y en a pour le D1, et il y a du travail effectué sur les bibliothèques d'interface graphique pour D2, mais je ne crois pas qu'aucun d'entre eux soient particulièrement matures à ce stade.

Alors, comme avec tout, quelle langue vous devriez utiliser dépend de ce que vous faites.D fera la plupart des choses et les faire bien.Mais ça ne fait pas tout, et ça mûrit toujours.Personnellement, à ce stade, j'utilise d si je n'ai besoin d'utiliser quelque chose d'autre pour un projet particulier, qui n'est souvent pas souvent écrit dans quelque chose d'autre, et il n'a pas de sens de le porter en ce moment.Donc, je suggérerais fortement d'utiliser d, mais vous devrez examiner cela et l'utiliser pour voir s'il fera vraiment ce que vous voulez à ce stade.

Autres conseils

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

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

"Unification" est extrêmement improbable en raison de différences de licences. Lorsque le tango sera porté à D 2.0, vous pourrez l'utiliser à côté des phobos, ce qui n'est pas (facilement) possible dans D 1.0.

En outre, j'ai entendu il y a quelque temps que les langues ont des problèmes sur les limites du code GCED / non giqué. Je ne pouvais trouver aucune référence à ce sujet sur le site Web, de même que ce problème est toujours vrai?

Je crois qu'il n'y a que des problèmes si vous ne faites pas attention à la façon dont vous gérez la mémoire. Si toutes les références à un objet gc-alloué sont stockées en dehors des régions de mémoire marquées sous forme de racines GC, le GC examinera l'objet non référencé et le supprimera.

Si je devais choisir D en tant que remplacement C aujourd'hui, quel D (V 1.0 ou V 2.0) et quelle bibliothèque standard suggéreriez-vous?

phobos et tango se déroulent dans des directions quelque peu différentes. Les phobos (in D 2.0) se situent en étroite collaboration avec les nouvelles fonctionnalités de D2. Tango est plus emballée de fonctionnalités et contient des modules qui ne sont pas présents dans Phobos, par exemple. Soutien à la clientèle HTTP / FTP, diverses classes de cryptographie, etc. Ils suivent également différentes philosophies de design (Phobos est plus impératif / méta-programmation-ish, tandis que le tango est très strictement ressemblant à des OOP, et donc de Java à cet égard). < / p>

Je me demande à quel point D mature et stable D est, et si cela pourrait être un bon remplacement pour C / C ++.

Je me méfierais d'utiliser n'importe quelle langue qui n'a pas encore été soutenu par un organisme de normalisation tel que ANSI, ISO ou ECMA.C'est peut-être un indicateur de maturité.Cela dit que Java et Delphi, par exemple, tomberaient dans cette catégorie, et alors que je n'utilise pas ces langues, elles pourraient probablement être décrites comme "mature".

Une autre mesure peut ê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 au courant de Andrei Alexandrescu.Il a également écritune longuearticle surla langueDr. Dobbs, où il traite spécifiquement de la question de la bibliothèque standard.

J'ai eu une bonne expérience en train d'écrire un petit jeu en D1 avec des phobos et du SDL, mais cela était un joli petit projet.

À mon avis, D Manques:

  • Un forum Web officiel où les gens peuvent obtenir de l'aide et de rechercher des réponses (pas des groupes de discussion)
  • Un référentiel officiel pour de nombreux SDK convertis en D (par exemple SDL, GTK, etc. Celles-ci sont souvent difficiles à trouver et à utiliser, quand elles existent du tout.)

Je ne pense pas que la question du remplacement de C soit sur la question de savoir si un remplacement potentiel est "bon" ou "mature" suffisamment sur un niveau théorique, mais plutôt sur des considérations pratiques et du fait que c est "assez bon" pour quoiC'est utilisé pour.Sauf si une langue ait des environnements de construction et d'exécution natifs complètes pour chaque système d'exploitation majeur, ce n'est pas vraiment pratique pour ce que C est utilisé pour.Le fait que c est la langue de POSIX est une grande partie de l'ensemble de la question.

Sûrement Autres langues semi-basse comme D pourrait avoir de grandes applications dans des domaines spécialisés.Mais vous êtes peu probable de voir des logiciels multiplateformes majeurs (serveurs Web, serveurs de base de données, processeurs de mots, navigateurs Web, etc.) écrit en D car aucun système d'exploitation majeur (beaucoup moins tous) est livré avec un environnement de construction ou d'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top