D (langage)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir D.
D
Apparu en 1999
Auteur Walter Bright
Paradigme impératif, orienté objet, procédural
Typage statique
Influencé par C, C++, Java
Implémentations DMD, GDC, LDC

Sur les autres projets Wikimedia :

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 entre autres C++, Java (avec lequel il partage la notion de « ramasse-miettes » et d’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. La version actuelle de D2 est D 2.065.0 (24 février 2014).

Historique[modifier | modifier le code]

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[modifier | modifier le code]

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 ambigüe, 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[modifier | modifier le code]

Le compilateur officiel, DMD, est développé parallèlement à la spécification du langage. Il cible le langage machine. Une partie de son code (le frontend) 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, 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 | modifier le code]

Paradigmes[modifier | modifier le code]

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 | modifier le code]

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 | modifier le code]

Le fameux « Hello World », exemple de référence pour tous les langages :

import std.stdio;
 
void main() {
  writefln("Hello world!");
}

Et un second exemple :

// Programme en D qui affiche les arguments de la ligne de commande.
import std.stdio;
 
void main(char[][] args) {
  foreach (int i, char[] 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).

Anecdotes[modifier | modifier le code]

  • Avant la création du C++, on se demanda longtemps si le successeur du C s’appellerait D, selon l’ordre alphabétique, ou P, selon l’ordre des lettres dans le nom de BCPL (l'ancêtre du C).

Notes et références[modifier | modifier le code]

  1. « 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.
  2. « 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
  3. http://www.informit.com/articles/article.aspx?p=1609144
  4. http://dlang.org/dbc.html
  5. http://dlang.org/template.html

Liens externes[modifier | modifier le code]