Oui, sauf que dans l'opération, on a perdu ce qui était sensé faire la force du C++, la possibilité de faire du bas niveau.
L'exemple de l'expression template est caractéristique : le seul moyen de faire une lib de calcul vectoriel/matriciel efficace en C++ est horriblement complexe.
Ce qui se passe dans la pratique, c'est que dans 95% des cas, tu ne peut résoudre tes problèmes de programmation comme un grand car le langage ne t'en donne pas les moyens. Tu es obligé d'attendre qu'un roxor du problème et du C++ et des différents compilos sorte une lib.
Alors que les expressions template, c'est pas compliqué en soit. Le principe est simple. C'est juste horrible à mettre en place en C++. Alors qu'avec de test à la compilation (en D, static if) et du typage automatique (comme en Caml, ou bien avec le type auto de D) ça se fait tout seul.
C++0x apporte pas mal de choses au niveau de la metaprogrammation (qui existent déjà dans D ceci dit) qui rendrait une bonne partir de cet argument caduque. Mais le fait est la que C++0x, il est pas la.
Mais bon, on peut aussi partir sur d'autres points que la metaprogrammation. L'absence de standard au niveau des binaires est aussi un belle saloperie. Du coup, pas moyen de linker quoique ce soit.
Pour le langage qui exprime mieux la généricité, regarde du coté de D. Il est très loin d'être parfait comme langage (principalement, au niveau des libs standards, il ne devrait pas y avoir de s).
C'est vrai que C++ permet d'exprimer pas mal de choses à ce niveau la, et c'est ce qui m'a retenu sur ce langage pendant longtemps. Peu de langages permettent autant au niveau de la metaprogrammation. Il n'empêche qu'il y en a qui font mieux (D est un exemple). Et même s'il n'y en avait pas qui faisaient mieux, ça ne voudrait de toute façon rien dire sur la façon donc C++ le fait.
Partager