Site: | Cours VB.net |
D 1.1 | Comprendre le FrameWork; compilation, code IL, binaire. |
Comment fonctionne un programme VB.NET ?
Le Framework.NET
Jusqu'à VB6, un programme VB avait besoin d'un RunTime (Fichier Dll: VBRUN300.DLL par exemple pour VB3)
En VB.net, pour qu'un programme fonctionne, il faut installer le Framework.NET:
C'est une plate-forme informatique, une couche entre Windows et l'application VB.
'Framework' veut dire: bibliothèque de classes.
Le Framework.Net est donc la bibliothèque de classes .NET et contient ADO.NET, ASP.NET et Windows Forms.
Cette infrastructure offre un vaste accès à :
ceci de manière homogène et très fiable.
Système d'exploitation:Windows |
Framework:CLR et Classes |
Visual Basic |
L'exécutable en Visual Basic
A la limite on peut considéré le Framework comme une machine virtuelle (comme celle de Java). Il suffirait de porter le FrameWork sous Linux pour que les programmes VB fonctionnent. (Info? Intox?, il existe bien le projet 'Mono' sous Linux, mais il ne contient pas les Windows Forms)
Inconvénients?
La couche supplémentaire ralentit le programme?
A peine dit Microsoft, cela serait insignifiant! En fait cela ralentit beaucoup. Le Framework, quand il ouvre un formulaire appelle les routines de Windows, c'est bien une couche supplémentaire.
Et s'il y a une nouvelle version du Framework?
Les versions successives devront être compatible ascendante et descendante!!
En fait, on peut installer le Framework 1 et le Framework 2
Intérêts?
On installe une seule fois le Framework.
Une fois le Framework installé, il suffit pour installer un nouveau programme de n'installer que l'exécutable.
On peut utiliser plusieurs langages.
Nous appelons les fonctions du FrameWork avec Visual Basic mais on peut aussi le faire avec C# et 30 autres langages. La vitesse d'exécution sera la même, les types de variables, les objets seront les mêmes. Plus de problèmes de transfert de paramètres.
Il est même possible de faire cohabiter plusieurs langages dans une même application.
Le code est homogène.
Plus de bidouille, de ficelle de programmation pour contourner les lacunes du langage et l'accès limité au système d'exploitation: Les milliers de Classes du FrameWork donne accès à une multitude de fonctions et aux services du système d'exploitation, cela nativement.
Revoyons en détails le contenu du Framework:
Le CLS (Common Language Spécification) représente la partie visible , interface entre les langages VB, C++, C#, J# et le Framework.
Il contient deux composants principaux :
Il permet:
Exécution du code managé.
Gestion de la mémoire (Garbage collector)
Utilisation des objets du FrameWork
Le runtime peut être considéré comme un agent qui manage le code au moment de l'exécution, qui l'exécute, fournit des services essentiels comme la gestion de la mémoire, la gestion des threads, et l'accès distant.
C'est une collection complète orientée objet, que vous pouvez utiliser pour développer des applications allant des traditionnelles applications à ligne de commande ou à interface graphique utilisateur (GUI, Graphical User Interface) jusqu'à des applications qui exploitent les dernières innovations fournies par ASP.NET, comme les services Web XML et Web Forms.
Par exemple, les classes Windows Forms sont un ensemble complet de types réutilisables qui simplifient grandement le développement Windows. Si vous écrivez une application Web Form ASP.NET, vous pouvez utiliser les classes Web Forms.
Il existe un éventail de tâches courantes de programmation y compris des tâches comme la gestion de chaînes, la collection de données, la connectivité de bases de données, et l'accès aux fichiers.
Il y a 3300 Classes dans le Framework 1!!
Plus d'appel aux Api Windows, on fait tout directement en utilisant les classes du Framework.
Framework 1, 2, 3.
Un Framework est donc un ensemble de Classes.
Le Framework 1.0 est utilisé par VB 2003, c'est le premier.
Le Framework 2.0 est utilisé par VB 2005
Il contient des classes supplémentaires.
Le Framework 3.0 peut être utilisé par VB 2005
Le framework 3.0 est composé du framework 2.0 auquel s'ajoute WCF (Windows Communication Foundation), WF (Windows Workflow Foundation), WPF (Windows Presentation Foundation) et infocard pour l'authentification des utilisateurs.
Windows Presentation foundation permet de gérer l' affichage des fenêtres. Celui-ci est basé sur direct x (version 10).
Le Framework 3.5 utilisé par VB2008.
C'est le Framework 3 auquel s'ajoute AJAX, LINQ et REST.
Sous Windows 98, XP, il faut installer le Framework (avant d'utiliser l'environnement VisualBasic ou un exécutable VB)
Sous Windows Vista le Framework 3 fait partie de Vista et est installé nativement.
VB 2003 utilise le Framework 1.0.
VB 2005 utilise le Framework 2.0.
VB 2008 permet de choisir et d'utiliser le Framework 1.0, 2.0, 3.0, 3.5.
Voici le Framework 3.5 , pour le voir en détails Microsoft le fournit en PDF.
Code managé:
Le code écrit pour le FrameWork est dit managé (ou géré): il bénéficie des avantages du Framework: gestion de la mémoire, optimisation de cette mémoire, règles communes, utilisation de plusieurs langages..
Les anciens composants COM sont utilisables mais non managés.
L'interopérabilité entre les codes managés et non managés permet aux développeurs de continuer à utiliser des composants COM et des DLL nécessaires.
Garbage Collector:
La destruction effective des objets et variables est effectuée par le 'garbage collector' (ou ramasse-miettes).
Avant .NET quand on détruisait une variable, en lui affectant Nothing, la destruction était immédiate (déterministe); si on oubliait (une application) de détruire une variable de multiple fois il y avait problème!!
Maintenant, quand on détruit une variable, elle reste présente en mémoire; c'est le garbage collector qui, quand il a le temps ou quand il n'y a plus de place, détruit la variable et fait le ménage. On ne sait pas quand il va le faire ( non déterministe).
Compilation:
Le code que vous écrivez en Visual Basic est le code source.
Lors de la génération (compilation) du projet, un code intermédiaire est produit (IL: Intermédiaire Langage), ce code est commun à tous les langages.
Lors de la première exécution d'exécutable (.exe), le code IL est compilé en binaire par le compilateur 'Just in Time' puis exécuté. Les exécutions suivantes seront plus rapides.
En résumé:
Code Source (VB, C#..) => Intermediate Language (IL). par le compilateur syntaxique.
IL => Binaire exécutable par le compilateur 'Just in Time'
Comment voir le code source ,le code IL, le code exécutable?
Prenons un exemple: il y a dans une form1 une procédure Button1_Click:
a-Voici le code source:
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickTextBox1.Text = "hello"
End Sub
on génère ce code source cela donne un fichier .exe (dans le répertoite /bin)
b-Voir le code Intermédiaire (IL):
Avec Ildasm.exe (désassembleur code IL) qui est dans le SDK:
(C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin)
On peut ouvrir un fichier exe (menu 'Fichier'):
Outre le MANIFEST qui contient les méta données de l'assembly, il y a le code IL de l'application.
Si on clique sur la ligne _Button1 , on voit le code IL correspondant à la routine: (un menu de ildasm.exe permet de voir le code source en même temps)
c- Voir le code binaire ( en assembleur)?
Dans l'IDE (Pas dans la version Express!!), si je stoppe le fonctionnement de la routine (par un point d'arrêt), le menu 'fenêtre', 'Code machine' permet de voir l exécutable mais sous forme d'assembleur.
Le véritable code binaire est composé d'instructions ayant chacune un code:
Voici du code exécutable représenté en hexadécimal: 55 8b ec
Comme c'est totalement illisible, on affiche le code binaire sous une autre forme, en langage d'assemblage ou les instructions sont représentées par des mots mnémoniques: push (pour utiliser la pile), mov (pour déplacer un octet en mémoire..), le code est plus lisible.
Voici le code en assembleur de notre routine:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
00000000 push ebp
00000001 mov ebp,esp
00000003 sub esp,8
00000006 push edi
00000007 push esi
00000008 mov dword ptr [ebp-8],edx
0000000b mov esi,ecx
0000000d nop
TextBox1.Text = "hello"
0000000e mov ecx,esi
00000010 mov eax,dword ptr [ecx]
00000012 call dword ptr [eax+000005B8h]
00000018 mov edi,eax
0000001a mov edx,dword ptr ds:[020B1648h]
00000020 mov ecx,edi
00000022 mov eax,dword ptr [ecx]
00000024 call dword ptr [eax+000000E8h]
0000002a nop
End Sub
0000002b nop
0000002c pop esi
0000002d pop edi
0000002e mov esp,ebp
00000030 pop ebp
00000031 ret 4
On note que pour information et amélioration de la lisibilité, le code source est ajouté.
d-Voir le véritable code binaire:
(Pas dans la version Express!!)
Si je fais menu 'Déboguer', 'Fenêtre', 'Mémoire', j'ai un dump de la mémoire en hexadécimal qui montre le véritable code binaire.
Installation du Framework:
Les applications et contrôles écrits pour le .NET Framework imposent que celui-ci soit installé sur l'ordinateur où ils s'exécutent. Microsoft fournit un programme d'installation redistribuable, Dotnetfx.exe , qui contient les composants Common Language Runtime et .NET Framework nécessaire à l'exécution des applications .NET Framework.
Pour installer le FrameWork, il faut au moins:
Ou le trouver:
Dans le MSDN Download Center sur Internet:
(Bien choisir la version française car on ne peut pas installer plusieurs versions de langue différente)
Pour développer il faut ensuite installer Visual Studio.Net.
L'utilisateur final de l'exécutable installera le FrameWork (une seule fois pour tous les programmes) et l'exécutable (grâce à l'installateur).
Ou est le Framework?
dans:
c:\Windows\Microsoft.NET\Framework\v1.1 4322\
On voit les DLL qui composent le Framework: System.dll, System.Drawing.dll..
La version 1.1 fait 73 Mo sur le disque
On peut installer à coté la version 1.0; Pourquoi installer les 2 si il y a compatibilité ascendante? c'est une question!!
Nouvelles versions:
VisualStudio 2005 utilise le Framework 2.0, bien sur il y a un SDK 2.0
VisualStudio 2008 utilise le Framework 2.0, 3.0, 3.5.