D (langage)

langage de programmation

D
Logo.

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.orgVoir et modifier les données sur Wikidata
Extension de fichier d, dd, di et defVoir et modifier les données sur Wikidata

Le D est un langage de programmation impératif orienté objet et multi-paradigmes conçu pour la programmation système.

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), et 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 modifier

Le langage D a été créé par Walter Bright en avec sa société Digital Mars (il devait d'ailleurs être appelé Mars initialement[2]), 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 modifier

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[3]. »

— Walter Bright

Compilateurs modifier

Le compilateur officiel, DMD, est développé parallèlement à la spécification du langage. Il cible le langage machine. La totalité[4] 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 modifier

Paradigmes modifier

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 modifier

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 modifier

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 modifier

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 modifier

Sur les autres projets Wikimedia :

Liens externes modifier

Références modifier

  1. « 2.108.0 » (consulté le )
  2. « 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.
  3. « 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
  4. (en-US) « dmd Backend converted to Boost License », sur forum.dlang.org (consulté le )
  5. « Concurrency in the D Programming Language », sur informit.com (consulté le ).
  6. (en) « Contract Programming », sur dlang.org (consulté le ).
  7. (en) « Templates », sur dlang.org (consulté le ).