Visual Studio 2012 Update 1

Avant on appelait cela des service-packs. Aujourd’hui, il s’agit d’une Update/“mise à jour”. Donc, la première mise à jour est disponible pour Visual Studio 2012, dès maintenant dans tout bon centre de téléchargement MSDN.

A noter que VS2012 Update 1 mange un peu plus de 500Mo de disque. Par quoi ces Mo sont-ils occupés ?

Une nouveauté pour C++

La nouveauté (sans S) pour les développeurs C++ est le ciblage de Windows XP ! Un choix dans les propriétés du projet :

target-windows-xp

Note : sur ce PC je n’ai installé que Visual Studio 2012. Si j’avais également installé Visual Studio 2010, j’aurais en plus le choix “Visual Studio 2010 (v10)” dans la liste.

Malheureusement il n’y a rien de neuf concernant C++11 dans cette “Update 1”.

Pourtant, il y a un mois, à la conférence Build, l’équipe Visual C++ a sorti une pré-version “November CTP” du compilateur C++ 2012, contenant quelques nouveautés sur le support de C++11. Les nouveautés de cette pré-version ne sont pas incluses dans cette Update 1.

Par exemple, les String-literals de C++11 génèrent des messages d’errreur :

raw-litterals

Si l’on souhaite utiliser ces fonctionnalités de C++11, il faut continuer à utiliser la pré-version “November CTP”, et ne pas installer cette “Update 1”.

 

Et les plantages réguliers de Visual Studio 2012 ?

Je me demande si les crashes réguliers de Visual Studio 2012 ont été corrigés. Je rencontre jusqu’à une vingtaine de plantages de Visual Studio 2012 par jour. J’ai envoyé à Microsoft des dizaines de crash-dumps !

Visual Studio 2012 crash

Je verrai cela dans les prochains jours… J’avoue que c’est cet espoir qui m’a réellement motivé à installer cette Update 1.

Les autres nouveautés sont décrites sur le blog de Somasegar. Elles concernent des améliorations sur le débogage des applications Windows Store, les tests unitaires, le développement Sharepoint, la gestion des projets agiles…

Herb Sutter : le futur de C++

Lors de la conférence Build Windows, Herb Sutter, président du comité ISO C++, a tenu une session sur le futur de C++. Cette session est disponible en webcast, en anglais : http://channel9.msdn.com/Events/Build/2012/2-005

Des annonces surprenantes montrent à nouveau que le langage C++ est vraiment en train de redevenir un (voire LE) langage de premier plan.

 

C++ chez Microsoft

Par exemple, Herb Sutter indique que chez Microsoft, TOUTES les équipes de développement (Windows, .Net, Office, Servers, Azure, etc.) travaillent en C++, et dépendent de Visual C++. C’est d’ailleurs une lourde responsabilité pour l’équipe Visual C++ !

L’image ci-dessous représente le modèle de programmation (bien connu) de Windows 8. Comme vous le savez sans doute, il existe deux types d’application : Windows Store et Desktop apps. On peut programmer ces dernières à l’aide de Javascript, C/C++ ou C#.

CPP-programming-model

En réalité, ce modèle de programmation est essentiellement et majoritairement basé sur C++. Herb Sutter indique que Windows 8, la nouvelle API WinRT et les services de base sont tous écrits en C++. Les modules coloriés ci-dessus (vert, bleus et violets) sont en C++.

 

Une version intermédiaire du compilateur VC++2012

Microsoft l’avait annoncé : des mises-à-jour du compilateur C++ seront effectuées après la sortie de Visual Studio 2012, notamment pour améliorer rapidement le support de C++11 dans Visual C++.

Ce 2 novembre 2012, une version CTP du compilateur est rendue disponible. C’est une Community Technical Preview, version “béta”, provisoire. A ne pas utiliser sur du code destiné à être mis en production.

Cette CTP 11/2012 du compilateur supportes les fonctionnalités de C++11 énumérées ci-dessous :

vc-batch-1

Cette mise à jour du compilateur est destinée à Visual Studio 2012 Express aussi bien qu’aux versions payantes.

Pour télécharger cette version du compilateur : aka.ms/vc-ctp

Pour en savoir plus : aka.ms/vc-ctp-tour

De nouvelles versions du compilateur sortiront en 2013. Le but est 100% de conformité à la norme C++11.

 

Les versions à venir de la norme C++

Comme je l’annonçais dans un billet précédent, de nouvelles normes du langage C++ sont à l’étude.

Aujourd’hui, Herb Sutter annonce officiellement les normes C++14 et C++17 à venir, et en donne quelques détails. Ces normes concernent tous les compilateurs C++ sur toutes les plate-formes.

 

