Nouvelle norme du C++
| Darktib |
Posté le 02 Jan 2008 à 19:55
|
|
![]() Messages : 4017 GCPoints : 347288 |
Bon, pour eviter a tous les googlephobistes de passer des heures a chercher, je met ici pas mal de renseignements concernants la nouvelle norme C++ 0x, qui sera sans doute la C++ 09, et donc qui sortira sans doute en 2009. Je ne vais pas faire mon propre article, mais mettre pas mal d'articles, puis faire une petite synthese. Attention, l'article va etre tres long^^ Wikipedia : Wikipedia a écrit :
Comme dit précedemment, les changements du langage C++ seront situés autant dans le langage initial, que dans la bibliothèque standard. Durant le développement de chaque fonctionnalité de la nouvelle norme, le comité a appliqué les directives suivantes : Garder la stabilité et la compatibilité avec le C++98 et, si possible, avec le C. Préférer l'introduction de nouvelles fonctionnalités par la bibliothèque standard, plutôt que par le langage lui-même. Préférer les changements qui peuvent faire évoluer les techniques de programmation. Améliorer le C++ pour faciliter la mise en place de systèmes et de bibliothèques, plutôt qu'introduire de nouvelles fonctionnalités seulement utiles pour des applications spécifiques. Augmenter la protection des types en fournissant des alternatives plus sécurisées que les actuelles, plutôt non sécurisées. Augmenter les performances et les capacités à travailler directement avec le matériel. Proposer des solutions propres aux problèmes actuels. Implémenter le principe du "zero-overhead" Rendre le C++ facile à apprendre et à enseigner sans enlever les fonctionnalités requises par les programmeurs experts La norme apportera pas mal de nouveautés, nottament pour les classes, templates, threads, etc... Les applications multi-threads pourront avoir une memoire locale a un thread, et un modificateur volatile. Les classes: Je vais mettre le texte en anglais, puis une traduction. Je ne pourrait pas tout traduire tout l'article en 1 seule fois, evidemment^^ Wikipedia anglais a écrit :
Déléguation du constructeur : les constructeurs d'une classe pourront appeller un autre constructeur. Cette fonctionnalite, déja inplémentée dans Java, permettra d'utiliser le comportement d'un autre constructeur avec un minimum de code exemple : Code : class SomeType
{
int number;
public:
SomeType(int newNumber) : number(newNumber) {}
SomeType() : SomeType(42) {}
};Héritage du constructeur Initialiseurs d'attributs Sizeof sur les attributs de classes sans objet explicite Suppression et mise à défaut des fonctions standards des objets Opérateur de conversion explicite Liste d'initialiseurs Modification de la définition des POD (Plain Old Data) Un nouveeau type apparaitra, le type tuple: Un tuple est une collection de dimension fixe d'objets de type différents. Tous types d'objets peut être élément d'un tuple. Cette nouvelle fonctionnalité est implémentée dans un nouveau header et bénificie des extensions de C++0x comme : Paramètres template infini Référence sur référence Arguments par défaut pour les fonctions template La définition de la classe templatée tuple est : Code : template <class... Types> class tuple; Un exemple de définition et d'utilisation du type tuple : typedef tuple< int, double, long &, const char * > test_tuple ; long lengthy = 12 ; test_tuple proof( 18, 6.5, lengthy, "Ciao!" ) ; lengthy = get<0>(proof) ; // Assigne à 'lengthy' la valeur 18. get<3>(proof) = " Beautiful!" ; // Modifie la 4ème valeur du tuple Il est possible de créer le tuple proof sans définir son contenu si les éléments du tuple possède un constructeur par défaut. De plus, il est possible d'assigner un tuple à un autre tuple : si les deux tuples sont de même type, il est nécessaire que chaque élément du tuple ait un constructeur par copie, sinon il faut que les types de chaque élément de l'opérande droite soit compatible avec le type correspondant dans l'opérande gauche ou que l'élément correspondant de l'opérande gauche ait un constructeur approprié. Code : typedef tuple< int , double, string > tuple_1 t1 ;
typedef tuple< char, short , const char * > tuple_2 t2( 'X', 2, "Hola!" ) ;
t1 = t2 ; // Ok, les deux premiers élément peuvent être convertis
// Le troisième peut être construit à partir du 'const char *'.Les opérateurs relationnels sont disponibles (pour les tuples ayant le même nombre d'éléments). Deux expressions sont introduites pour vérifier les caractéristiques d'un tuple (à la compilation) : Code : tuple_size<T>::value retourne le nombre d'éléments du tuple T, tuple_element<I, T>::type retourne le type de l'objet placé en position I du tuple T. Autre nouveauté : les tables de hachages. Definition :Une table de hachage est une structure de données qui permet une association clé-élément, c'est-à-dire une implémentation du type abstrait table de symboles. On accède à chaque élément de la table via sa clé. Il s'agit d'un tableau ne comportant pas d'ordre (un tableau est indexé par des entiers). L'accès à un élément se fait en transformant la clé en une valeur de hachage (ou simplement hachage) par l'intermédiaire d'une fonction de hachage. Le hachage est un nombre qui permet la localisation des éléments dans le tableau, typiquement le hachage est l'index de l'élément dans le tableau. Une case dans le tableau est appelée alvéole. un annuaire représenté comme une table de hachage.Tout comme les tableaux, les tables de hachage permettent un accès en O(1) en moyenne, quel que soit le nombre d'éléments dans la table. Toutefois le temps d'accès dans le pire des cas peut être de O(n). Comparées aux autres tableaux associatifs, les tables de hachage sont surtout utiles lorsque le nombre d'entrées est très important. La position des éléments dans une table de hachage est pseudo-aléatoire. Cette structure n'est donc pas adaptée pour accéder à des données triées. Des types de structures de données comme les arbres équilibrés sont généralement plus lents (en O(log n)) et sont plus complexes à implémenter mais maintiennent une structure ordonnée. Le fait de créer un hash à partir d'une clé peut engendrer un problème de collision, c’est-à-dire qu'à partir de deux clés différentes, la fonction de hachage pourrait renvoyer la même valeur de hash, et donc par conséquent donner accès à la même position dans le "tableau". Pour minimiser les risques de collisions, il faut donc choisir soigneusement sa fonction de hachage. Donc, voici les infos de la nouveauté : Intégrer les tables de hachage (conteneurs associatifs non ordonnés) dans la bibliothèque standard du C++ est l'une des demandes les plus récurrentes. Cela n'avait pas été réalisé pour la norme actuelle (celle écrite en 1995 et approuvée en 1998) à cause des contraintes de temps. Bien que cette solution soit moins efficace que les arbres équilibrés dans le pire des cas (en cas de collisions importantes), elle est cependant la meilleure dans la plupart des applications réelles. Les collisions seront seulement gérées par du chaînage linéaire, parce que le comité ne considère opportun de standardiser des solutions de d'adressage ouvert qui introduit un nombre important de problèmes intrinsèques (en particulier, quand la suppression d'éléments est permise). Pour éviter les conflits de noms avec les bibliothèques non standards, qui ont leur propre implémentation des tables de hachage, on utilisera le préfixe unordered, au lieu de hash. Cette nouvelle fonctionnalité intégrera quatre types de table de hachage, différenciées selon si elle accepte ou non des éléments avec la même clé (clé unique ou clé équivalente), et si elle associe chaque clé à valeur associée. Ces nouvelles classes remplissent toutes les demandes des classe de conteneurs, et contient toutes les méthodes nécessaires pour accéder aux éléments : insert, erase, begin, end. Ces classes n'ont pas nécessitées les nouvelles extensions du langage C++, seulement une petite extension du header <functional> et l'introduction des headers <unordered_set> et <unordered_map>. Aucun autre changement aux classes de la norme actuelle n'est nécessaire, et elles ne dépendent d'aucune autre extension de la bibliothèque standard. Tout un tas de nouvelles fonctions mathematiques seront ajoutées, comme les integrales exponentielles, les polynomes de Legendre généralisés, les fonctions zeta de Riemann, etc... En tout, 23 nouvelles fonctions mathematiques (pour l'instant !) Bon, ca fait pas mal de choses (meme si je n'ai pas tout mis^^) et perso je trouve la nouvelle norme tres complete, a part deux ou trois truc... Donc, maintenant, la question (implicite en lisant l'article) : Que pensez-vous de cette norme? Liens : Article Wikipedia francais Article Wikipedia anglais Site du Standart Committee Site de l'université de Waterloo, lien sur l'interview de Bjarne Stroustrup Une courte introduction au C++0x
Dernière édition le 25 Juin 2008 à 18:18
|
|
| noob4ever |
Posté le 02 Jan 2008 à 20:22
|
|
![]() Messages : 295 GCPoints : 48742 |
Dommage que le C++ n'adopte pas la programmation fonctionelle, vraiment dommage ... OCaml aurait été finit et puis je trouve certain mécanisme des template bizarre ... enfin bon, vivement ça sortit car des ajouts m'interessent beaucoup moi !
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| Darktib |
Posté le 04 Jan 2008 à 14:56
|
|
![]() Messages : 4017 GCPoints : 347288 |
C'est quoi la programmation fonctionnelle ? |
|
| noob4ever |
Posté le 04 Jan 2008 à 15:52
|
|
![]() Messages : 295 GCPoints : 48742 |
http://fr.wikipedia.org/wiki/Programmation_fonctionnelle regarde ce comparatif : http://www.ffconsultancy.com/languages/ray_tracer/comparison.html
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| noob4ever |
Posté le 04 Jan 2008 à 15:59
|
|
![]() Messages : 295 GCPoints : 48742 |
Je peux pas m'empecher de vous faire partager ça : http://blog.developpez.com/index.php?blog=73&title=visual_studio_2008_et_mfc_de_gros_change&more=1&c=1&tb=1&pb=1 et moi qui croyais que les Winforms il y avait que ça de vrai en APi WIN32
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| Darktib |
Posté le 04 Jan 2008 à 16:07
|
|
![]() Messages : 4017 GCPoints : 347288 |
La programmation fonctionnelle m'a l'air bien complexe...Sans variables globales ca doit etre dur... Pour les winforms, je savait qu'il existait d'autres choses, mais par contre je n'ai utilisé ni les winform ni le reste... Meme si j'ai fait quelques interfaces^^ |
|
| Mod |
Posté le 04 Jan 2008 à 16:09
|
|
![]() Messages : 4954 GCPoints : 2100823 |
En voilà un bien joli jouet :). Ca pourrait être bien sympa de développer des applications avec ce look N'hésites pas à poster un nouveau sujet pour ce genre d'infos |
|
| noob4ever |
Posté le 04 Jan 2008 à 16:16
|
|
![]() Messages : 295 GCPoints : 48742 |
"Pour les winforms, je savait qu'il existait d'autres choses, mais par contre je n'ai utilisé ni les winform ni le reste... Meme si j'ai fait quelques interfaces^^ " Si tu veux faire des winforms ( des vrais ) je te conseille C#, sinon tu peux faire des sortes de winforms en C++/CLI ( c'est pas du C++ mais sa y ressemble ). Tu as un editeur de ressource avec Visual Studio, vraiment pratique. Avantage non négligeant de MFC : manipulation de sockets facile :) Microsoft reprend le controle des GUI
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| Darktib |
Posté le 04 Jan 2008 à 16:21
|
|
![]() Messages : 4017 GCPoints : 347288 |
Et moi qui avait installé Qt^^ En fait, les vraies interfaces que j'ai faites, c'etait en DarkBASIC Pro |
|
| noob4ever |
Posté le 04 Jan 2008 à 16:24
|
|
![]() Messages : 295 GCPoints : 48742 |
Qt à 2/3 trucs pas cool quand même licence pas très avantageuse pour une entreprise Obligé de compiler avec un Makefile sous windows, ou alors il faut faire un GROS bricolage, et je sais même pas si c'est possible avec Visual Studio. bref c'est bon pour les linuxiens cette lib par contre wxWidgets
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| shadosan |
Posté le 04 Jan 2008 à 16:48
|
|
![]() Messages : 194 GCPoints : 8461 |
Citation :
... est compliqué à installer et a une syntax parfois douteuse sinon, les articles me donne faim ^^ vivement 2009 ! ( lol ) |
|
| Darktib |
Posté le 04 Jan 2008 à 16:51
|
|
![]() Messages : 4017 GCPoints : 347288 |
Qt a les signaux et les slots. Par contre c'est vrai que qusetion licnce... il y a pas photo^^ Pour le makefile, c'est pas trop compliqué, suffit de taper 3 commandes dans la console^^ Par contre wxwidgets : je sais pas quel pack installer, y en a 3 tonnes... Mais je sais quelle est puissante : c'est avec cette librairie qu'a ete develeoppé Code::Blocks |
|
| noob4ever |
Posté le 04 Jan 2008 à 17:06
|
|
![]() Messages : 295 GCPoints : 48742 |
perso, pour installer wxWidgets j'ai pas trouvé d'autre moyen que de compiler la bibliothèque entière. Pour ceux qui veulent, vous pouvez y arriver très facilement en téléchargeant cette video qui est sur mon site faite par un ukrainien qui montre pas a pas comment faire : http://www.malloc-web.com/download/wxVC2005.avi @Darktib je ne dis pas le contraire, le problème après c'est pour debugger, moi j'ai pas envie de passer en ligne de commande pour ce genre de manipulation ...
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| shadosan |
Posté le 04 Jan 2008 à 17:12
|
|
![]() Messages : 194 GCPoints : 8461 |
bah moi pour Qt, sur windows xp, j'utilise Notepad++ et un raccourci de la console direct vers le dossier à compiler (pas besoin de faire de cd cheminVersDossier) et ensuite je fait qmake et make. sur Kubuntu 7.10 , j'utilise Kate, et pour compiler j'ai fait un script perso, donc il me suffit d'un click de souris, sans passer par la console ^^
Dernière édition le 04 Jan 2008 à 17:13
|
|
| noob4ever |
Posté le 04 Jan 2008 à 17:14
|
|
![]() Messages : 295 GCPoints : 48742 |
et pour debugger ?
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| shadosan |
Posté le 04 Jan 2008 à 17:16
|
|
![]() Messages : 194 GCPoints : 8461 |
je compile pour que la console soit activé et je fait afficher des petit messages aux endroits / moments que je veux. j'utilise jamais de débuggeur en tant que tel. |
|
| noob4ever |
Posté le 04 Jan 2008 à 17:18
|
|
![]() Messages : 295 GCPoints : 48742 |
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| shadosan |
Posté le 04 Jan 2008 à 17:22
|
|
![]() Messages : 194 GCPoints : 8461 |
meuhh non ^^ [edit : juste maso la preuve, j'men suis toujours bien sortit
Dernière édition le 04 Jan 2008 à 17:24
|
|
| Darktib |
Posté le 05 Jan 2008 à 15:42
|
|
![]() Messages : 4017 GCPoints : 347288 |
C'est dur sans débuggeur... Enfin, j'ai vu un jour un site sur lequel ils expliquaient comment configurer Code::Blocks pour compiler directement avec QT (sans console), mais c'etait il y a longtemps et je me souciens plus du site... Parait en tout cas que c'est galere^^ |
|
| gus |
Posté le 05 Jan 2008 à 15:48
|
|
![]() Messages : 371 GCPoints : 52046 |
C'est pas tres compliquer,il suffit juste de dire a code::blocks les repertoires...Moi je l'ai fait sa m'a pris 10mn/15mn | |



