Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

DMD : le compilateur de référence du langage D est désormais complètement open source
Son backend vient de passer sous la Boost License

Le , par Michael Guilloux, Chroniqueur Actualités
Avez-vous déjà utilisé le langage D ?
Le D est un langage de programmation impératif orienté objet et multiparadigme. Il a été conçu pour la programmation système et est inspiré par de nombreux langages dont C, C++ et Java. Créé en 1999, le langage D a été également présenté comme le successeur du C.

Parmi les principaux avantages de D, ses créateurs mettent en avant la vitesse de compilation, estimant que la compilation de code D est beaucoup plus rapide que celle de code C++ pour des codes équivalents. Ils soutiennent également que D peut être utilisé comme un langage de script pratique pour une variété de tâches occasionnelles et qu'il est bien plus rapide que les autres langages de scripts. Entre autres avantages de D, ils estiment encore que le langage est bien plus facile à interfacer avec C et C++ que n'importe quel autre langage.

Le compilateur officiel de D, DMD, est développé parallèlement à la spécification du langage. Il cible le langage machine. Excepté le backend qui est fermé et sous une licence propriétaire de Symantec, le reste du code du compilateur (frontend, bibliothèques et tous les autres fichiers inclus) est sous licence open source. Cela permet donc de corriger rapidement les problèmes rencontrés, mais également réaliser son propre compilateur en utilisant un autre backend.

Il y a donc d'autres compilateurs en développement pour le langage D qui émergent dans le monde open source. Nous avons un compilateur GNU, GDC (pour GNU D compiler), mêlant le frontend de DMD et le backend de gcc ; et un compilateur sous licence BSD, LDC (pour LLVM D Compiler), mêlant le frontend de DMD et le backend LLVM.

Le langage D connait une adoption très limitée et la licence du backend du compilateur DMD est sans doute l'une des raisons qui expliquent cela. En effet, si les deux autres compilateurs cités sont open source, ils accusent toutefois un retard sur DMD, en termes de support de fonctionnalités du langage D.

Le langage vient toutefois de franchir une étape importante vers une adoption plus large par les développeurs. Symantec vient en effet de donner sa permission pour faire passer le backend de DMD sous la Boost License, une licence de logiciel libre, compatible avec la GNU General Public License de la Free Software Foundation. Cette licence hautement permissive permettra de distribuer plus facilement le compilateur avec d’autres logiciels open source. Espérons donc que cela n’arrive pas un peu trop tard, et que le langage qui a été annoncé comme le successeur de C puisse gagner du terrain. Pour cela, il doit d’abord faire face à la concurrence des jeunes langages comme Go ou Rust qui ont probablement capté une partie des développeurs qu’il pourrait intéresser.

Sources : Dlang, GitHub

Et vous ?

Avez-vous déjà utilisé le langage D dans vos projets ? Partagez votre expérience.
Pensez-vous que le passage du backend de DMD en open source pourrait vraiment booster l’adoption du langage D parmi les développeurs ? Pourquoi ?

Voir aussi :

Quel langage pourrait remplacer C ? Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D
Débuter avec le langage D, un tutoriel de Sébastien Tahier


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de abriotde abriotde - Membre éclairé https://www.developpez.com
le 12/04/2017 à 9:28
C n'a et n'aura pas de successeur dans un futur proche. Les licences de D interdise sa diffusion large, Go et Rust n'ont pas les même performances et polyvalences. Go et Rust ne font qu'ajouter une concurrence indirect sur les projets les moins "critique" (au sens de performances.)
Avatar de Voïvode Voïvode - Membre émérite https://www.developpez.com
le 12/04/2017 à 10:07
Go et Rust n'ont pas les même performances et polyvalences.
Concernant les performances brutes, Rust n’a rien à envier à C.

La « polyvalence » est un critère vague. Si on parle en nombre et en variété de bibliothèques, le C a évidemment un avantage lié à son ancienneté. Si on parle d’accéder à des ressources bas niveau, Rust peut intégrer de l’assembleur.
Avatar de Uther Uther - Expert éminent https://www.developpez.com
le 12/04/2017 à 10:45
Citation Envoyé par abriotde Voir le message
C n'a et n'aura pas de successeur dans un futur proche. Les licences de D interdise sa diffusion large, Go et Rust n'ont pas les même performances et polyvalences. Go et Rust ne font qu'ajouter une concurrence indirect sur les projets les moins "critique" (au sens de performances.)
Au niveau des performances brutes, Rust est du même niveau que le code C équivalent.

Pour ce qui est de la polyvalence il faudrait que tu soit plus précis sur ce que tu entend par là. Le langage Rust en lui même est bien plus polyvalent que le C. Il est parfaitement adapté pour faire du bas niveau et permet de recourir également a des abstractions de plus haut niveau. Il permet de faire du fonctionnel. Il a aussi une forme d'approche objet bien que différente de celle du C++.

