910 likes | 1.05k Views
Tour de France C++ 2005 http://www.microsoft.com/france/visualc/. Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique Développeurs. HP Partenaire Mondial de Microsoft. Intégrateur des technologies Microsoft :
E N D
Tour de France C++ 2005http://www.microsoft.com/france/visualc/ Eric Mittelette : ericmitt@microsoft.com Eric Vernié : ericv@microsoft.com Relation Technique Développeurs
HP Partenaire Mondial de Microsoft • Intégrateur des technologies Microsoft : • Plus de 10M de postes Windows 2000/XP déployés • Plus de 13M de postes MS Exchange 2000/2003 déployés • Services de support Microsoft • Développement conjoint de solutions verticales : • HP OpenBank – Banque • HP CBI.NET – Industrie • HP ISM.NET – Telecom • Centre d’expertise et de benchmarks dédiés Microsoft • Un portfolio de solutions pour une infrastructure Microsoft étendue • Serveurs 32 et 64 bits • Stockage NAS, SAN • Postes de travail… Windows Mobile Phone EditionWindows XP EditionTablette PC
Agenda • Introduction : État de l’art du C++ • C++ Natif • Compilateur • Bibliothèques • C++ et le monde .NET • Rappel sur la CLR • Extension Managed C++ • C++ / CLI
État de l’art du C++ • Non le C++ n’est pas mort • Très proche de la Norme ISO 98 (98%) • Évolutions • Support du standard ISO 98 • Performance • Sécurité • S’ouvrir au monde .NET • « First class tool and language » • Plusieurs voies pour le future • Code Natif (SDKs MFC ATL STL…) • Code Managed (Extensions et CLI) • DDKs : reste l’outil indispensable pour les drivers • Embedded : code natif pour CE • Longhorn : nouveau jeux APIs dans WinFX …longue vie au C++ ! • Jeux et DirectX : performances et framework au rendez vous (XNA)
Compilateur C++ et norme ISO • Depuis le début Microsoft fait évoluer son compilateur • Norme 1998, presque atteinte, aujourd’hui: • 98% de la norme • Support des STL renforcé • Points non conforment à la norme
Portage de code • Breaking changes (impact de la norme ANSI) • Spécialisation explicite (plus de redéfinition) • Opérateur new lève désormais des Exceptions ( std::nothrow pour revenir comme avant) • Chaînes littéral (const char[n]) • Surcharge des Template de fonctions changent • Koening lookup • Initialisation de base à 0 • Typename devient obligatoire dans les Template… • Friend a changer de comportement sur les classes • Pointeurs sur Membres requièrent un & • Using, implicit const int ont changé • Portée des déclarations de for a changé (Zc) • I/O stream changement (#include <iostream>) • …
Démos • Impact de la norme ISO 98 • Koening lookup • Spécialisation partielle des Templates • Initialisation • Friend • Membre et pointeur • Scope • …
C++ Natif : Performances • Options de compilation • /Gy : Empaquetage des fonctions • /G7 : Pentium 4 • /arch:SSE[2] : (Utilisation des instructions et registres SSE) • WPO /GL et /LTCG au link (Optimisation du code) • PGO (Optimisation par instrumentation du code) • Floating point Model /fp • Intrinsec /Oi • OpenMP : pragma pour le code multi processeur
PGO en détail… • La création d'une application PGO s'effectue en trois grandes phases : • Compilation en code instrumenté. • Formation du code instrumenté ; • Recompilation en code optimisé.
C++ Natif : Sécurité • Options de compilation • Sécurité • /GS : prévention des débordements de tampon…. • /RTC : aide au débogage du code • Analyse de code • /prefast : identifie les leak, débordement de tampon…. • CRT Sécurisée • CRT sécurisé : ~ 400 modifications • Par exemple : strcpy devient strcpy_s • Fonction « non sure » dépréciées par défaut • #define _CRT_SECURE_NO_DEPRECATE • STL Sécurisée • Itérateurs STL détectent les débordements de tampon
Linker... • Options du Linker ajoutées : • /ASSEMBLYDEBUG • génère l’attribut Debuggable et désactive les optimisations JIT. • /ASSEMBLYLINKRESOURCE • Créé un lien vers une ressource dans le fichier de sortie • /DELAYSIGN • Place uniquement la public key dans assembly • /KEYFILE • Fichier contenant la clé • /KEYCONTAINER • Container de la clé • /SAFESEH • Avec /SAFESEH le linker produit uniquement une image si on peut générer une table des “safe exception handlers”. Cette table spécifie quels handlers seront utilisés pour l’image.
Compilateur, Linker...#Import • De nouvelles options pour #import : • auto_search • Si la librairie importée contient des #import (importation en cascade). • auto_rename • Quand le mot clé de la librairie est un mot clé réservé du C++, __ est ajouté devant le nom. • no_search_namespace, rename_search_namespace, tlbid • Gestion plus fine des imports et nom de namespaces.
Démos • Options de compilation • Sécurité • Buffer Overrun • Analyse statique de code • str_safe • RTC check • Performances • WPO • PGO
Pause • Retour dans 20 minutes • Les speakers sont dans l’escalier !
Bibliothèques • Microsoft propose depuis ~20 ans des librairies: • Les MFC évoluent et se maintiennent comme classe librairies générant du code natif • version non managée uniquement • ATL, continue son évolution vers STL • Apparaît comme Serveur WEB avec ATL Server
MFC • Crées dés les premières versions de Visual C++ • Objectifs : • Encapsuler les API Windows dans des classes C++ • Propose une architecture Vue/Contrôleur • Document <> (n) Vues • MFC V7.0
MFC • Changements MFC 7 et 7.1: • Connection maps ne sont plus compactées lors de la suppression d’un connection point . Ainsi le connection point supprimé est placé à NULL. On doit donc tester NULL quand on utilise : • CConnectionPoint::GetConnections • ConnectionPoint::GetNextConnection. • Les fonctions suivantes lèvent maintenant des exceptions: • CSimpleString::FreeExtra • CSimpleString::GetAt • CSimpleString::operator [] • CSimpleString::ReleaseBuffer • CSimpleString::ReleaseBufferSetLength • CStrBuf::SetLength • CTime::CTime constructors.
MFC • CAsyncSocket supporte IPv6-via les membres: • GetPeerNameEx, GetSockNameEx, ReceiveFromEx, et SendToEx. • La classe CImage check le nombres d’objets créés. • Quand le décompte vaut 0, La fonction GdiplusShutdown est automatiquement appelée pour libérer les ressources GDI+ • (« pil poil » pour les objets créés dans une DLL :-) • La classe CString a été réécrite sous forme de Template: CStringT • On peut donc l’utiliser dans des projets ATL sans un lien “trop lourd” aux MFC.
Futur des MFC • Reste « The » bibliothèque native C++ de la plate forme Windows • Continue d’évoluer en MFC 8.0 (détails à venir) • Travail d’optimisation sur l’intégration MFC/NET • Intégration des contrôles WindowsForm dans les dialogues MFC • Intégrer aux mécanismes DDX, DDX_ManagedControl • Intégration des WindowsForm dans les CViews • Un namespace : Microsoft::VisualC::MFC
Futur des MFC • Win32/MFC Windows hosting Avalon • XAML as Dialog, Wizards, Task Panes, etc. • XAML as MFC Views • Visuals for Rendering • Animations and Multimedia • Avalon Hosting Win32/MFC Windows • XAML as top level window • Win32/MFC Windows as Avalon control • Avalon Hosting ActiveX Controls
Futur MFC et XAML MFC hosting XAML Page in CControlBar as Task Pane CMDIChild hosting XAML Page as Child Window XAML Page hosting MFC CView as Element
ATL • Version 7.1/8 dans Visual Studio 2003/2005 • A l’origine pour créer des objets ActiveX • Faciliter la création d’objet COM par des Templates de code C++
ATL • S’ouvre au WEB • ATL Web Service • S’ouvre aux librairies graphiques • ATL Windowing et WTL • Exploite la programmation par attributs • Existe depuis l’origine de l’IDL (coclass) • Ajout de nouveaux attributs : • event_source, event_receiver pour les connection points • [ soap_method ] Pour les services Web • … • Un premier pas vers AOP • Traitement des Attributs ~ Code produit par Tisseurs • … A suivre !
ATL • Nouveautés des versions 7 et 7.1 • Sécurité • ATL7 propose des wrappers pour les win32API de sécurité. • Fichiers • CAtlFile CAtlTemporaryFile CAtlFileMappingBase/CAtlFileMapping • Threading • CWorkerThread<Win32ThreadTraits|CRTThreadTraits>: • De nouvelles collections • CAtlArray/CAtlList, CAtlArray/CAtlList, CRBTree/CRBMap /CRBMultiMap • CString • CStringT version Template
ATL • Version 8.0 (VS2005) • Détails des classes ajoutées et modifiées dans les mois qui viennent (post Beta2)
STL • STL = Ensemble de headers définit par la norme • 50 headers requis (+2 optionnels) • + 18 headers du C standard
STL • Mise à jour de l’implémentation de la STL: • hash_map Class • hash_set Class • Optional exception handling support. • Amélioration code formatting (readability). • Amélioration du support des DLL • (passage d’objet entre process). • Amélioration du support multithreading. • Amélioration de la conformité aux standards. • Using namespace std; • Iostream.h dépréciée
STL • Migration depuis VC++ 6.0 • Problèmes potentiels: • Changements des reverse_iterator • Changement des MIN/MAX #define • Certains Itérateurs ne sont plus des pointeurs…
Futur des STL • Version 8.0 (VS2005) • Détails des classes ajoutées et modifiées dans les mois qui viennent (post Beta2) • Apparition des CLI-STL • Permettra a vos codes actuels basés sur STL d’être full managed • Challenge de performance vs Collections actuelles du Framework • A suivre plus tard (Post RTM ?)
API Win32 : DPAPI • Data Protection API • Renforcée sur 2003, lancé depuis 2000 • Encapsulation C# dispo sur MSDN • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secmod/html/secmod21.asp • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/strsafe.asp
WTL… • Windows Template Library • Né de l’ATL Windowing • Une forme plus légère que les MFC • Hybride ATL/MFC/WTL possible • Pas d’architecture Doc/Vue (mais exemple sur le Web) • Pas de support « officiel » de Microsoft • “You need to know MFC, and know it well enough that you understand what's behind the message map macros, and can edit the code marked "DO NOT EDIT" with no problems. You need to know Win32 API programming, and know it well” – M Dunn (Code Project) • Lien pour le download : version 7.0 • http://www.microsoft.com/downloads/details.aspx?familyid=128e26ee-2112-4cf7-b28e-7727d9a1f288&languageid=f49e8428-7071-4979-8a67-3cffcb0c2524&displaylang=en • Lien pour le Wizard 7.1 • http://www.codeproject.com/useritems/wtl_71_wizard.asp • Pour en savoir plus : • http://groups.yahoo.com/group/wtl/
Démos • Bibliothèques • MFC • STL • WTL • ATL Service Web • qui connaît les services Web ? • Un petit rappel ?
C++ et le monde .NET • .NET sur tous nos Systèmes • .NET expose une énorme Bibliothèque de classes • Plus de 8000 classes extensibles • VS2003 cible le Fx 1.1 • VS2005 cible le Fx 2.0 (en 32 et 64 bits)
Rappel sur la CLR • CLR : Virtual Execution System (VES) • Exécute du code managé • Fournis une couche entre code Managé et les API natives de l’OS • Responsable du chargement et de l’exécution des programmes… • Fournis un ensemble de services … • Garbage Collector • Sécurité • Compilation à la volée • …
C’est quoi .NET par rapport à la CLR ? • .NET est la combinaison : • Runtime : CLR (Common Langage Runtime) • Librairies : Framework Class Library • Permet de connecter des applications via les services Web XML
DLL Process WIN32 Memory Managed Code : Assembly Unmanaged Code Win32 COM COM+ 1.0 Heap CLR Managed Memory The big picture Application .NET Application .NET • Managed Memory • Managed Exécution • Notion d’ Assembly • Services • JIT Compilation • Sécurité • Base Classes GC
Process WIN32 Espace d’adressage Section .text Section .idata En-tête CLR IL Métadonnée DLL : MSCorEE.dll Fonction: _CorExemain MSCorEE.dll Le thread principal du processus démarre En-tête PE JMP _CorExeMain EXE .NET _CorExemain Void Main (string args[]) Chargement de la CLR
Thread Support COM Marshaler Type Checker Exception Manager Security Engine Debug Engine IL to Native Compilers Code Manager Garbage Collector CLR : Vue d’ensemble Base Class Library Support Class Loader
System.Web System.WinForms Design ComponentModel Services UI Description HtmlControls Discovery WebControls Protocols System.Drawing Caching Security Drawing2D Printing Configuration SessionState Imaging Text System.Data System.Xml ADO SQL XSLT Serialization Design SQLTypes XPath System Collections IO Security Runtime InteropServices Configuration Net ServiceProcess Remoting Diagnostics Reflection Text Serialization Globalization Resources Threading .NET Framework
Code IL Static void WriteLine(string) Espace d’adressage Instructions natives du processus Allocation mémoire MOV AX , BX … Compilation du code IL Console JIT Compilation
Code Natif Static void WriteLine(string) Espace d’adressage MOV AX , BX … Console
DEVELOPMENT DEVELOPMENT public static void Main(String[] args ) { String usr; FileStream f; StreamWriter w; try { usr=Environment.GetEnvironmentVariable("USERNAME"); f=new FileStream(“C:\\test.txt",FileMode.Create); w=new StreamWriter(f); w.WriteLine(usr); w.Close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); } } GlobalAssemblyCache (GAC) public static void Main(String[] args ) { String usr; FileStream f; StreamWriter w; try { usr=Environment.GetEnvironmentVariable("USERNAME"); f=new FileStream(“C:\\test.txt",FileMode.Create); w=new StreamWriter(f); w.WriteLine(usr); w.Close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); } } Compiler Assembly Assembly Source code MC++ C# J# VB Cobol … MSIL Metadata Resources ApplicationDirectory Download Cache Install Déploiement DEPLOYMENT Setup Copy Browser
DEVELOPMENT Assemblyon Target Machine GlobalAssemblyCache (GAC) Assembly Setup Copy Browser ApplicationDirectory Class Loader Security Assembly Loader IL to NativeCompiler Download Cache Garbage Collection Code Manager Exception Manager Native .exe + GC table Thread Support COM Interop Install Debug Engine Exécution DEPLOYMENT Policy <?xml version="1.0" encoding="utf-8" ?> <configuration> <mscorlib> <security> <policy> <PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="Nothing" Name="All_Code" Description="Code group grants no permissions and forms the root of the code group tree."> <IMembershipCondition class="AllMembershipCondition" version="1"/> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust" EXECUTION
Démos • Code MSIL • Rotor et le fonctionnement du VES • Disponible sur le site MSDN • http://msdn.microsoft.com/msdnmag/issues/02/07/SharedSourceCLI/
VS2003:Extension Managed C++ • Extension managée pour le C++ • /CLR : émettre de l’IL plutôt que du binaire • 15 nouveaux mot clés • Va nous permettre de réutiliser du code CPP existant… • Unique sur la plate forme .NET !
Classes managées • Classes et Interfaces • __gc • __nogc (par défaut) • __interface • Remplace les classes virtuelles abstraites pures • Gestion des Propriétés • __property • get_XXX et set_XXX