remove_if n'a rien de magique et on peut l'ecrire en C++. C'est un template et donc on peut deduire le type de ses arguments.
Version imprimable
On peut toujours (en manipulant le paramètre comme un objet fonction, d'autant plus que si on passe une closure à une fonction, cette fonction est censée connaître sa forme; le code de remove_if version 98 n'a pas besoin de changer pour supporter les closures) - mais on ne peut pas obtenir beaucoup d'information sur l'objet passé en paramètre.
Quand à auto, je ne pense pas qu'on puisse spécifier un paramètre de fonction ayant pour type auto. En fait, lorsqu'une variable est déclarée comme étant du type "auto", il faut que cette variable soit initialisée:
auto i; // invalide: impossible de déterminer le type de i
auto j = 10.0f; // ok, j est du type float).
La seule façon autorisée de se servir de auto dans un déclaration est pour remplacer le type de retour de la fonction lorsque ce dernier est déclaré tardivement (c'est à dire lorsqu'on utilise la forme
Il va falloir penser à mettre à jour le parseur C++ de la balise code... :)Code:auto func-name(arg-list) -> type-id { ... }
A noter que le mailing 2008-08 est disponible. Les principales news: les concepts qui sont de plus en plus travaillés et une nouvelle version su draft:N2723.
Utiliser auto avec les paramètres revient plus ou moins à la même chose que d'utiliser un paramètre template.
Ensuite si on veut que la surcharge fonctionne, il faut utiliser SFINAE, qui s'utilise d'ailleurs très bien avec auto -> decltype.
N'est visible que pour les types pour lesquels t.foo() est valide grâce à SFINAE.Code:
1
2
3
4
5 template<typename T> auto f(T&& t) -> decltype(t.foo()) { return t.foo(); }
Ce qui augmente d'ailleurs l'intérêt d'exprimer tout code sous forme d'expression, car cela permet d'inférer les pré-requis.
Moi je me dit que je vais pouvoir alègrement oublier certains détails génant du language.
Mais je crois que j'ai déjà dit sur ce thread, c'est plus les prochaines générations de débutant qui vont être troublés... va falloir leur faire des historiques avant de commencer a leur faire apprendre le language. Histoire qu'ils voient qu'un language existe dans le temps et n'est pas fixé...et qu'ya des raisons a ça.
Le prochain Visual Studio 2010 est disponible en version (plus ou moins) "alpha" et les développeurs ont donné un example d'utilisation des lambda assez clair et pas mal interessant. (Peut être candidat à traduction?)
Dans tous les cas je suis un peu deçu qu'il n'y ai que 5 features du c++0x d'implémentés dans cette version qui ne devrait être en version finale qu'a la fin de l'année prochaine...
C'est sûr que si VC++ met autant de temps à implémenter le standard C++0x qu'Internet Explorer pour le HTML/CSS, vous êtes pas sortis de l'auberge, les adeptes de la fenêtre…
Il y a deja des choses dans des versions releasee, donc oui. Voir http://gcc.gnu.org/projects/cxx0x.html, voir ausi http://www.generic-programming.org/software/ConceptGCC/.
Quel sera le rapport entre les deux au moment de la sortie de VC 2010, je n'en sais rien.
gcc bosse pas mal dessus, ne vous inquiétez pas.
Les liens de Jean-Marc sont à ma connaissance les 2 plus utilies.
Ils parlent beaucoup d'arrêter le développement conceptgcc pour ne bosser que sur les prochaines versions de gcc. Mais le code de conceptgcc est ainsi tout frais tout chaud tout prêt pour rentrer dans gcc. Plus d'infos sur la ML de ConceptGCC.
Visual C++ 10 est déjà bien avancé dans C++0x a priori...
J'ai causé hier avec un mec de Microsoft qui touche pas mal à tout ce qui est C++, et effectivement ils ont déjà d'excellentes choses dans VC++ 10 CTP et comptent bien continuer, autrement dit ils ne laissent absolument pas le C++ standard de côté. En fait, ils vont fournir un petit framework pour faire de la parallélisation extrêmement puissante combinée aux lambdas, par exemple.
J'imagine qu'ils vont compléter avec un SP comme ils avaient complété la stl avec le TR1 dans le SP1 de VS2008.
Au passage, VC++ 10 serait ~ prévu pour fin 2009 début 2010. Là on a juste une première technology preview. Par contre, ça risque d'être efficace, accompagné de ce qu'ils vont faire pour la parallélisation.
Oui mais d'après les commentaires sur le blog, il a été officiellement décidé que les features c++0x citées seraient les seules fournies pour la release de VC10... même si j'espère qu'ils réviseront ça d'ici là mais j'en doute.
Citation:
Développement Parallèle
Avec cette nouvelle version, on y retrouvera à la fois un Concurrency Runtime, qui permettra la gestion dynamique de ressources dans un environnement fortement concurrentiel, ainsi que des librairies Parallel Pattern Library (PPL) Agent Library, qui fournissent un ensemble de Primitives (des tâches), d’algorithmes (Parallel_For, Parallel_For_Each, etc..) d’objets de synchronisations (enter_critical, reader_critical, event, etc..) et de structure de données concurrent (concurrent_queue, concurrent_Stack, etc..) qui ont pour but de réduire les concepts du parallélisme, et ainsi favoriser une meilleur adoption.
En fin Boris, nous a assuré que l’IDE de VC 10 permettrait de déployer plus facilement les applications, et qu’ils avaient bosser de manière drastique sur les performances des gros projets.
En fin, pour ceux qui pensent que le C++ est mort, Scott Guthrie à encore annoncé aujourd’hui notre intention de continuer à travailler sur Win32 et C++, d’ailleurs les nouveautés dans Windows 7 annoncés à la PDC 2008 le prouvent.
Oui c'est déjà bien par rapport a il y a plus d'un an :)
Sinon c'est clair que les libs de parallélisation vont aider (de loin ont dirait de la simplification/ajout de MPI+OpenMP non? On sait si c'est basé sur ces libs?)
Pour la distribution par contre est-ce que par hasard tu auras plus d'infos?
Ce sera de l'analogue à ces libs-là, mais fait maison je crois bien. Et il me semble aussi qu'il s'agit d'être MPI/OpenMP-compatible pour des parties "génériques" du framework.
Concernant la date de release ?
Non, c'est tout ce qui a été dit en conférence, pas plus désolé :/
Pour VC++10, on prépare une surprise :)
Ca fait déjà un bout de temps qu'ils parlent de cette lib (une version .NET avec les mêmes abstractions existe déjà, d'ailleurs), et à ce que j'en ai vu, ça m'avait l'air plus proche des TBB. Par ailleurs, ils comptaient proposer en plus des outils pour aider à débuger le multithread (visualiser en debug des variables par thread,...) Il y a un webcast en français sur le site de Microsoft sur le sujet, il doit dater du début de l'année, de mémoire.
J'ai justement parlé à celui qui a fait le webcast.
En fait, oui on pourra debugger les programmes multithread plutôt facilement, même si ça ne vaudra pas les outils d'Intel ou autres, et ce n'est pas l'objectif.
Sur wikipedia C++0x est devenu C++1x (depuis Juillet en fait quand je regarde les diffs). C'est officiel ?
vous me direz c'est juste une question de nom mais je croyais qu'on s'orientait vers un C++0a.
Toujours est il qu'elle se fait désirer cette nouvelle norme. Bonne ou mauvaise nouvelle? :?
Bah c'est 1x si on reste en base 10, mais en hexa ça serait surement C++0x toujours, mais avec x = a :D
En espérant que ce ne sera pas C++1x en hexa :?
Ceci dit, il me semble que l'on parle de cette nouvelle norme depuis 2005 ou 2006...
Nous l'attendons donc depuis si longtemps que, tant qu'à faire, je préférerais avoir une norme bien ficelée qui prend "un peu de retard" que quelque chose fait un peut trop à la va vite pour respecter une road map, mais qui devrait être repris d'ici deux ans à coup de technical report :P
Bien sur, le retard n'est jamais bon, surtout que l'on ne sait pas trop sur quel pied danser en attendant, mais, dans l'ensemble, la norme actuelle, et surtout son technical report, sont, enfin, correctement implémentée, et, malgré tout, elle tient la route :D
Pour moi, le risque n'est pas tant un truc pas fini qu'un truc vidé de sens. Finalement la nouvelle norme apporte assez peu par rapport à l'ancienne, quand on réfléchit à la durée depuis 98...
En fait, cela me fait me poser une question...
S'il décident de retarder la sortie officielle de la norme (d'une durée inconnue), y a-t-il une chance pour qu'il décident de faire "marche arrière" sur certaines décisions, comme celle de ne pas inclure les concepts :question:
Ou s'agit-il seulement de se donner "un peu plus de temps" pour la finaliser sous sa forme actuelle :question:
Etant entendu que, de toutes manières, il n'y aura quoi qu'il advienne pas d'ajouts supplémentaire :P
Ils ne reviendront pas sur les concepts. Le retrait des concepts leur a déjà fait perdre du temps.
On ne peut espérer que des petites choses, mais à mon avis pas les lambdas polymorphes ou autres grosses features de ce genre. Ils essaient surtout de consolider ce qui est déjà, résoudre le max d'issues, etc.
En même temps, il y a un tas de petites choses qui seront très utiles. Je pense à la délégation de constructeur souvent demandée par les gens venant d'autres langages, les constantes expressions, le nullptr, =default/=delete, les classes d'enum, les typedef de template, le long long int. Puis d'autres choses qui deviendront rapidement indispensables : les smart pointer, auto/decltype, les ranged-based for, les variadic templates, l'extern template, les assertions statiques, etc. Puis les lambda, et la sémantique de mouvement. Bref, ce ne sont peut être pas de grandes nouveautés mais clairement des choses qui manquent et pénalisent le C++ par rapport à d'autres langages.
http://herbsutter.wordpress.com/2009...dards-meeting/ > Ils font donc principalement du nettoyage pour sortir enfin le nouveau standard.
Par contre je suis jeune mais je me sent vieux rien qu'a l'idée que certaines features (les concepts mais aussi d'autres) mettrons minimum 3 ans suplémentaires pour être standardisé, plus pour être implémenté.
C'est quand même vachement long à force :/