D (langage)
Le D est un langage de programmation impératif orienté objet et multi-paradigmes conçu pour la programmation système.
Pour les articles homonymes, voir D.
D | ||
Date de première version | ||
---|---|---|
Paradigme | impératif, orienté objet, procédural | |
Auteur | Walter Bright | |
Développeur | Fondation du langage D | |
Dernière version | 2.098.0 (10 octobre 2021) | |
Typage | fort , statique , inféré | |
Influencé par | C, C++, Java, C#, Eiffel, Python | |
Implémentations | DMD, GDC, LDC | |
Système d'exploitation | Linux, Windows, MacOS | |
Licence | Boost | |
Site web | dlang.org | |
Extension de fichier | d, dd, di et def | |
Il s’inspire de nombreux langages, dont C++, Java (avec lequel il a en commun l'utilisation d'un ramasse-miettes et l'existence d'un héritage simple), Eiffel (pour le paradigme de programmation par contrat).
D est en version 2.x, abrégé « D2 » (depuis le 17 juin 2007), et subit ponctuellement de légères modifications de spécification. Ces transformations sont réalisées par Walter Bright et Andrei Alexandrescu, qui tiennent compte des remarques et requêtes de la communauté. La version 1.x du langage est obsolète et a été abandonnée le 31 décembre 2012.
Historique
Le langage D a été créé par Walter Bright en avec sa société Digital Mars (il devait d'ailleurs être appelé Mars initialement[1]), et il est présenté comme le successeur du C, d'où son nom (le langage C lui-même succédait au langage B, qui quant à lui ne dérive pas d'un quelconque langage A, mais du BCPL).
Origine
Walter Bright a imaginé ce langage en s’appuyant sur l'expérience qu'il a acquise lors du développement de compilateurs pour les langages C et C++. Le design du langage D a pour ambition de conserver le niveau de performance de ces langages tout en palliant les problèmes liés à la syntaxe et à la sémantique.
En particulier :
- la création et la maintenance de compilateur est ardue ;
- la syntaxe globalement mal comprise introduit des bugs par simple méconnaissance ou inattention.
Pour cela, le langage D s'affranchit du préprocesseur, utilise des modules, et a une syntaxe non ambiguë, ce qui a pour effet d'accélérer grandement la vitesse de compilation et de faciliter la création d'outils d'analyse de code. Ainsi, couplé avec des notions modernes incluses dans le langage, la productivité est améliorée.
« Si un langage peut récupérer 90 % de la puissance du C++ mais seulement 10 % de sa complexité, cela vaut largement le coup[2]. »
— Walter Bright
Compilateurs
Le compilateur officiel, DMD, est développé parallèlement à la spécification du langage. Il cible le langage machine. La totalité[3] de son code est ouvert, ce qui permet de corriger rapidement les problèmes rencontrés, ou encore de réaliser son propre compilateur en utilisant une autre base (backend). Il existe actuellement pour les plates-formes Linux, FreeBSD, Mac OS X et Windows.
Un compilateur GNU, GDC, mêlant le frontend de DMD et le backend de gcc est en développement.
Un compilateur sous licence BSD, LDC, mêlant le frontend de DMD et le backend LLVM est encore en cours de développement. Il peut compiler en 64 bits, supporte l'essentiel du langage D dans ses versions 1 et 2 et permet de créer des bibliothèques dynamiques quelle que soit la plate-forme Linux, Mac OS X ou Windows contrairement à son homologue DMD ne pouvant réaliser cette tâche que sur Mac OS X.
Spécificités du langage
Paradigmes
D dans sa version 2 est un langage multi paradigmes qui inclut la plupart des notions essentielles de programmation orientée objet, générique et fonctionnelle, tout en laissant la possibilité d'inclure du code assembleur ou encore de linker du code C.
Paradigmes supportés :
Autres
Il introduit dans ses spécifications les éléments de la programmation par contrat, de test unitaire, et de vrais modules qui améliorent la qualité et facilitent la maintenance du code. Les tableaux associatifs et les tableaux avec "slices", directement inclus dans le langage, les pointeurs (bien que leur usage soit largement réduit par rapport à C ou C++), le « ramasse-miettes » débrayable et l'inférence de types permettent de faire de D un langage à la fois puissant et expressif. Le langage permet en outre d'inclure directement dans le source du code écrit en C ou code assembleur.
La programmation objet en D supporte l’encapsulation, le polymorphisme, de l’héritage simple étendu par des interfaces et de vraies « propriétés ». L’instanciation se fait uniquement par référence et laisse le contrôle sur l’initialisation des attributs statiques. Les exceptions et le mécanisme des "scope guards" permettent de simplifier la gestion des erreurs.
Les possibilités fonctionnelles du langage s'expriment de plusieurs manières: les fonctions anonymes ou lambda, les fonctions pures dont la pureté est vérifiée par le compilateur, l'évaluation paresseuse des arguments. L'évolution du langage prend en compte le multithreading en permettant la vérification par le compilateur de l'immutabilité d'objets en mémoire.
Enfin D inclut un très puissant système de « templates », qui permet d'utiliser l'essentiel du langage dans le cadre de la métaprogrammation. Il inclut notamment la notion de contrainte sur les paramètres de templates, les mixins et l'évaluation du code à la compilation (Compile Time Function Evaluation). Le compilateur a accès au typage des données à la compilation et permet la compilation conditionnelle ce qui permet d'optimiser la génération de code.
Exemples
Voici un exemple du fameux « Hello World » en langage D :
import std.stdio;
void main() {
writeln("Hello world!");
}
Autre exemple, qui affiche la liste des arguments associés au programme lors de son exécution en ligne de commande:
import std.stdio;
void main(string[] args) {
foreach (int i, string arg; args) {
writeln("args[", i, "] = '", arg, "'");
}
}
La version 2.0 accepte également le type string
comme un alias à immutable(char)[]
, et inclut par ailleurs writeln()
en plus de writefln()
, permettant ainsi d'invoquer des variables plus simplement (cf. Stackoverflow).
Anecdote
Le langage BCPL fut inventé en 1966, et son successeur fut le langage B (1969) qui fut à son tour remplacé par le langage C (1970). Le successeur du C pouvait alors être nommé D ou P selon l'ordre alphabétique ou l'ordre des lettres BCPL.[réf. nécessaire] Finalement, ce fut le C++ (1983). C'est ainsi que la lettre D fut choisie (1999) en référence au nouveau successeur.
Annexes
Liens externes
- (en) D Programming Language, le site officiel du langage.
Références
- « It started out as the Mars programming language, but my colleagues called it D first as a joke, but the name caught on and the D programming language was born. » - Walter Bright, préface du livre The D Programming Language.
- « If a language can capture 90% of the power of C++ with 10% of its complexity, I argue that is a worthwhile tradeoff. » - Walter Bright
- (en-US) « dmd Backend converted to Boost License », sur forum.dlang.org (consulté le )
- http://www.informit.com/articles/article.aspx?p=1609144
- https://dlang.org/spec/contracts.html
- http://dlang.org/template.html
- Portail de la programmation informatique
- Portail de l’informatique