C++11 et les gardiens de la tradition
C++11 (anciennement C++0x), le nouveau langage C++ est amélioré, nous dit Bjarne Stroustrup, son créateur, selon trois plans:

C++ privilégie l'exploit à la simplicité
- Le langage.
- La bibliothèque standard.
- La concurrence.
La définition du standard a été approuvée le 25 mars 2011 par le comité C++ ISO.
La sémantique essentiellement sera améliorée, et principalement les types et la sécurité procurée par les contrôles sur les types, mais de nouvelles structures de contrôle vont aussi apparaître.
Le format interne UTF-8 sera supporté pour les chaînes de caractères littérales.
Nouveaux types et mots-clés
- auto
Le type de la variable se déduit de ce qui est assigné.
Exemple:vector<string> v = {"Alicia", "Bea", "Clara", "Dara" }; for (auto x : v) cout << x <<'\n'; - constexpr
Une expression constante. - nullptr
Un mot réservé pour un pointeur nul.
Ex:
char *x = nullptr;
- littéral brut de chaîne (raw string).
Des chaînes où les codes d'échappement ne sont pas interprétés, comme entre guillemets simples en PHP.
Elles ont le préfixe R. - decltype
Mode d'utilisation du type dans une expression, retourne le type et les modifieurs de tout objet y compris une fonction. - Litéraux UTF 8
u8"Un text quelconque".
On utilise u pour l'UTF16 et U pour l'UTF 32.
Sécurité sur les types
- Contrôle de l'alignement des valeurs.
- Contrôle des valeurs par défaut.
Nouvelles constructions
Boucle For sur un intervalle.
Comme cela est implémenté sur la plupart des langages de script.
int arr[5] = {2, 8, 21, 56, 995};
for (int &x : arr)
{
printf("%d\n", x);
}
Comme on peut le voir, le langage conserve le principe du code source minimal. Il n'utilise pas le mot-clé in comme le font la plupart des langages, mais est plutôt un symbole.
Une tradition qui est née à l'époque où l'on économisait chaque caractère pour réduire la taille du code! La mémoire coûtait cher en 1972...
Fonction lambda.
Fonctions définies et utilisées sur place de façon contextuelle et éphémère.
rvalue
C'est un mode de référence au contenu d'une variable qui consiste à assigner à A le contenu de B sans le copier mais en déplaçant le pointeur sur le contenu, dans la perspective ou B n'est plus utilisée.
Modèle "variadic".
Template dont le nombre d'arguments est variable.
Assertion statique
Introduite avec le mot-clé static_assert, elle teste la validité d'une assertion à la compilation.
Enumération typée et avec scope
Les classes
Délégation et héritage des constructeurs. Le constructeur d'une classe peut appele le constructeur d'autres classes.
Les attributs de classes pourront être assignés directement dans la définition de la classe.
La bibliothèque standard
De nouveaux objet vont apparaître qui sont devenus familiers dans les langages de scripts tels que PHP.
- regexp
Expressions régulières - tuple
Propre au langage Python. - array
Tableau statique. - unordered_map
Table de hâchage. - date.
- smart pointer
Pointeur malin;
Plus divers composants de librairies et améliorations. Par exemple on peut maintenant assigner statiquement une liste à un vector dans sa déclaration.
La concurrence
Les spécialistes de la programmation système et du multi-tâche comprendront. Pour les autres, les webmasters notamment, on notera le mode asynchrone devenu familier avec Ajax.
- Modèle de mémoire adapté aux ordinateurs actuels avec processeurs multi-coeurs.
- Thread ABI.
- Types atomiques.
- Mutexes et verrous.
- Stockage local de thread.
- Echange de messages asynchrone.
Ce qui manque toujours (pour un langage moderne)
Un garbage collector.
Un gestionnaire automatique de mémoire. Celui-ci reste optionnel, certaines applications système n'en ont pas besoin et ne l'utiliseront pas.
Les modules (dans le sens du langage Python où la sémantique du langage peut-être étendue quand on incorpore une librairie).
Les tableaux dynamiques ou le contrôle de dépassement de capacité.
Cela à déjà un équivalent dans la bibliothèque avec la classe vector.
Les concepts.
Un moyen de définir de façon abstraite les arguments des modèles (templates).
Conclusion
En version 2011 le langage C++ se dote de nombreuses facilités de programmation héritées des langages de scripts et de Java, mais il reste complexe, et même plus complexe avec le développement de templates génériques et reste un langage pour le développement système.
Pour citer le créateur lui-même "the ugly and illogical C syntax" (la syntaxe laide et illogique du C) est toujours le meilleur moyen de faire de la programmation système (compilateurs, systèmes d'exploitation, pilotes de périphériques, etc.).
Mais trente ans après (C++ date de 1981), on aurait pu imaginer quelques progrès pour simplifier son usage, même pour la programmation système. Il semble destiné à être remplacé par d'autres langages comme JavaScript.
- DevX C++ et Bjarne Stroustrup. (Anglais).
- FAQ.
| Tweet |
|
|