cpp-timeline

C++14 sera une version mineure concernant le langage lui-même, mais contiendra de nouvelles librairies :

  • File System (équivalent au File System version 3 de Boost, voir FileSystem sur le site de Boost), disponible dès 2013.
  • Network (une librairie d’accès réseau) pour dans un an, fin 2013, avec ensuite des mises à jour annuelles.

C++17 comprendra des améliorations du langage C++, et de nombreuses nouvelles librairies.

Ces nouvelles fonctionnalités concerneront tous les compilateurs C++ sur toutes les plate-formes. Quant à Visual C++, il essaiera de coller le plus possible, et le plus rapidement possible à la norme (ce qui n’a pas été le cas pour Visual C++ 2012).

Bientôt plus de détails sur les nouveautés de C++14 et C++17 sur ce blog…

 

isocpp.org

isocpp.org est un nouveau site qui centralise TOUT sur le C++, sur toutes les plates-formes et tous les compilateurs. Herb Sutter vient d’en annoncer l’ouverture officielle. C’est LE portail de la communauté du langage C++. Malheureusement tout en anglais (pour l’instant ?).

Les principaux sujets sur isocpp.org :

  • Initiation, tutoriels, ressources pour apprendre
  • Des forums où tout le monde peut intervenir
  • Un blog sur tous les sujets qui animent la communauté
  • Le détail des normes C++ présentes et à venir
  • Un formulaire de soumission de proposition

Une FAQ C++ est en cours, ainsi que la mise à disposition du prochain livre de Bjarne Stroustrup sur C++11.

Je me demande bien dans quelle partie de ce site se passera la guerre Windows/Linux.

Je reparlerai de ce site, tellement son contenu est prometteur.

 

C++ Foundation

La fondation C++ vient d’être créée aux Etats-Unis. Son but est de promouvoir l’utilisation et l’évolution du langage C++ sur toutes les plate-formes. C’est un organisme indépendant à but non lucratif.

La fondation C++ est présidée par Bjarne Stroustrup, le créateur du langage C++. Parmi les directeurs fondateurs on note bien sûr Herb Sutter, Chandler Carruth (développeur du compilateur CLang), ou B. Dawes, l’un des développeurs de Boost.

cpp-foundation-directors

La fondation C++ est parrainée, supportée et financée par Microsoft, Google, Intel, et d’autres :

cpp-foundation-founders

La première création de la fondation C++ est le site isocpp.org.

 

Conclusion

Impressionnante conférence sur le futur de C++. Ce langage, à la base de tellement de logiciels dans l’industrie, est en train de devenir de plus en plus important, et sa communauté fait preuve d’un vrai dynamisme.

On retient que la norme C++ sera mise à jour plus souvent, avec notamment C++14 et C++17. Microsoft s’est enfin engagé à suivre de près, voire à anticiper la conformité de Visual C++ à la norme ISO. D’ici 24 mois nous aurons :

  • 3 nouvelles spécifications techniques (TS) sur des nouvelles librairies.
  • 1 nouveau standard C++14.

La fondation C++ est une organisation née avec des parrains prestigieux qui a pour but de promouvoir C++.

Le site isocpp.org est le portail du langage C++, créé par la fondation C++. Il est déjà bien fourni.

Teaser : Herb Sutter sur le futur de C++

Herb Sutter annoncera-t’il officiellement C++14 et C++17 ce vendredi ?

 

Le conférence Build Windows 2012 (conférence annuelle Microsoft pour les développeurs) bat son plein ces jours-ci.

Pendant 10 ans on n’a pas parlé de C++ aux conférences développeurs Microsoft. Cela change maintenant, avec la sortie de Windows (phone) 8. Le langage C++ a maintenant une place de choix dans le discours de Microsoft auprès des développeurs. Tant mieux : un seul langage ne peut pas correspondre à tous les besoins en développement, et C++ a sa place à côté de C# et Javascript.

La conférence Build 2012 a de nombreuses sessions sur C++. Certaines sont déjà disponibles en webcast, en VO ST.

A cette conférence Microsoft, le grand Herb Sutter, membre influent du Comité ISO C++, anime une session sur le futur du langage C++, diffusée en direct sur le site http://channel9.msdn.com/ vendredi 2 novembre 2012 à 20h45. Cette session concernera C++ en général, et pas seulement Visual C++.

Herb Sutter a même réalisé un teaser de 90 secondes pour cette session. On aura sans doute plus d’informations sur C++14 et C++17. Et peut-être une confirmation de rumeur sur la librairie File System de C++14 ?

 