Pour moi le seul point où l'on peut dire que C est plus polyvalent que Rust, c'est le nombre de plateformes supportées. A peu près toutes les architectures, même les plus folkloriques ont un compilateur C.
Avatar de abriotde abriotde - Membre éclairé https://www.developpez.com
le 12/04/2017 à 11:33
Par polyvalence j'entends la capacité du C a être utilisé tel quel dans du C++ pour du code haut niveau et pouvoir manipuler les octet pratiquement au niveau de l'assembleur. Il permet d'implémenter très peu en assembleur sans sacrifice des performances. (le seul point ou il est pas au niveau, c'est la manipulation bit a bit mais parfois les compilateur retrouvent les bonne instructions assembleur.)
Avatar de Markand Markand - Membre actif https://www.developpez.com
le 12/04/2017 à 11:36
D est une mauvaise alternative à C++ car il possède un garbage collector. Rust n'en a pas et possède des fonctionnalités modernes comme le pattern matching. Pour moi D est un coup d'épée dans l'eau.
Avatar de Thorna Thorna - Membre éclairé https://www.developpez.com
le 12/04/2017 à 17:32
Citation Envoyé par Markand Voir le message
D est une mauvaise alternative à C++ car il possède un garbage collector. Rust n'en a pas et possède des fonctionnalités modernes comme le pattern matching. Pour moi D est un coup d'épée dans l'eau.
Corrigeons donc cette réponse trollesque...
- car il possède un garbage collector. : oui.
1) En quoi cela est-il mauvais pour 95% des projets professionnels qui ne sont pas soumis à des conditions absolument drastiques de performances du code et qui utilisent, qui des accès web-service ou internet, qui des bases de données, etc. ?
2) Le GC de D est inutilisé par l'énorme majorité (quasi-totalité serait plus proche il me semble) des fonctions de la librairie standard, peut être rendu inopérant dans la plupart des fonctions d'un programme, et peut même être désactivé lorsque nécessaire.
- Rust [...] possède des fonctionnalités modernes : oui.
1) Rust a le pattern matching que D n'a pas... quoi que : c'est exactement ce qui existe dans le système de concurrence, par exemple, et s'il n'est pas natif dans le langage, il est programmable, la preuve ! Et pouvoir le créer comme on veut, c'est pas mieux ?
2) D possède des fonctionnalités que Rust n'a pas : le système de template bien plus puissant que celui de C/C++ (en, entre parenthèses, bien plus clair...) par exemple.
3) Il faut bien convenir qu'il est nécessaire de s'y reprnedre à un bon nombre de fois pour maitriser tout le système Rust de borrowing (mais ce n'est pas une tare), mais ce qui m'a fait abandonner ce langage, ce sont tous les Rc, Arc etc. qui me semblent un rajout tardif pour des cas non prévus initialement (notez le me).
- Pour moi D est un coup d'épée dans l'eau : oui, exactement, pour moi. Ce sont les 2 seuls mots corrects de la phrase
Et donc reprenons :
Citation Envoyé par Markand Voir le message
D est une mauvaise bonne alternative à C++ car il possède un garbage collector bien pratique dans 95% des cas, mais désactivable si nécessaire. Rust n'en a pas et possède également des fonctionnalités modernes comme le pattern matching, auquel D ajoute un système puissant de templates. Pour moi D est un coup d'épée dans l'eau.
Avatar de jpouly jpouly - Membre habitué https://www.developpez.com
le 12/04/2017 à 17:52
J'ai répondu "autre" car à une époque, je m'y étais intéressé, sans en être convaincu.

A regarder le site officiel, je reste sur mon opinion : aucun intérêt, malgré que l'article fasse l'article

Citation Envoyé par Michael Guilloux Voir le message
Parmi les principaux avantages de D, ses créateurs mettent en avant la vitesse de compilation, estimant que la compilation de code D est beaucoup plus rapide que celle de code C++ pour des codes équivalents. Ils soutiennent également que D peut être utilisé comme un langage de script pratique pour une variété de tâches occasionnelles et qu'il est bien plus rapide que les autres langages de scripts. Entre autres avantages de D, ils estiment encore que le langage est bien plus facile à interfacer avec C et C++ que n'importe quel autre langage.
Explication :
- Vu les machines dont on dispose aujourd'hui, le temps de compilation n'est plus un argument de vente.
- L'intérêt d'un langage de script est de coder rapidement, surtout si c 'est pour des "taches occasionnelles". Et le temps d'exécution n'est pas un critère.
- Je ne vois pas en quoi s'interfacer facilement avec du C ou du C++ est un argument de "vente", vu que c'est le cas pour la plus part des langages du marché.
Avatar de zobal zobal - Membre confirmé https://www.developpez.com
le 12/04/2017 à 20:51
Citation Envoyé par Voïvode Voir le message
Concernant les performances brutes, Rust n’a rien à envier à C.
Bah si : sur ton lien rust est plus lent pour 9 tests sur 10; et même quasiment 2 fois plus lent pour 2 tests.

Et cette tendance à ressortir rust tout le temps me fait penser à une discussion à propos de C++ sur un autre forum :

Is it really necessary in every post about any language to have the Rust lovers ranting about any non-Rust languaje?
https://www.phoronix.com/forums/foru...272#post941272
Avatar de Uther Uther - Expert éminent https://www.developpez.com
le 13/04/2017 à 4:39
Citation Envoyé par abriotde Voir le message
Par polyvalence j'entends la capacité du C a être utilisé tel quel dans du C++ pour du code haut niveau
Si on utilise tel quel du C dans du C++, on au mieux un code de "moyen" niveau : du mauvais C++ qui fera hurler de rage les amateurs de C++ moderne.
Pour faire les choses proprement, mieux vaut garder son code C séparé du C++ et y faire appel via extern "C", ce que D et Rust savent très bien faire aussi.

Citation Envoyé par abriotde Voir le message
pouvoir manipuler les octet pratiquement au niveau de l'assembleur. Il permet d'implémenter très peu en assembleur sans sacrifice des performances. (le seul point ou il est pas au niveau, c'est la manipulation bit a bit mais parfois les compilateur retrouvent les bonne instructions assembleur.)
Pour ce qui est de la connaissance de la représentation en mémoire des données manipulées, D et Rust font aussi bien, sinon mieux. C'est bien le minimum pour se prétendre être un langage système.
Pour ce qui est de la connaissance du code machine qui sera généré par le compilateur, avec les optimiseurs modernes, mieux vaut ne prendre aucun pari, y compris en C.

Citation Envoyé par Markand Voir le message
D est une mauvaise alternative à C++ car il possède un garbage collector. Rust n'en a pas et possède des fonctionnalités modernes comme le pattern matching. Pour moi D est un coup d'épée dans l'eau.
D a certes du mal a prétendre au titre de langage système, le GC étant trop utilisé, il est très difficile de s'en passer, même si il semble qu'ils travaillent a corriger cela.

Ceci dit il n'est pas un coup d'épée dans l'eau et a de sérieux arguments à défendre face a Rust ou C++, comme par exemple :
- il est assez simple a prendre en main
- il est réputé pour ces capacités de méta-programmation
- il a des performances plutôt correctes.

Citation Envoyé par jpouly Voir le message
- Vu les machines dont on dispose aujourd'hui, le temps de compilation n'est plus un argument de vente.
- L'intérêt d'un langage de script est de coder rapidement, surtout si c 'est pour des "taches occasionnelles". Et le temps d'exécution n'est pas un critère.
- Je ne vois pas en quoi s'interfacer facilement avec du C ou du C++ est un argument de "vente", vu que c'est le cas pour la plus part des langages du marché.
Même avec des machine très puissantes, le temps de compilation n'est pas du tout négligeable, les compilateurs modernes faisant pas mal de vérifications et d'optimisations complexes. Rust travaille justement beaucoup a améliorer les temps de compilation vu que c'est la principale critique qu'ont remonté ceux qui l'utilisent professionnellement.

Pour ce qui est de l’interfaçage avec le C, il est en effet géré par la plupart des langages, mais il est beaucoup plus facile a faire avec certains langages qu'avec d'autres. D et Rust s'en sortent plutôt bien sur ce point par rapport à des langages comme Go ou Java.

Par contre l’interfaçage direct avec le C++ n'est géré par pratiquement aucun langage car le C++ est vraiment très complexe à supporter. S'interfacer parfaitement avec du C++ revient à devoir intégrer le C++ au langage. Il faut reconnaître au D d'être un des seuls langages qui permet un interfaçage, certes partiel, mais direct avec le C++.
En général quand un veut s'interfacer avec du C++, on passe par une interface C intermédiaire.

Citation Envoyé par zobal Voir le message
Bah si : sur ton lien rust est plus lent pour 9 tests sur 10; et même quasiment 2 fois plus lent pour 2 tests.
Sauf que le bechmark game est a prendre avec des pincettes. Ce qu'on constate, c'est que quand on utilise les mêmes techniques d'optimisations, les performances de Rust et C sont très proches.
Les écarts sensibles s'explique par l'utilisation de technique différentes. Par exemple, sur n-body le C utilise explicitement SIMD (c'est faisable en Rust, mais seulement sur les versions nighly pour le moment), regex-redux est forcément dépendant de l'utilisation de la bibliothèque de regex, ...

Citation Envoyé par zobal Voir le message
Et cette tendance à ressortir rust tout le temps me fait penser à une discussion à propos de C++ sur un autre forum
Is it really necessary in every post about any language to have the Rust lovers ranting about any non-Rust languaje?
Il y a certes quelque prêcheurs trop zélés sur les forums, mais beaucoup moins je trouve que ceux qui critiquent les langages comme D ou Rust sans les connaître et partent avec comme base de discussion que de toute façon, seuls C et C++ sont capables de faire du bas niveau.
Offres d'emploi IT
Développeur Front-End (H/F)
Meetic - Ile de France - Paris
Développeur ios #éditeur de logiciel en saas
MATIERE GRISE - Ile de France - Paris (75000)
Développeur front end h/f
Oostaoo Consulting - Ile de France - Paris (75000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil