Citation : Walter BrightSi un langage peut récupérer 90% de la puissance du C++ mais seulement 10% de sa complexité, cela vaut largement le coup.
Cette citation rend compte des objectifs que veut remplir le langage D, qui est désormais disponible en version 1.00.
Débuté en 1999, le D est un langage de programmation impératif orienté objet créé par Walter Bright, qui est connu pour avoir participé à l'élaboration des premiers compilateurs C++.
D se veut combiner la rapidité et la puissance du
C/
C++ avec un confort de développement semblable à celui fourni par
Ruby ou
Python (le rêve

) !
Il a donc été créé à partir d'une réécriture de C++, en y introduisant certains concepts et fonctionnalités d'autres langages, comme le Java, le C# ou encore
Eiffel.
Le langage D
Présentation
Walter Bright s’est aperçu que l’expressivité du langage C ou du C++, qui leur donne leur puissance de traitement, rend leur utilisation assez sensible.
Il a alors imaginé la création d'un langage de programmation combinant la rapidité et la puissance du C++ avec une facilité de développement comme celle fournie par Ruby ou Python. La syntaxe, quant à elle, se rapproche aussi de celle du
C# ou du
Java.
Ses particularités
Les avantages de D diffèrent si l'on vient d'un langage plutôt qu'un autre. Pour reprendre les grandes lignes, D offre, pour les programmeurs C/C++ :
- Un ramasse-miettes (Garbage Collector) pour gérer la mémoire. (Activé par défaut, il est bien entendu désactivable.)
- Une syntaxe de programmation des templates plus puissante et plus propre. Les templates permettent de créer automatiquement des classes ou des fonctions à partir d'un ou plusieurs paramètres.
- Le langage fournit directement des fonctionnalités similaires au préprocesseur, ce qui permet d'opérer des changements dans un code source avant la compilation.
- Le support de la programmation par contrat, une méthode de programmation.
- Il gère les tableaux dynamiques (les tableaux peuvent alors changer de taille en fonction des besoins de l'application) et les tableaux associatifs (à chaque valeur est alors assignée une clé).
- Une compilation souvent plus rapide, alors que la vitesse d'exécution est similaire.
Pour les programmeurs C# ou Java, la liste des avantages est certes plus courte, car D s’inspire du Java avec lequel il partage la notion d’héritage simple et de "ramasse-miettes". Cependant, voici ce qu'offre D aux programmeurs Java et C# :
- Tout est compilé, donc pas besoin d'un interpréteur ou d'une machine virtuelle.
- Possibilité d'embarquer du code assembleur dans ses programmes, ce qui pourra nuire à la portabilité du code, mais qui permettra d'avoir accès à des périphériques ou de faire des puissantes optimisations.
- La syntaxe similaire.
Une comparaison non officielle entre D et d'autres langages est disponible sur
cette page, qui est plus complète que la
comparaison officielle.
Définitions
Parce qu'il y a sans doute des zéros qui n'ont pas très bien compris tous les termes un peu techniques utilisés dans la news, ce paragraphe est là pour expliquer certaines notions. Si vous n'avez pas compris ce qu'est un ramasse-miettes, ce que sont des templates et qu'est-ce qu'un préprocesseur, cette partie est pour vous.
Le concept de ramasse-miettes est assez ancien, puisqu'il a fait son apparition dans le langage
Lisp. Son but est de faciliter la vie du programmeur en gérant la mémoire à sa place. Pour ça, il alloue lui même l'espace nécessaire aux objets du programme, et les supprime de la mémoire quand ils ne servent plus. On évite ainsi théoriquement des erreurs que le programmeur commettrait, mais on perd en légèreté (ça demande naturellement des calculs en plus). Pourtant, la complexité de la gestion de la mémoire fait que parfois ce système ne gêne pas les performances, au contraire.
Il existe aujourd'hui des tas de langages utilisant un système comparable pour gérer la mémoire, par exemple en Python, Java, OCaml, ou dans des environnements comme .NET. On peut toutefois trouver des
ramasse-miettes pour C et C++
Les templates sont un moyen évolué de concevoir un code sans se soucier du type qu'il va traiter : par exemple, vous pouvez coder des structures qui peuvent accepter tous les types pour ces données, et définir des fonctions qui supporteront aussi bien les entiers que les caractères ou autres. L'intérêt est de ne plus avoir un lot de fonctions par type (une pour comparer deux nombres, une autre pour comparer deux chaînes, une troisième pour comparer des listes... ça finit par faire beaucoup), mais une seule fonction dite polymorphique : elle pourra faire une même tâche quel que soit le type de ce que vous lui passez, en lui précisant juste sur quoi elle travaille au dernier moment.
Les templates existent déjà en C++, et se trouvent notamment dans la
STL, puissante bibliothèque contenant de nombreux outils codés avec les templates. Les programmeurs de D reprennent donc l'idée pour leur langage
En C et C++,
on trouve un préprocesseur qui se charge, avant la compilation, de traiter le code source selon ce que vous lui avez demandé de faire : ce sont les fameuses lignes commençant par #. Inutile de développer ce point,
M@teo21 le fait dans son cours.
Sachez juste que D supprime ce concept, en incluant directement dans la syntaxe du langage les éléments qui d'habitude sont gérés par le préprocesseur : par exemple, #define se trouve remplacé par import, qui est une instruction du langage. On la trouve aussi dans le langage Python.
Exemples
Pour commencer, le fameux "Hello World", exemple de référence pour tous les langages :
Code : Dimport std.stdio;
int main (char[][] args)
{
printf ("Hello world!\n");
}
Et un second exemple :
Code : D// programme en D qui affiche les arguments de la ligne de commande
import std.stdio;
int main(char[][] args) {
foreach (int i, char[] arg; args) {
writefln("args[", i, "] = '", arg, "'");
}
return 0;
}
Avis
En vue de la préparation d'un débat, nous avons cherché, par l'intermédiaire de personnes compétentes (qui souhaitent néanmoins garder l'anonymat), les points forts et les points faibles de D, que nous avons réunis dans cette partie "Avis". Bien qu'étant un peu subjectifs, tous les arguments proposés sont pertinents.
Nous vous invitons d'ailleurs dans
les commentaires de cette news à réfléchir sur le "Pour" ou le "Contre" de D.
Les arguments du Pour
- Modèle objet mieux pensé que dans C++, plus proche de Java/C#
- Meilleure vitesse que C++
- Des différences syntaxiques appréciables
- Le TDD (Test Driven Development) intégré. (Def. Test unitaire)
- Possibilité d'interfacer D avec du C directement
- Des petites améliorations pas fondamentales, mais qui "simplifient la vie" :
- On peut comparer les chaînes de caractère directement avec ==
- Support des propriétés
- Templates améliorés
- Meilleur traitement des exceptions
- Gestion des modules proche de Python
- Syntaxe assez proche du C/C++ et du Java/C#
Les arguments du Contre
- Difficultés d'implémentation
- Trop de choses dans le langage en lui même, il serait sans doute mieux d'isoler des fonctionnalités dans des bibliothèques externes. En effet, lorsqu'une nouvelle version du langage sort cela va à la fois favoriser l'essor du langage entier, mais va également freiner l'implantation du tout puisqu'il faut tout modifier...
- Trop de gadgets, beaucoup de choses inutiles.
- Les nouveautés proposées par D ne sont pas originales, certains langages (Eiffel, OCaml, LISP...) les proposaient déjà bien avant. Ainsi, le langage D est vu comme "le langage de trop" par certains.
En savoir plus
Pour tous ceux qui sont intéressés, je vous encourage vivement à lire
la FAQ.
Par ailleurs, il existe déjà deux compilateurs pour D :
- DMD (DigitalMars D), compilateur gratuit disponible pour Windows et Linux.
- GDC, qui est un compilateur basé sur le très célèbre compilateur libre GCC. Il est disponible pour Windows sous le nom de gdcwin et pour Mac OS X sous le nom de gdcmac.
Liens relatifs à cette news
Un débat a été préparé dans
les commentaires de news, je vous invite fortement à y prendre part.
Bonne journée !
Un gros remerciement à Bad_Day pour ses propositions de news et à Bigloo pour son aide =)
116 Participations
Connectez-vous !
Connectez-vous !
Revenir à la liste des news