Le teaser de Herb Sutter pour la session sur le futur de C++

Je m’appelle, Herb Sutter, je travaille dans l’équipe Visual C++ chez Microsoft, et j’ai le privilège de présider le comité ISO C++. C’est une période très intéressante pour C++, étant donné l’intérêt pour ce langage chez Microsoft, et dans l’industrie du logiciel en général. C++ vous permet de participer aux révolutions actuelles de l’industrie informatique : les tablettes, la mobilité, la programmation parallèle GPGPU. Avec C++ nous vous donnons un accès complet et direct au matériel et à l’OS. Cette conférence, cette semaine, est importante pour C++.

Vendredi, branchez-vous sur chanel9 en direct, ou regardez la session en VOD. Nous avons des informations et annonces qui vont vous intéresser. La première partie de la session concernera spécifiquement Visual C++. mais la seconde partie sera sur C++ en général, pour tous les compilateurs, sur toutes les plateformes. Je crois que vous allez adorer les annonces que nous allons faire dans cette deuxième partie.

Nous pensons que C++ va prendre de plus en plus d’importance dans ces nouveaux usages, chez Microsoft et dans l’industrie en général, et nous en sommes très heureux.

A vendredi.

Joyeux anniversaire C++

On peut établir que le langage C++ est né le 14 octobre 1985, lors de la parution du livre The C++ Programming language de Bjarne Stroustrup.

C++ a 27 ans, et il n’a pas fini sa croissance.

Pour fêter cet anniversaire, on apprend que de nouvelles versions de C++ vont voir le jour.

 

C++14 / 17

C++11 vient d’être normalisé. Les prochaines versions de C++, C++14 et C++17, sont en cours de définition. Les membres du Comité C++ (ISO C++ Standards Comittee) se réunissent régulièrement à ce sujet. Par exemple, la prochaine réunion est en Europe, le 9 novembre à Düsseldorf.

C++14 sera une mise à jour corrective de C++11. Des corrections d’erreurs et bugs de C++11, comme sur les lambdas par exemple. Mais peu de nouvelles fonctionnalités à priori. Nous verrons sans doute cela dans Visual Studio 2014.

C++17 aura de vraies nouvelles fonctionnalités. Le Comité C++ a mis en place 6 groupes d’études pour faire progresser le langage dans différents domaines :

  1. Concurrency and Parallelism Study Group
  2. Modules Study Group
  3. File System Study Group
  4. Networking Study Group
  5. Transactional Memory
  6. Numerics

En comparaison, le Comité n’avait mis en place qu’un seul groupe d’étude pour C++11 : “concurrency”. Ce groupe est à l’origine de l’inclusion dans C++ des objets atomiques, du multitâches, async et futures, etc.

Les membres du Comité C++ murmurent sur Twitter que le groupe d’études File System aura terminé son travail pour 2014. Aurons-nous une librairie de gestion de fichiers pour C++14 ?

Hello (again), world !

Ce blog a été hors ligne pendant un long moment. J’ai changé d’hébergeur, et j’ai fait le mauvais choix (je ne dirais pas pour qui j’avais changé pour ne pas faire de tort à Totxxxxxxxxxns.com). Ballot que j’ai été de ne pas vérifier la réputation sur les forums avant de faire un choix.

J’ai corrigé mon erreur, changé une fois de plus d’hébergeur (un français, OVH, du coup !) et revoici BlogMFC en ligne !

Evidemment, les MFC sont moins à la mode qu’il y a deux milliards vingt quelques années, mais C++ est toujours un langage bien vivant, et il y a du boulot en C++ ! Et puis l’actualité de C++ est très riche en cette rentrée.

 

C++14

C++11 vient de sortir, et C++14 est déjà en cours de définition par le C++ Standard Comitee, comme le rapporte une taupe (@sdt_intel sur son compte twitter) :

sdt_intel

Question subsidiaire, qui partage actuellement les membres du Comitee : est-ce que false pourra être l’équivalent de nullptr dans C++14 ? (ah non alors !)

 

C++/CX

C++/CX redonne à C++ une place de choix dans le développement d’applications WinRT pour Windows 8. Pour les PC Desktop, portables, ultrabooks, tablettes et téléphones ! C++/CX est le mal nécessaire pour utiliser C++ sur tous ces périphériques…

Je crois que beaucoup de jeux sous Windows 8 sont développés en C++/XAML/DirectX. De quelle manière la sortie officielle de Windows 8 va-t’elle modifier notre monde du développement d’applications ?

 

Code C++ parallèle

Et cette année plus que jamais, utiliser C++ c’est écrire du code parallèle, avec notamment C++AMP. Sans compter que la programmation de WinRT est totalement asynchrone.

Un très bon livre (en anglais) vient de sortir : “C++ AMP Accelerated Massive Parallelism with Microsoft Visual C++”. Je n’en ai entendu que du bien, comme ici par exemple. Déjà disponible sur amazon.fr pour 29 €.

C++ AMP en 140 caractères : “Un modèle objet de programmation parallèle pour C++, indépendant du matériel”.

Développer en C++ pour Windows Phone 8

Microsoft a dévoilé Windows Phone 8 le 20 juin 2012 lors du Windows Phone Summit à San Francisco.

windowsphonesummit

 

Comme prévu, Windows Phone 8 est très proche de Windows 8 RT (Metro/ARM). Windows Phone 8 utilisera le même système de fichiers (NTFS), la même pile réseau, la même sécurité, la même techno d’affichage (DirectX), le même système de pilotes de périphériques que son grand frère Windows 8. Et bien sûr le même navigateur internet IE10.

Sous Windows Phone 7, on ne pouvait créer des applications qu’avec .Net (Silverlight ou XNA). Heureusement tout cela change avec Windows Phone 8 : on peut utiliser C++ et DirectX, comme sous Windows 8 (WinRT).

Heureusement les applications WP7 écrites en C# (Silverlight ou XNA) continueront à fonctionner sous WP8. Mais Microsoft déconseille l’utilisation de C# pour les jeux, au profit de C++ et DirectX, comme sous Windows 8.

Le portage des jeux C++/DirectX sous Windows Phone 8 sera grandement facilité (sur le site TheVerge). Le développement sous Windows Phone 8 est très similaire au développement sous Windows 8 RT.

Mais les applications conçue pour Windows 8 RT (ARM) ne pourront pas s’exécuter telles quelles sous Windows Phone 8. Si les deux plate-forme utilisent les même processeurs (ARM) et la même architecture de Windows, il existe des différences entre Windows 8 RT et WP8. Il faudra adapter une application WinRT pour qu’elle fonctionne sous Windows Phone 8.

On en saura plus cet été, lors de la sortie du kit de développement SDK WP8, et cet automne à la sortie de Windows Phone 8.

J’ai bien fait d’acheter le bouquin de Petzold sur la programmation de Windows 8 ! J’ai de plus en plus l’impression que Microsoft mise gros et ne peut pas se permettre de rater Windows 8… non ?

windows-phone-8-directx

Petzold – Programming Windows 8

 

 

petzold-programming-win32

 

+

microsoft-surface-profil

=

671768.indd

 

Les codeurs un peu dinosaure ont appris à programmer sous Windows avec « Programming Windows », un bouquin de Charles Petzold. C’était du C/C++ pour l’API Win32.

Microsoft a l’air de vraiment vouloir vendre des zillions de Windows 8 et ils mettent le paquet pour ça. Ils ont des arguments (comme Surface). On n’échappera sans doute pas, plus ou moins, en partie, à la nouvelle API WinRT. Pourquoi pas un module d’extension Metro pour une appli « Pro », par exemple…

Charles Petzold est en train d’écrire une nouvelle édition de Programming Windows. Une version provisoire est disponible au format ebook. Le bouquin concerne principalement C#, et Petzold avait abandonné C++ depuis la sortie de C#. Mais il revient quand même à C++. S’il est plus facile de débuter avec C#, « tous les langages ne sont pas égaux sous Windows 8″ écrit-il. Petzold a choisi de privilégier C# car « un programmeur C++ lit facilement du C#, l’inverse n’est pas vrai ». Mais C++ permet par exemple d’accéder à DirectX, COM ou Win32 plus facilement.

Et donc, tous les exemples du livre sont disponible en C++, en plus de C#. Cela permet de comparer les deux langages sous Windows 8.

Ce livre est un livre d’initiation à WinRT, mais avec le fameux style Petzold. Un excellent moyen de découvrir l’API WinRT, en C# ou C++/CX. Il coûte actuellement 20$, mais le téléchargement des exemples de code est gratuit.

Visual C++ 2012 pour Windows XP

Oui !

Yes !

Ja !

да !

Sì !

Après bien des rumeurs, c’est maintenant officiel. Visual C++ 2012 pourra être utilisé pour créer des applications C++ sous Windows XP, en même temps que Vista, 7, 8.

Steve Teixeira vient d’annoncer sur le blog de l’équipe Visual C++ qu’une mise à jour de Visual Studio 2012 disponible cet automne permettra la compatibilité avec Windows XP et Windows server 2003.

Alors, à sa sortie, Visual Studio 2012 ne pourra pas générer d’applications pour Windows XP. Mais une mise à jour cet automne corrigera ce problème.

Du coup, je file convertir mes projets vers Visual Studio 2012. A moi le nouveau for !

LINQ et RX pour C/C++

Microsoft prépare une version de LINQ et RX pour C et C++. C’est en cours de développement, presque fini, mais pas encore disponible. Pas d’info supplémentaire sur la disponibilité. (Et les infos données ici ne sont peut-être pas définitives).

 

Pourquoi LINQ pour C++ ?

LINQ existe pour C# et .Net depuis quelques années, et permet de traiter facilement des données.

Mais pourquoi faire lent quand on peut faire rapide ?

Pourquoi consommer de la mémoire, de la batterie, du temps, quand on peut en économiser ? Cette question est d’autant plus importante que la puissance des PC a un cout et des limites, surtout avec les matériels portables ou mobiles.

Les tests montrent que LINQ pour C++ est quatre fois plus rapide que LINQ pour C#.

La librairie C++LINQ va t’elle être largement adoptée pour faciliter le traitement de données en C++ ?

Et cette application qui gère des données, va t’on la coder en C# ou bien en C++ ?

 

A quoi ressemble C++LINQ

C++LINQ est une librairie de templates, comme la librairie STL. Elle est basée sur les conteneurs standards de la STL.

Dans un premier temps, Microsoft met à disposition l’équivalent de « LINQ to Objects ». La manipulation de bases de données viendra ultérieurement, c’est prévu.

C++LINQ permet de manipuler facilement des données contenues dans des conteneurs standards de la librairie STL (vecteurs, listes, maps…)

Il est très facile de traiter les éléments d’un vecteur, de les modifier, les sélectionner et obtenir en résultat un nouveau vecteur contenant les données traitées. C++LINQ manipule des vecteurs (ou autre conteneur) sur lesquels des opérations sont effectuée. Le résultat d’une opération est un nouveau conteneur, sur lequel on peut à nouveau effectuer une opération. Ainsi les données d’un conteneur sont manipulées, transformées, filtrées très simplement.

 

Quelques méthodes de C++LINQ

C++LINQ utilise des conteneurs étendus (ou pseudo-conteneurs), possédant des méthodes supplémentaires permettant de traiter les données. La méthode From est utilisée pour convertir un conteneur STL classique en conteneur étendu :

var linqvect = from(v);

linqvect est un pseudo-vecteur sur lequel C++LINQ va pouvoir travailler.

Différentes méthodes peuvent être appliquées à un pseudo-conteneur :

select(function func)

select a comme paramètre une fonction (ou foncteur ou lambda) qui modifie un élément du conteneur.

Voici le code qui remplace chaque élément d’un vecteur par son carré :

vector<int> v;
var square = from(v).select([](int x) { return x*x;});

 

 

where(function func)

where permet de filtrer le contenu d’un conteneur et de choisir les éléments que l’on souhaite garder.

L’exemple suivant crée un pseudo-vecteur où chaque élément contient le carré du vecteur initial. Le pseudo-vecteur ne contient que les carrés supérieurs à 100.

var square100 = from(v)
    .select([](int x) { return x*x; })
    .where([](int x) { return x > 100; });

 

join (vector<T2> vect2, Function f, Function f2)

join permet de combiner le contenu de deux conteneurs (deux vecteurs, deux listes…) selon le résultat de deux prédicats f et f2. Le résultat de join est un pseudo-conteneur d’objets de type pair.

groupby trie les éléments, et retourne un pseudo conteneur de conteneurs.

 

Voici un autre exemple de code :

vector<int> some_primes(size_t howMany)
{
       auto xs = from(int_range(0, INT_MAX))
                      .where(is_prime)
                      .take(howMany);
       return xs.to_vector();
             // or: vector<int>(begin(xs), end(xs));
}

La création et manipulation des conteneurs utilisent les « Improved Iterator Categories » de boost (je ne sais pas traduire en français !) Lors des traitements, des nouveaux conteneurs ne sont pas créés. Seuls des itérateurs étendus sont calculés. C++LINQ manipule des pseudo-conteneurs, il n’alloue pas un nouveau conteneurs à chaque opération.

C++LINQ est très performant, et permet une écriture en C++ moderne (C++11). A combiner aux lambdas, aux opérateurs &&…

 

 

Plus d’infos sur C++LINQ sur la chaîne Microsoft Going Native.