• Aucun résultat trouvé

Langages fonctionnels, typage et interopérabilité : Objective Caml sur .NET

N/A
N/A
Protected

Academic year: 2021

Partager "Langages fonctionnels, typage et interopérabilité : Objective Caml sur .NET"

Copied!
269
0
0

Texte intégral

(1)

HAL Id: tel-00154790

https://tel.archives-ouvertes.fr/tel-00154790

Submitted on 14 Jun 2007

HAL is a multi-disciplinary open access

archive for the deposit and dissemination of

sci-entific research documents, whether they are

pub-lished or not. The documents may come from

teaching and research institutions in France or

abroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, est

destinée au dépôt et à la diffusion de documents

scientifiques de niveau recherche, publiés ou non,

émanant des établissements d’enseignement et de

recherche français ou étrangers, des laboratoires

publics ou privés.

Langages fonctionnels, typage et interopérabilité :

Objective Caml sur .NET

Raphaël Montelatici

To cite this version:

Raphaël Montelatici. Langages fonctionnels, typage et interopérabilité : Objective Caml sur .NET.

Génie logiciel [cs.SE]. Université Paris-Diderot - Paris VII, 2007. Français. �tel-00154790�

(2)

Année 2006 - 2007

Thèse

pour l'obtention du diplmede

Do teurde l'Université Paris 7,spé ialité informatique

Langages Fon tionnels, Typage et

Interopérabilité: Obje tive Caml sur .NET

Raphaël Montelati i

Présentée etsoutenue publiquement le

15Mars 2007

Dire teur de Thèse

EmmanuelChailloux

Jury

M. EmmanuelChailloux dire teur de thèse

M. Guy Cousineau président

M. Jean-Mar Eber examinateur

M. Mi hel Mauny rapporteur

M. Bruno Pagano examinateur

(3)
(4)

Résumé

La plate-forme .NET est un environnement d'exé ution moderne et répandu,

reposant sur une ma hine virtuelle qui interprète du ode-o tet typé. Elle prétend

êtreparfaitementadaptéeàl'exé utionde omposantsé ritsdansunegrandevariété

de langagesde programmationetfa iliterleur interopération.

En tant que langage fon tionnel statiquement typé ave polymorphisme

para-métrique, Obje tive Caml présente des ara téristiques qui déent l'environnement

d'exé ution .NET etson système de types. Nous expérimentons es di ultés dans

un adre pratique, par la on eption et l'implantation de OCamIL, un ompilateur

ompletpour Obje tiveCaml quiproduit du ode-o tet.NET vériable.Ses

obje -tifs prin ipauxsont la ompatibilitéet lapossibilitéd'interopérer.

Ce travailmetàl'épreuveles apa itésde laplate-forme.NET autant que

l'adé-quationde l'implantationo iellede Obje tiveCamldans untelprojet( elle- iest

onçue pour un environnement d'exé ution dénué de types e qui explique qu'elle

élimine les informations de types assez tt dans la haîne de ompilation). Nous

examinons la représentation des valeurs Caml et omparons deux stratégies: la

re- onstru tionetlapropagationdel'informationdetypagemanquante.D'autres hoix

de on eption dé rits i iillustrent le ompromis entre e a ité d'une part et

lisibi-lité/interopérabilitéde l'autre.

Nous réalisons l'interopérabilité à l'aide d'un langage de des ription d'interfa e

IDL qui onstruit un pont entre les deux systèmes de lasses distin ts utilisés par

Obje tiveCaml et l'environnement typé de .NET. Lesbéné es de l'interopération

sontillustrés par des exemplesnon-triviaux.

Au hapitre des performan es, OCamIL o upe une pla e respe table au sein

des ompilateursde langagesfon tionnels sur .NET. Nous omparons égalementles

exé utables .NET ave les programmesObje tive Caml originaux.

Abstra t

The .NET platform isa modern,widespread exe utionenvironment,based ona

virtual ma hine that interprets a typed byte ode. It laims to be perfe tly suitable

for running omponents written in many dierent programming languages and to

allowa seamlessinteroperationbetween them.

Beingastati allytyped fun tionallanguagewithparametri polymorphism,

Ob-je tiveCamlhasfeaturesthatarequite hallengingtothe.NETruntimeanditstype

system. We test the t in a pra ti al setting by designing and implementing

OCa-mIL,afull-edged ompilerforObje tiveCamlprodu ingveriable.NETbyte ode.

It primarilyaims at ompatibilityand interoperability.

This work questions the apabilities of the .NET platform as mu h as the

ade-qua y of the o ial Obje tive Caml implementation (whi h is designed for an

un-typed runtime and dis ards type information early in the ompilation hain). We

(5)

illustrate the trade-o between e ien y and readability/interoperability.

We a hieveinteroperability by meansof anInterfa e Des riptionLanguage that

loses thegap between thetwodistin t lass systemsofObje tiveCamland .NET's

underlyingtype system.Wegivenon-trivialexamples showing the benets of

inter-operability.

Asfor performan e, OCamIL proves ompetitivewith other .NET ompilersfor

fun tionallanguages.Wealso ompare.NETexe utableswiththeoriginalObje tive

(6)

Tout d'abord,un grand mer iàEmmanuelChailloux,pour laqualitéde son

en- adrement et sa grande disponibilité malgré ses nombreux engagements. Je luisuis

re onnaissant de m'avoir sorti des gries de la sémantique des jeux et des réseaux

de preuves polarisés en meproposantun sujetbien diérent mais tout aussi ri he.

Mer i à Mi hel Mauny et Christian Queinne pour avoir a epté d'être les

rap-porteursde ette thèse.Ilest indéniable queleursquestions etleurssuggestions ont

permis d'améliorer grandement laqualité du manus rit nal.

Je remer ie Guy Cousineau, Jean-Mar Eber, Mi hel Mauny, Bruno Pagano et

Christian Queinne de m'avoirfait l'honneur d'a epter de faire partie du jury.

Cettethèse doitbeau oup àBrunoPaganopour m'avoiren ouragéà poursuivre

sesre her hes(sansluiOCamILn'existeraitsansdoutepas) etGrégoireHenrypour

sa ollaboration(sans lui OJa aré.NET n'existeraitsans doute pas).

Je salue lesmembres de l'équipe PPS qui tout en perpétuant un niveau

d'ex el-len ea adémiqueextraordinaireonttoujoursprisletempsdepartagerleurs

onnais-san es etde ommuniquerleur intérêt pour la re her he. Mes pensées vont

parti u-lièrementauxthésards de PPS:j'ai otoyéplusieurs générationsd'entre euxave le

mêmebonheur. Jen'oubliepas Odile Ainardipour sasympathieindéfe tible etson

talent à surmonter les dés administratifs. Mi hèle Wasse a elle aussi joué un rle

essentiel dans es démar hes.

Mon entière gratitude va à mes amis et ma famille, pour leur patien e et leur

(7)
(8)

Table des matières Introdu tion 9 1 Préliminaires 13 1.1 Plate-forme .NET . . . 14 1.1.1 Contexte etprésentation . . . 14 1.1.2 Implantations . . . 17

1.1.3 Système de typesCTS et Méta-données. . . 19

1.1.4 Environnement d'exé ution . . . 26

1.1.5 Utilisationde laplate-formepourla ompilationd'unlangage fon tionnel. . . 34

1.2 Obje tive Caml: langageet ompilateur . . . 36

1.2.1 Lestypes etles valeurs Obje tive Caml . . . 36

1.2.2 Ar hite ture du ompilateurCaml. . . 40

1.3 Présentation du projet OCamIL . . . 42

1.3.1 Dénitiondu projet. . . 42

1.3.2 Ar hite ture du ompilateurOCamIL . . . 46

2 Environnement d'exé ution et typage 53 2.1 Compilation du langage Obje tive Caml . . . 54

2.1.1 Environnement d'exé ution et représentations Obje tive Caml 54 2.1.2 Questions de typage . . . 66

2.2 Annotation par lestypes . . . 72

2.2.1 Un adre ommun . . . 72

2.2.2 Synthèse de la représentation annotée . . . 77

2.2.3 Alternative: propagationdes types . . . 86

2.2.4 Gestiondes dénitions etdes référen es de types nommés. . . 102

3 Représentations des données et émission de ode 105 3.1 Choix de représentations . . . 106

3.1.1 Représentation élémentaire des valeurs Caml (re onstru tion de types). . . 106

3.1.2 Représentation ne des valeurs Caml (propagationde types) . 110 3.1.3 Appli ationetstru tures de ontrle . . . 116

3.1.4 Modules et fon teurs . . . 126

(9)

3.2.2 Émission de ode etédition de liens . . . 143

4 Interopérabilité et OJa aré.NET 149 4.1 Obje tive Camlet l'interopérabilité . . . 150

4.1.1 Les langagesd'interfa e . . . 150

4.1.2 Quelques implantations pour Obje tive Caml . . . 154

4.2 La plate-formeOCamIL /OJa aré.NET . . . 157

4.2.1 Présentation de OJa aré.NET . . . 157

4.2.2 Implantation . . . 165

4.2.3 Expressivité et portée. . . 178

4.2.4 Travaux onnexes . . . 183

5 Appli ations et outils 187 5.1 É rire des omposants OCamIL . . . 188

5.1.1 Interfaçagede omposants OCamIL . . . 188

5.1.2 Constru tion d'appliquettes . . . 197

5.2 Appli ations liées au ompilateurOCamIL . . . 200

5.2.1 Bootstrapet toplevel . . . 200

5.2.2 Utilisation de OJa aré.NET ausein du ompilateur . . . 208

5.3 Sérialisation sûre . . . 218

5.3.1 Cara téristiques de la sérialisationsous .NET . . . 218

5.3.2 Appli ationà Obje tiveCaml . . . 219

6 Tests de performan e 225 6.1 Choix guidés par les performan es de la plate-forme . . . 226

6.1.1 Méthodologie . . . 226

6.1.2 Stru tures de données . . . 226

6.1.3 Stru tures de ontrle . . . 229

6.2 Performan es du ompilateur OCamIL . . . 233

6.2.1 Méthodologie . . . 233

6.2.2 Les diérents réglageset leurs réper ussions . . . 234

6.2.3 OCamIL fa e auxautres ompilateurs . . . 239

Con lusion 245

Appendi es 251

Le ode-o tet CIL 251

Les primitives de Obje tive Caml 257

(10)

Introdu tion

Interprétation 1

et ompilation

2

fournissentdeuxmodèlesemblématiquesde

l'exé- utionde programmesinformatiques,sanspourautantqueleslangagesde

program-mationformentun univers mani héen partagéentre es deux types d'implantation.

Il faut se garder de onfondre les langages et leurs implantations, puisqu'un même

langagepeut avoirplusieurs réalisations, mais il fautégalement prendre garde à ne

pas opposer interprétation et ompilation, dans une réalité bien plus omplexe:

 les mêmeslangages peuvent fairel'objet d'interprétation(qui a l'avantage de

laportabilitéetde lasimpli itéde la miseen ÷uvre) etde ompilation (quia

l'avantage de larapiditéd'exé ution);

 lesmodèlesd'exé utiondes langagesde programmationmélangentsouventles

deux traits, et e depuis lesdébuts de l'industrie logi ielle.

Lesma hinesvirtuellesdénissent unear hite tured'exé ution baséesur

l'inter-prétation d'un pseudo- ode (ou ode-o tet) ne orrespondant, en général, à au un

équipement matériel on ret. Le pseudo- ode est produit par une phase de

om-pilation à partir d'un langage de plus haut niveau destiné au programmeur. Ce

fon tionnement permetun ompromis entre e a ité (l'interprétationa lieusur un

jeu d'instru tionssimple etde plus bas niveau que le langagesour e) etportabilité

(le langage ompilé peut tourner sur toute plate-forme munie d'une implantation

de la ma hine virtuelle). De plus la ompilation JIT (Just In Time, égalemement

appelée  expansion de ode ) peut se substituer à l'interprétation, donnant un

modèle de livraison de ode de la forme:

ompilation de ode indépendant de la plate-forme

distribution

ompilation sur laplate-forme hte

Cela illustre l'intérêt pragmatique pour une utilisation ombinée d'interprétation

et de ompilation. D'autre part les plates-formes modernes munies de ma hines

virtuelles permettent une administration poussée de l'exé ution du ode et de la

1.Un interpréteur prend en entrée un programme d'un langage donné et exé ute les a tions

é ritesdans e langagesurunema hine.

2.Un ompilateur prend en entrée un programme d'un langage donné et le traduit dans un

autre langage (le programme n'est pas exé uté). Le ode produit peut à son tour être pris en

(11)

mémoire: elles gèrent des pro essus légers (threads), permettent le hargement

dy-namique de ode, orentdes servi es de sé urité, une interfa e ave le système, des

outils de mise au point au niveau de la ma hine virtuelle et sont souvent munies

d'un ré upérateurautomatique de mémoire.

L'utilisationde ma hines virtuelles est devenue très populaire ave les langages

JavaetC#(plusré emment)quisontapparus ave leursma hinesvirtuelles

respe -tives,laJVMetleCLR.Cependantilnefautpasperdredevuequelesma hines

vir-tuellesexistentdepuisdenombreusesannéespourtoutessortesdelangages.Lesplus

onnus dans les années 60 et 70 furent sans doute les langages SmallTalk, ompilé

dès sespremières versionsvers unema hinevirtuelle(quitl'objetde spé i ations

ave laversion SmallTalk-80),BCPL, ompilévers du O- ode  etUCSD Pas al,

ompilé vers du  P- ode . Ils furent rejoints dans les années 80 par Prolog (ave

lama hine virtuelleWAM) etd'autres langagesfon tionnels. On peut iterlaFAM

(Fun tional Abstra t Ma hine), dénie par Lu a Cardelli [16℄ et utilisée alors pour

la ompilation de ML, l'implantation CLISP de Common Lisp, LLM3 [23℄ onçue

pour Le Lisp [24℄ (voir aussi [68℄ au sujet de Lisp) et la première implantation de

Caml, la CAM (Categori al Abstra t Ma hine) [28℄ puis la ZINC [52℄ utiliséespour

Caml, Hugs pour Haskell...

L'ensembledes modèlesdeprogrammationest bien ouvert parlesma hines

vir-tuelles: impératif (P- ode), fon tionnel(LLM3, FAM, CAM...), objet (SmallTalk,

JVM, CLR) et logique (WAM). On pourra onsulter [44℄ pour une omparaison de

diérents types de ma hines virtuelles. Comme 'est le as pour Obje tive Caml,

les implantations de langages utilisant une ma hine virtuelle peuvent fournir une

alternativeà base de ode natif.

Les eorts de perfe tionnement des ma hines virtuelles pour les rendre plus

ef- a es ont onstitué un hamp de re her he prolique mais risquent de laisser de

té une perspe tive intéressante de es ma hines: mettre en pla e un

environne-mentd'exé ution ommunàplusieurslangagesquioreun ontexted'interopération

simpleetri he. Lesma hinesvirtuellessontsouventdédiéesàun seullangage; 'est

initialement le as de la JVM, ensuite l'étendue de sa distribution a donné l'idée

de l'utiliser omme iblede ompilateurs d'autres langagesqueJava.La on eption

du CLR(la ma hine .NET) a tenu ompte d'emblée de ette possibilité, proposant

ette plate-forme pour les langages C#, Visual Basi .Net et C++ ave extensions

gérées (puis J#, un diale tede Java, peu de tempsaprès).

L'interopérationinter-langagesajouteun degréde libertéà la on eption

modu-laire de logi iel:un projet peutêtre implantéaumoyen de langagesdiérents,pour

répartir lestâ hes entre niveaux d'abstra tion diérents (un dé oupage ourantest

de oner l'ar hite ture du projet à un langage de haut niveau alors que les

seg-mentsoptimisésou hargés d'appelsàdesAPI systèmessonté ritsdans un langage

de plus bas niveau) ouentre domaines où haque langageex elle (par exemple une

même appli ation peut utiliser d'un té C# pour son interfa e graphique et ses

(12)

qui luifont défaut, mais qui par ailleurs existent dans un autre langage.

L'intérêtde l'interopérationinter-langagessur uneplate-formed'exé ution gérée

est a ru par les garanties de sûreté qu'elle peut orir ( ar l'interopération entre

deux langages sûrs n'est pas elle-mêmeautomatiquementsûre).

Le travailde ette thèse vise à expérimenter l'adéquation entre:

 une ma hine virtuelle ré ente, répandue et orant des perspe tives

intéres-santes en termesd'interopérabilité,

 un langagefon tionnelpossédant unelarge palettede onstru tionsetun

sys-tème de typesri he.

Au niveau de la ma hine virtuelle, notre hoix s'est porté sur la plate-forme

.NET: laplus ré ente, ses apa ités pro laméesd'adaptabilitéàdes langagesvariés

méritent d'être mises à l'épreuve. Du té du langage nous avons hoisi Obje tive

Caml: il mêle des paradigmes fon tionnel, impératif et objet ( e dernier étant très

diérent des modèles de lasses des langages Java/C#) et possède un langage de

modules évolué. De plus dans une perspe tive de ompilation la diéren e entre le

système de types entièrement statiques de Camlet elui de laplate-forme ible, qui

maintientlestypesàl'exé ution, noussembleri he d'enseignements.Laplate-forme

.NET et lelangage Obje tive Caml sont dé ritsdans le hapitre 1.

Notre expérimentation a onsisté à mettre au point un ompilateur .NET

om-pletpourlelangageCaml,baptiséOCamIL,etdeproterde edéveloppementpour

évaluer à la fois la plate-forme .NET et l'implantationde référen e du ompilateur

Caml dans e ontexte parti ulier, la dis ussion ayant pour objets prin ipaux la

onfrontation des systèmes de types et les possibilités oertes par l'environnement

.NET aux ompilateurs de langages fon tionnels statiquement typés ave

polymor-phismeparamétrique.

Un volet important de notre travail a onsistéà développer et évaluer un adre

permettant l'interopération de omposants logi iels é rits en Obje tive Caml ave

d'autres omposants onçus dans n'importe quel langage disponible sur la

plate-forme(même si C# fait gure de langage de référen e, son système de types étant

leplus pro he de elui qui est intégré àla plate-forme).

Le premier hapitre de e mémoire pose les prin ipes du ompilateur OCamIL

après avoir introduit les prin ipales ara téristiques de la plate-forme .NET et du

langageCaml. Le hapitre2 dé riten détailsla ompilationd'un programme Caml

parle ompilateurde référen e(langages intermédiaires,représentation des valeurs)

et examine le problème de la ompilation vers le CLR sous l'angle du typage et de

l'informationde types,prin ipale di ultéren ontrée danslefront-end du

ompila-teur. Le hapitre 3 est onsa ré au ba k-end du ompilateurOCamIL: il dis ute la

représentation des valeurs Caml dans l'environnement .NET et l'émission de ode.

Le hapitre 4faitun tour d'horizon des solutionsdisponiblespour Caml en matière

d'interopérabilité etdé rit la solution mise en ÷uvre dans le adre du projet

(13)

Enn le hapitre 6 est onsa ré à des tests de performan es, ompare diérentes

appro hes possibles au sein du ompilateur OCamIL et le situe par rapport aux

ompilateursstandard de l'INRIAainsi qued'autres ompilateursde langagesde la

(14)

Chapitre 1

Préliminaires

Ce hapitreintroduitleprojetOCamILmaisdé ritavant ela equisertdetoile

de fond à e travail:la plate-forme.NET et lelangage Obje tiveCaml.

Sommaire 1.1 Plate-forme .NET . . . 14 1.1.1 Contexteetprésentation . . . 14 1.1.1.1 Obje tifs . . . 14 1.1.1.2 Ar hite ture . . . 15 1.1.2 Implantations . . . 17 1.1.2.1 Plates-formes . . . 17 1.1.2.2 Langages . . . 18

1.1.3 Systèmede typesCTS etMéta-données . . . 19

1.1.3.1 Le systèmede typesCTS . . . 19

1.1.3.2 Interopération etCLS . . . 23

1.1.3.3 Assemblages etMéta-données . . . 24

1.1.4 Environnement d'exé ution . . . 26

1.1.4.1 La ma hine virtuelleet le ode-o tetCIL . . . . 26

1.1.4.2 Chargement etexé ution . . . 30

1.1.4.3 Questionsde sûreté . . . 32

1.1.5 Utilisationdelaplate-formepour la ompilation d'un lan-gagefon tionnel . . . 34

1.1.5.1 Apports delaplate-forme . . . 34

1.1.5.2 La unes de laplate-forme . . . 34

1.1.5.3 Cara téristiques utiles audéveloppement . . . . 35

1.2 Obje tive Caml: langage et ompilateur . . . 36

1.2.1 LestypesetlesvaleursObje tive Caml . . . 36

1.2.1.1 Dénitionsde types . . . 36

1.2.1.2 Expressions de types. . . 38

1.2.1.3 Valeursetopérations . . . 39

1.2.2 Ar hite ture du ompilateur Caml . . . 40

1.3 Présentation du projet OCamIL. . . 42

(15)

1.3.1.2 Extensionsde laplate-forme.NET . . . 44

1.3.1.3 Le projetOCamIL etses obje tifs . . . 45

1.3.2 Ar hite ture du ompilateurOCamIL . . . 46

1.3.2.1 Dispositifde ompilationvers .NET . . . 47

1.3.2.2 Stru turation du ompilateur . . . 48

1.1 Plate-forme .NET

D'abord onnue sous lenom de Proje t 42,puis de COR,Lightning, COM+2.0,

etNGWS(NextGenerationWebServi es),laplate-forme.NET analementretenu

son appellationdénitivequelques semainesavant son lan ement au ours de PDC

2000 (Professional Developers Conferen e) àOrlando.

Maisquese a he exa tementderrière ettedénominationtrèsmarketing? Nous

reprenons dans les grandes lignes l'ex ellente présentation de la plate-forme .NET

donnée dans [85℄.

1.1.1 Contexte et présentation

Au ours des dernières années l'a ronyme .NET estampille toute la ligne des

produits Mi rosoft. La gamme.NET sedé line dans lesdomaines suivants:

 le développement logi iel (langages de programmation, outils de

développe-ment,plate-forme d'exé ution),

 des te hnologies de servi e, pour leparti ulier oules entreprises,

 la promotion de servi es Web ommer iaux,

 lagénéralisationdeséquipementsinformatiquesdanslaviequotidienne( artes,

téléphones mobiles et ...)

La présente thèse s'intéresse spé iquement au premier des domaines ités

i-dessus, eluides langagesde programmation,arti ulédansle adre de.NET autour

de saplate-formed'exé ution.

1.1.1.1 Obje tifs

L'environnement .NET est manifestementissu des réexions menéespar

Mi ro-soft pour améliorer sate hnologie COM (Component Obje t Model), voir la

do u-mentation COM en ligne [25℄.

Il s'agit toujours de fournir un moyen d'intégrer des omposants logi iels,é rits

dans des langagespotentiellementdiérents.Toutaulong de emanus rit,leterme

omposant désignera une unité déploiementd'une appli ation, sous formebinaire

1 .

Laplate-forme .NET propose une nouvelle ar hite ture her hant à ombler les

diérentes la unes de COM, analysées selon les ritères suivants:

(16)

Intégration. L'ar hite tureCOMasoulevélesproblèmessuivantsenmatière

d'in-tégration:

 Chaque omposant doitseplier auxexigen esdu modèle COM, en parti ulier

l'obligationd'é riredu odedeplomberiené essaireàl'interopération.Bien

querépétitif,ildoitêtreexpli itementajoutéau odequirelèvespé iquement

du omposant.

 D'autre part les possibilités d'intera tion sont limitées à des appels de

mé-thodes. Il n'est pas possible de pousser plus loin l'intégration de langage en

étendantune lasse d'un omposantà un autre par exemple.

Lasolutionretenue par .NET est radi ale:elleimpose aux omposantsde partager

un environnement d'exé ution ommun, et de manipuler un système de type

om-mun. Cela entraîne naturellement ladisparition du fastidieux ode de plomberie et

des onventions asso iées.

Déploiement. En matièrede déploiement,le système de bibliothèques partagées

dessystèmesWindows (lesDLL:dynami -link libraries)a ausébiendes sou isaux

développeurs et auxutilisateurs. Les onitsentre DLL et lesproblèmes

d'installa-tion onstitue un problèmeré urrent onnusous lenomd'enfer des DLL (DLL Hell

en anglais).

La plate-forme .NET propose un système entralisé pour gérer l'installation et

larésolution des dépendan es auxbibliothèques. Pour une présentation détailléede

lasolutionproposée par .NET à es problèmes onpourra onsulter [65℄en lignesur

MSDN.

Sûreté et sé urité.

 En e qui on erne la sûreté du ode, l'environnement .NET ne pouvait faire

autrement qued'intégrer un ertain nombre de mé anismes omme letypage,

unsystèmed'ex eptions(rupturesde ontrle)etlaré upérationautomatique

de mémoire par un garbage olle tor (GC, glaneur de ellules ou

ramasse-miettes). Ces avan ées, popularisées par le langage Java, sont bien plus

an- iennes mais leurs mérites sont désormais universellement re onnus et elles

sontprésentes dans tous les langagesmodernes.

 Du point de vue de la sé urité, omme par exemple la mise en pla e de

po-litiques d'autorisation d'exé ution de ode ou d'a ès aux ressour es, .NET

propose uneintégrationau ÷urmêmedesonimplantationetde seslangages.

La suite est onsa rée à une des ription détailléede l'environnement.NET. Les

diérents points i-dessus serontà nouveau abordés.

1.1.1.2 Ar hite ture

Ande mettrel'a entsurunemeilleureintégration,àlafoisausystèmeetentre

(17)

La gure 1.1 montre une vue simpliée des éléments onstituant la plate-forme

.NET.

Appli ations

Client Formulaires Servi es

lo al Web Web

Bibliothèques de Base

Common Language Runtime

Système de types Système deméta-données Système d'exé ution

Fig. 1.1 Plate-forme .NET

Le CLR (Common Language Runtime) est à la base de la plate-forme. Il est

formé de trois omposants prin ipaux:

 Un système de types, onçu pour être apable de représenter les types et les

opérations que peuvent ré lamer la plupart des langages de programmation

modernes, e ian d'orirlapossibilitéàdes langagesvariésd'êtreportés sur

laplate-forme.NET.Nousseronsamenésà ritiquer ettearmationau ours

de ette thèse.

 Unsystème deméta-données. Celles- isont in luesave lestypesdansle ode

ompiléetsont utiliséespartoutes sortesde programmes amenésàmanipuler

le ode.NET,y omprisl'environnementd'exé utionlui-même.Nousdé rivons

les méta-données dans la se tion1.1.3.

 Unsystèmed'exé utionquireposesurunema hinevirtuelleàpileetfait

tour-ner un ode-o tet portable.

LaBCL (Base Class Library) est un ensemblede bibliothèques de lasses misà

la dispositiondes exé utables .NET.

(18)

l'environ-typesprin ipaux de lients:

 des lientstournantlo alementsurunsystèmed'exploitationprenanten harge

l'ar hite ture .NET,

 des formulaires Web, utilisés pour des appli ations Web arti ulées sur un

ser-veur ASP.NET,

 des servi es Web, la te hnologie promue par Mi rosoft en matière d'appels

distants de pro édures.

1.1.2 Implantations

1.1.2.1 Plates-formes

La on eption de laplate-forme.NET rappelletrès fortement elle de Java.

Ce-pendant alors que Java est initialement prévu pour un seul langage, mais pouvant

tourner sur des systèmes diérents ( omme le lame le slogan de Java:  Compile

On e,RunEverywhere ), au ontraire.NET al'intentionde re ueillirde nombreux

langagestouten étantprin ipalementdéveloppée pour lesseuls systèmesWindows.

Toutefois, il a été prévu de favoriser des implantations alternatives, an

d'as-surer une meilleure diusion de la plate-forme. Le CLR et les fondements de la

bibliothèquede supportontfaitl'objet d'unestandardisation auprèsde l'organisme

ECMA [34℄. Ce standard a servide point de départau développement d'autres

im-plantations.NET.

On peut ompter à l'heure a tuelle quatre implantations prin ipales, dont deux de

Mi rosoft:

 la version o ielle de Mi rosoft, qui tourne sous Windows. Pour l'instant

té-lé hargeable librement, elle est sans doute amenée à devenir un omposant

à part entière du système d'exploitation Windows. Version la plus diusée

et protant des tous derniers développements, e sera notre implantation de

référen e.

 Rotor[81℄,uneimplantationopen-sour edeMi rosoftquitournesousWindows

etUnixBSD. Rotoraétédistribuépourdes motifsde re her he et

d'enseigne-ment. Le JIT et le GC de Rotor sont des versions allégées de l'implantation

ommer iale, e quientraîne de moins bonnes performan es.

 leprojet Mono[33℄de Ximian/Novellpour Linux, est Open Sour e. Ce projet

est très abouti auniveau de l'environnementd'exé ution mais ne propose pas

en ore une implantation omplète de la BCL. En parti ulier il n'a pas été

possible de se baser sur Mono lors du développement de OCamIL en raisons

de la unes initiales dans le domaine de l'API Ree tion et de la gestion des

assemblages signés.

 leprojet Portable.Net de DotGNU est sous li en eGPL. L'éventailde ses

ou-tilsdedéveloppementest assez omplet,maisson mé anismede JIT n'estpas

(19)

Il existe aussi des variantes de la plate-forme .NET pour des ar hite tures

spé- iales, omme le ompa t framework etles smart devi es extensions qui iblent des

appareilsmobiles.Cesenvironnementsauxressour es ontraintes né essitentun

en-vironnement d'exé ution allégé et des bibliothèques adaptées, ne fournissant pas

tous les servi es des versions de bureau.

1.1.2.2 Langages

Dès lelan ement de la plate-forme.NET, trois langagessont o iellement

sup-portés par Mi rosoft: C# (sans doute le langage le plus pro he des onstru tions

implantées au sein de la ma hine virtuelle), Visual Basi .Net et C++ ave

exten-sions gérées (au ÷ur duquel se trouvent dire tement implantés des mé anismes

d'interopération entre ode natif et ode-o tet). Ces trois langagesont rapidement

été rejointspar J#, un diale tede Java pour .NET.

Par ailleursla rme a en ouragé lesinitiatives d'adaptationd'autres langagesà

saplate-forme,par lebiaisdeses laboratoiresde re her he biensûr, (SML[5℄etF#

[83℄ sont développés à Mi rosoft Resear h à Cambridge) mais aussi par l'in itation

au développement par des entreprises ou des laboratoiresd'universités, qui ont été

suivis par des initiativesautonomes.

On peut trouver des ompilateurs pour des langages aussi variés que: Ada A#

[17℄,COBOL, Perl, Eiel[78℄, Python, Pas al, Prolog P# [26℄, Fortran,SmallTalk,

Oberon.

Du té des langages fon tionnels, en plus de F# et SML.NET déjà ités, on

trouve 2

:Lisp,S heme(enparti ulierleprojetBigloo[73℄),Haskell,Mondrian,

Mer- ury [57℄, Ruby, Nemerle [60℄.

Ces diérents projets ont béné ié de la publi ation par Mi rosoft de

spé i a-tions de la ma hine virtuelle (un standard ECMA [34℄) et de l'implantation open

sour e Rotor [81℄.

Le développement de nouveaux ompilateurs pour la ma hine .NET s'est

éga-lement enri hi de l'adaptation de projets portant sur la plate-forme Java, omme

Bigloopar exemple.

Onpourra onsulter unelistedes diérentslangagesportés sur.NET àl'adresse

suivante: http://www.dotnetpowered. o m/la ngua ges. aspx .

(20)

1.1.3 Système de types CTS et Méta-données

1.1.3.1 Le système de types CTS

L'environnementd'exé ution manipuledes données typées. Le système de types

de .NET est judi ieusement appelé CTS (Common Type System): tout langage

ompilédevra s'yplier, e quia pour onséquen es:

 De ontraindrelesimplantationsàfairerentrerlesvaleursspé iquesde haque

langagedanslemouleduCTS.Onespèredon que esystèmeestsusamment

ri he pour satisfairedes langagesvariés.

 De proposer un adre ommun, omprispar tous, e qui ouvre la porte à

l'in-teropérabilité.

Classes

définissables

Interfaces

(définissables)

Types valeur

définissables

Système CTS

Types valeur

Types référence

Types valeur

prédéfinis

(entiers, flottants...)

Classes

Tableaux

Classes prédéfinies :

object, string, Delegate

Types valeur

encapsulés

Fig. 1.2 Le système CTS dans les grandes lignes

Modèlede lasses ettypes référen es. LemodèleretenupourleCTSest elui

d'un système de lasses similaire à elui de Java. Les types référen es regroupent

les lasses, les interfa es et les tableaux. Les valeurs des types référen es peuvent

être nullousont allouéesdans letaset soumisesàla ré upérationautomatique de

mémoire.Ellessont passées par référen e.

Le modèleprésenteles ara téristiquessuivantes:

 Les lassessont organiséessur unehiérar hied'héritagesimple(pas d'héritage

multiple)ayantpour ra inela lasseSystem.Obje t (ave pouraliasobje t).

 Les lasses omportent des méthodes et des hamps. Ces membres peuvent

être statiques ( 'est-à-diredes membres de lasse) oud'instan e.

 Les lasses sont organisées en espa es de noms.

 On retrouve les attributs usuels on ernant la visibilité et l'a essibilité des

(21)

Les types référen e utilisateurs sont introduits par la dé laration de lasses ou

d'interfa esdansle odeCILengendréparla ompilationduprogrammesour e.Les

typessontorganisésaumoyend'espa esdenoms.EnC#parexemple,ladé laration

d'une lasse de la forme:

namespa e Graphi s {

lass Point {

publi int x;

publi int y;

publi int norm() {...}

...

}

}

introduituntyperéféren eutilisateurGraphi s.Point.Lesespa esdenomspeuvent

être imbriqués.

Outreles lasses,leCTSprenden hargelesinterfa es,lesex eptionsetlesdélégués:

 Lesinterfa essont similairesà elles de Java etsupportentl'héritage multiple

( ontrairementaux lasses).

 Lesex eptions sont égalementsemblablesà elles de Java. Cesont des lasses

qui héritent de System.Ex eption et qui servent de base au mé anisme de

rupture de ontrle pris en harge par l'environnement d'exé ution.

 Les délégués, qui héritent de System.Multi astDelegate, sont une version

type-safe des pointeursde fon tionsdu langageC. Ils sontutilisés pour

dé la-rer une lasse et don un type permettant l'en apsulation de méthodes ayant

unesignaturedonnée.Laméthodeen apsuléepeutêtrestatiqueoud'instan e,

et la lasse qui la dénit n'a pas besoin de onnaître l'existen e du type

dé-légué à l'avan e (alors que pour appeler dynamiquement des méthodes d'une

signature donnéepar lebiaisd'unpolymorphismed'interfa e

3

,ilfautdé larer

larelationd'implantationde l'interfa edans toutesles lassespouvant êtrela

ible d'un appel). Les délégués orent d'autres servi es: ils peuvent

mainte-nirune listedeméthodesàappeleretpermettentdes invo ationsasyn hrones.

Lesgures1.3et1.4permettentde omparerlesimplantationsdudesignpattern

 observateur  au moyen d'un déléguéou d'une interfa e. Dans lesdeux as,

l'im-plantation on rètede laméthodeappeléen'apasbesoind'être onnuedel'appelant

(i ila lasseSubje t). Cependantdansle as desinterfa es,l'implantation on rète

doitdé lareraprioriêtreundestinatairedel'appel( 'est-à-direimplanterl'interfa e

IObserver) alors qu'ave les délégués il sut d'exposer une méthode de la bonne

signature (la liaison se fait de manière externe, au moment de la onstru tion de

l'objetdélégué).

(22)

publi delegate void DObserver(string msg);

lass Subje t {

private DObserver notifyDelegate;

publi void registerObserver(DObserver n) {notifyDelegate = n;}

publi void notifyObserver() {

if (notifyDelegate != null) notifyDelegate("hello");

}

}

lass Con reteObserver {

publi void notify(string msg) { ... }

}

publi stati void Main() {

Con reteObserver o = new Con reteObserver();

Subje t s = new Subje t();

DObserver deleg = new DObserver(o.notify);

s.registerObserver(deleg);

...

}

Fig. 1.3 Design pattern  observateur  ave un délégué

Typesvaleursetopérationsde(dés)en apsulation. Unenouveautéapportée

parleCTS est lapossibilitéd'utiliserdes typesvaleursen plusdes typesréféren es.

Les types valeurs ne peuvent être null et ne sont pas alloués dans le tas, mais sur

la pile. Il s'agit de types pour des valeurs stru turées qui sont passées par opie.

Ils permettent typiquement l'implantation d'unions ou de stru tures à la C, dans

un adre type-safe. Voi i la liste des types valeurs prédénis (ils sont gérés de

ma-nière parti ulière par l'environnement d'exé ution etdes instru tions CIL leur sont

spé ialementasso iées):

 lesbooléensbool,

 les ara tères har,

 lesentiers signés: int8, int16, int32,int64 et native int,

 les entiers non signés: unsigned int8, unsigned int16, unsigned int32,

unsigned int64 etnative unsigned int,

 lesottants float32 et float64.

Il existe aussi un type  référen e typée  typedref utilisé à notre onnaissan e

ex lusivementpourl'implantationdes typesvariantsde VisualBasi .Net(nousn'en

parlerons pas dans e manus rit, pour un exemple d'interopération entre Caml et

VisualBasi , onpourra onsulter [15℄).

Les types valeurs utilisateurs ( ertains sont dénis dans la BCL) se dénissent

à la manière de lasses. Ils sont pourvus de hamps et de méthodes, mais il n'y a

(23)

interfa e IObserver {

publi void notify(string msg);

}

lass Subje t {

private IObserver observer;

publi void registerObserver(IObserver o) {observer = o;}

publi void notifyObserver() {

if (observer != null) observer.notify("hello");

}

}

lass Con reteObserver : IObserver {

publi void notify(string msg) { ... }

}

publi stati void Main() {

IObserver o = new Con reteObserver();

Subje t s = new Subje t();

s.registerObserver(o);

...

}

Fig. 1.4 Design pattern  observateur  ave une interfa e

énumérations (un as spé ialementgéré par la plate-forme).

Touttypevaleurestasso iéàuntyperéféren e,quihéritedeSystem.ValueType

ou de System.Enum (qui lui-même hérite de System.ValueType). Par exemple le

type int est asso ié à la lasse System.Int32 héritant de System.ValueType. Il

est possible de passer d'une représentation à l'autre: les valeurs sont onverties en

objets alloués dans le tas via une opération de boxing (en apsulation). L'opération

inverse s'appelleunboxing(désen apsulation). Ces deux opérationssont des

instru -tions primitivesde lama hinevirtuelle.Les lasses orrespondantauxtypesvaleurs

sont s ellées (sealed): elles ne peuvent pas être étendues par héritage (le mot- lé

orrespondant en Java est nal).

Outreunediéren esémantiquedansla onventiond'appeldeméthodes,le hoix

entre types valeurs et types référen es sepose aussi en termes d'e a ité. Si d'une

part la opie de valeurs peut être oûteuse, d'autre part les types valeurs ne sont

plus administrés par le ré upérateur de mémoire dont le travail est onsommateur

de ressour es. Les données stru turées de taillerelativement faibles gagnent à être

représentées par des typesvaleurs.

Héritage et sous-typage. La relation d'héritage du CTS dénit une notion de

sous-typage

(les types on ernés sontles types référen es etles types valeurs):

(24)

 sila lasse

C

héritede la lasse

C

alors

C

≤ C

,  sil'interfa e

I

héritede l'interfa e

I

alors

I

≤ I

,

 sila lasse

C

implantel'interfa e

I

alors

C ≤ I

,  si

τ

≤ τ

alors

τ

[] ≤ τ[]

. Si

τ

≤ τ

alors toutevaleur de type

τ

peut êtreutiliséeen pla e etlieud'unevaleur

de type

τ

. Les types valeurs ne sont en relation de sous-typage qu'ave eux-mêmes.

Lors de l'exé ution toutevaleuraun typeexa t,qui estleplus petit type

a ep-table pour ette valeur au sens de

. Les valeurs peuvent être onsidérées omme

étant d'un sur-type du type exa t, mais e dernier est toujours onnu de

l'envi-ronnement d'exé ution et déterminable dynamiquement. L'instru tion ast lass

de CIL est utilisée pour transtyper une valeur le long de sa haîne de sous-typage.

L'é he est déte table ar dans e as l'instru tion ast lassempilelavaleur null

(lemodèle d'exé ution de laplate-forme.NET est abordé à lase tion 1.1.4.1).

LeCTS présente d'autres ara téristiquesquenous ne détaillerons pas i i,telles

queles propriétés, les lasses internesou lespointeurs (pour l'interfa e ave le ode

natif).Onpourrasereporterauxlivres[79,90,85℄pourdeplusamplesinformations.

1.1.3.2 Interopération et CLS

Le CLR doit a ueillirdes langages diérents et si lesystème de types CTS est

pourvu de nombreux traits, il est lair qu'un langage donné ne va pas tous les

ap-préhender. Dans un adre d'interopérabilité il faut don dénir un sous-ensemble

minimumsur lequel leslangagespeuvent raisonnablementse mettred'a ord.C'est

e que dénit le CLS (Common Language Spe i ation),un ensemble de règles qui

limitentlesystème d'exé ution et lesystème de types.

Sans vouloirentrer dans lesdétails, donnons deux exemples représentatifs:

 Il faut se plier à ertaines onventions syntaxiques. Par exemple, le langage

C# distingue les ara tères majus ules etminus ules dans les identi ateurs,

maispas VisualBasi .NET. Le CLS impose don de ne pas ompter sur ette

distin tion.

 Certains types ne sont pas onnus de tous leslangages. Le CTS distingue les

entiers signés et non signés, mais ertains langages ne onnaissent pas les

en-tiers non signés. Il fautdon limiter leur emploi.

Un omposant sera onforme auCLS s'il suit e type de règles. S'y ontraindre

n'est pas une obligation,les règlespermettent simplementde dénirun adre

om-mun pour l'inter- ompréhension entre langages. L'ensemble des spé i ations du

CLSestdétaillédanslestandardECMApubliépar Mi rosoft[34℄.Ilfautbien noter

que es restri tions ne s'appliquent qu'aux types intervenant à l'interfa e des

om-posants logi iels, laissant possible d'utiliser la totalité du CTS en interne. Le CLS

(25)

1.1.3.3 Assemblages et Méta-données

Assemblages. Les assemblages (assemblies en anglais) sont l'unité de base de

déploiement .NET. Ce sont des exé utables ou des bibliothèques. Ils sont

auto-des riptifs aren plusd'in lurele ode proprementdit,ilsre èlentungrandnombre

d'informations gouvernant leur utilisation, ommeles typesexportés, les ressour es

utilisées, lesdépendan es et ...

 D'un point de vue lient, un assemblage est un paquetage de types et de

méthodes logiquementreliés les uns aux autres.

 Du pointde vuedu développeur, ils'agit d'une olle tionde  hiers, ertains

ontenant du ode .NET (on parle alors de modules) et d'autres (optionnels)

in orporantdes ressour esdiverses.L'un de es modulesetun seuldoit

onte-nir un manifeste, qui fonde l'assemblage en dénissant ses omposantes, ses

dépendan es et son identité (voir plus loin).

Le s héma 1.5montre un exempled'assemblage.

AssemblageA

ModuleA

Manifeste

Fi hier A ModuleB

Fig.1.5 Un exemple d'assemblage

La grande for e des assemblages par rapport aux bibliothèques traditionnelles

réside dans les servi es quiy sont atta hés:

 Ils sont munis d'une identité unique en dé larant de manière entralisée un

nom, un numéro de version et des paramètres de lo alisation(une langue par

exemple). L'authenti ité d'un assemblagepeut être garantiepar un nom fort,

'est-à-dire une en ryption par une paire de lefs publiqueet privée.

 Ils protent des servi es de la plate-forme .NET en matière de déploiement.

S'ils sont lo aux à une appli ation, leur présen e dans un sous-répertoire du

répertoire ra ine de l'appli ation sut à les intégrer à l'appli ation. Il n'y a

pas besoin de les enregistrer dans une base de registres omme 'est le as

pour les omposantsCOM. S'ilssont partagés, ilsdoivent être pla és dans un

dossier virtuel entral appelé GAC (Global Assembly Ca he, ou a he global

des assemblages), qui autorise ensuite une édition de liens dynamique depuis

n'importe quel lient.

(26)

Méta-données. Lesméta-données sontdes données sur des données. On peut les

voir ommeuneformeenri hiedes  hiersd'en-têtedeCoudesinterfa es ompilées

de Obje tive Caml.

Ellespermettent lades ription des types

4

en référençantleur dénition, en

pré- isant leur dispositionen mémoirepar exemple, dans lebut de permettre leur

utili-sation par un tiers.

Puisque les appli ations .NET peuvent reposer sur des assemblages é rits dans

des langagesdiérents,il faut prévoirla possibilitéd'interfa er dire tement les

lan-gagesaumoyende stru turesprisesen hargeauniveaude l'environnement

d'exé u-tion.Lesméta-donnéessontémisesdire tementdansle odeproduitave lesvaleurs,

an de permettre toutes sortesd'instrumentalisations.

Nous pouvons indiquer à titre d'exemple quelques onsommateurs de

méta-données:

 Le CLR. Lesméta-données sontutilisées pour lestâ hes de véri ation etde

gestion des politiques de sé urité (basées sur les types et les assemblages), la

dispositionen mémoireetl'exé ution.

 Le hargeur de lasses. Lesréféren es de typesdansle ode sont résoluesà

l'exé ution, et les lasses orrespondantes trouvées et hargées au moyen des

méta-données.

 Le ompilateur JIT.Voirla se tion 1.1.4.2.

 Diérents outils, omme les débogueurs, les dés-assembleurs, lesproleurs,

lesenvironnementsdedéveloppementintégrésexploitenttouslesméta-données.

In orporer les méta-données dire tement dans le ode garantit par onstru tion

la ohéren e de es informations ave les types utilisés dans le ode, et permet de

résoudre les problèmes posés par les bibliothèques de types de COM.

Laprésen edeméta-donnéesa ompagnantlesvaleursaumomentdel'exé ution

ouvre la porte aux mé anismes d'introspe tion et d'examen de types (ree tion en

anglais, nous utiliserons e terme dans la suite par ommodité). Il est possible,

dynamiquement:

 d'inspe ter des assemblages, des types, des membres de types,

 de harger des types etd'exé uter des méthodes,

 de générer dynamiquement du ode, des typeset des assemblages.

Les bibliothèques standard System.Refle tion et System.Refle tion.Emit

per-mettent es manipulations de méta-programmation, grâ e à la persistan e

d'infor-mationave lesvaleursfournie par lesméta-données.

Enn, terminons e tour d'horizon des méta-données en évoquant les attributs

et les attributs utilisateurs ( ustom attributes). Il est possible d'in orporer des

an-4.Lesméta-donnéessontomniprésentes:ellesdé riventtout equi peutêtre dé rit.Les

(27)

notations de son hoix dire tement dans le ode produit, à n'importe quel niveau

(assemblage, lasse, méthode, et ...) par lebiais des méta-données.

Certains attributs sont standards et sont re onnus par l'environnement

d'exé- ution, omme par exemple DllImportAttribute, qui permet de dé larer un

pro-totype de méthode qui sera lié à une implantation externe (typiquement dans une

bibliothèque nongérée ompiléeen ode natif).D'autres sontàladis rétiondu

pro-grammeur, et pourront être exploités spé iquement par telou teloutil. Dans tous

les as, les attributs sont des instan es de lasses héritant de System.Attribute,

lasses qui peuvent être étendues par l'utilisateur.

1.1.4 Environnement d'exé ution

LeCLRest apabledegérerl'exé ution on urrentedeplusieurspro essuslégers:

eux- idisposentdeplusieurstasgérésetd'unespa emémoireàl'adressagepartagé.

L'environnement est responsable de l'exé ution des pro essus, à savoir:

l'exé u-tion du ode lui-même, la gestion de la mémoire, du ontrle et des mé anismes

d'appels, mais également du hargement des lasses et des assemblages impliqués

lors de l'exé ution ainsi que diérentes tâ hes relatives à la sûreté de l'exé ution,

omme lavéri ation de ode oul'appli ation de politiques de sé urité.

Nousprésentons dans lasuite le modèle d'exé ution proposé par le CLR.

1.1.4.1 La ma hine virtuelle et le ode-o tet CIL

Le CLR est arti ulé autour d'une ma hine virtuelle appelée VES (Virtual

Exe- utionSystem). Ils'agit d'unema hineexé utant du ode-o tet basésur un modèle

de pile. Le byte ode .NET est appelé CIL (Common Intermediate Language). On

parlera de ode géré par opposition au ode natif (que le CLR peut par ailleurs

également prendre en harge).

État de la ma hine: étatsde méthodes etpile d'évaluation. Lemé anisme

d'appelsde méthodes est totalementprisen hargepar leCLR, e quiapour

onsé-quen e de l'abstraire auniveaudu ode CIL.Ainsiles méthodes formentdes unités

de regroupement des instru tions qu'iln'est possible de fran hir auniveau du ode

géré qu'au moyen des quelques instru tions d'appels disponibles dans le ode-o tet

(il s'agit de all, allvirt, alli, jmp, ret, throw et rethrow: on trouvera la

listedes instru tions CILen annexe).

L'état globalde la ma hine virtuellerepose sur lesdiérentsétats de méthodes,

omme présenté sur la gure1.6.

On peut modéliser un état de méthode par la onjon tion de:

 Un pointeur d'instru tion,

 Une piled'évaluation,

(28)

Moteur d’exécution

Etat de

méthode

Etat de

méthode

Etat de

Tas géré

méthode

Etat de

méthode

Etat de

Tas géré

méthode

Etat de

méthode

Etat de

méthode

Etat de

méthode

Etat de

Processus léger

Processus léger

Processus léger

Espace mémoire partagé

méthode

Fig. 1.6État de lama hine .NET

 Unezone dynamique de mémoire lo ale,

 Un des ripteur d'informations sur la méthode ( ontenant entre autres la

si-gnaturede la méthode),

 Undes ripteurderetourd'appel(permettantde restaurerl'étatdelaméthode

appelante),

 Un des ripteur de sé urité (utilisé par le CLR dans le adre de ses politiques

de sé urité).

Remarques:

 Lapile, les tableauxd'argumentset de variableslo ales, ainsi la mémoire

(29)

tru tion all, l'état omplet est restauré au retour de la méthode appelée

(moyennant lesajustements de pileliésaux passage d'arguments etauretour

de laméthode appelée bien sûr).

 Il est possible d'a éder aux tableaux d'arguments etde variables lo ales par

leur adresse (expriméesous laformed'un pointeur géré).

 Les méthodes peuvent gérer un nombre variable d'arguments, au moyen de

l'instru tion arglist qui retourne une stru ture itérative permettant

d'ex-ploiter lesarguments dynamiquement.

 La zone de mémoire lo ale est allouée dynamiquement au moyen de

l'ins-tru tion lo allo , le seul moyen de dés-allo ation étant la terminaison de

la méthode. Cette zone est adressable mais en général elle n'est pas utilisée

de manière intensive omme peut l'être le tas ( ar sa taillene peut pas être

réduite au ours de la durée de vie de la méthode).

 La piled'évaluation n'est pas adressable. Ellepeut re evoirtous types de

va-leurs, y ompris des typesvaleursstru turés (non boxés).

Tout empla ement qui sert au sto kage ou au passage de valeurs, à savoir les

arguments d'une méthode, les variables lo ales, les hamps d'objets ou en ore la

pile, est muni d'un type. Cependant il faut distinguer les empla ements alloués

statiquement omme les arguments, les variables lo ales ou les hamps qui sont

signés au moyen d'un type CTS expli ite, des ellules de la pile pour lesquelles un

nombre restreint de types sont dénis. Ces types internes à la pilesont: les entiers

32 bits, 64 bits et natifs de la plate-formehte, un type de ottant F(de pré ision

au moins supérieure à la pré ision des ottants natifs), un type O de  référen es

gérées  etun type

N

de  pointeurs gérés 

5 .

Les types de référen es et de pointeurs existent ar des instru tions CIL

per-mettent de al uler l'adresse d'empla ements des valeurs an d'agir sur elles par

référen e.

Dans e ontexte, on dénit l'état typé de la pile à un point du programme

ommeladonnée onjointedelaprofondeur depileetl'ensembledes typesCTS des

valeurssur lapile.Ilest toujourspossiblede onnaîtreletypeexa t d'unevaleursur

la pileen suivantl'exé ution pas àpas etonpeut remarquer quel'un des sou is du

ompilateur JIT est de s'assurer quelesbonnes onversions sontfaites pour queles

représentations internes à la pile n'ae tent pas l'exé ution d'un programme (que

les bonnes opérations de onversions, de resserrage ou d'élargissement des valeurs

soient inséréesdans le ode natif produit).

Dans le adre de la véri ation du ode-o tet, l'état typé de la pile est soumis

à des ontraintes vis-à-vis des diérents hemins d'exé ution possibles dans une

méthode.

5.Les pointeurs non gérés, puisqu'ils doivent bien être pris en hargeen même temps que le

(30)

Code-o tetCIL. Lesotsd'instru tionsCILsedéroulentméthodeparméthode.

Lesinstru tions permettentlamanipulationde lapileetdes variableslo ales,

om-portent des opérations arithmétiques, de ontrle et de manipulation du modèle

objet du CTS.

Chaque instru tion attend un ertain nombre d'arguments sur la pile, qui sont

onsommés,etdéposeun éventuel résultatsur ettemêmepile.L'appelde méthode

rentre dans e adre,par l'intermédiairede l'instru tion all etde ses variantes.

Le détaildes instru tionsCIL gure en annexe. Pour résumer on peut distinguer:

Les opérations numériques.Le CIL omportedes opérationsarithmétiquessur les

entiers etles ottants.Les entiers peuvent être signés ou non,et leur taillevarie de

1à8 o tets. Lesottantssont en simple oudoublepré ision. Ily a des instru tions

de omparaison, de onversion de types numériques, de test de dépassement

arith-métique etdes opérations booléennes bità bit.

Les opérations de pile. Dans ette atégorie se retrouvent tous les instru tions

permettant de dépla er une valeur vers ou depuis la pile. Cela peut se produire en

relation ave les autres empla ements possibles pour les valeurs, gurant dans un

argument ou une variable lo ale. Il est possible d'a éder à ertains empla ement

parleuradresse.On ompteégalementlesinstru tionsde hargementdes onstantes

numériques.

Les opérations de ontrle. On trouve:

 Bran hements onditionnelsouin onditionnels ausein d'une méthode.

 Appel de méthode: il peut se faire dire tement ou via une indire tion. Les

appels peuvent être virtuels (ayant re ours au mé anisme de liaison tardive)

ounon virtuels (liaison statique).

 Retourde méthode (instru tionret).

 Appelsré ursifs terminaux (tail alls) etsauts de méthode:dans ertains as

il est utile d'appeler une méthode sans onserver le adre d'a tivation de la

méthode appelante. Cela est intéressant pour optimiser le ode ompilé pour

une fon tion ré ursive terminalepar exemple.

 Mé anismes de rupture de ontrle (ex eptions).

Le passage d'arguments d'une méthode à une autre peut se faire par valeur ou

par référen e (laissant aux instru tions appropriées le soin de al uler l'adresse de

l'empla ementd'une valeur ou de harger une valeurpar indire tion).

Une alternative existe, spé ialement implantée pour Visual Basi .NET: le

pas-sage par référen e typée. Une référen e typée est une valeur ontenant à la fois

l'adresse d'unevaleur etsontype.Cela permetun a ès parréféren epour lequel le

typede lavaleurest onsultable dynamiquement.

Les opérations de mémoire et opérations sur les objets. Cela regroupe la réation

(31)

possible pour et objet, plus pré is dans la hiérar hie de lasses) et les opérations

de boxing/unboxing.Onpeut également ompter dans ette atégorielesopérations

sur lestableaux.

Remarque valant pourtoutes les instru tions: du point devue des types, ontrouve,

 des instru tionspolymorphes, ommedup ouadd,

 des instru tions paramétrées par des types de base, omme ld .i4 (le type

fait partie de l'instru tion, pour des types diérents, on aura des op odes

6

diérents),

 des instru tions paramétrées par des référen es à des méta-données dé rivant

letypeCTSmanipulé

7

, ommeisinst MyNamepa e.MyClass (i iletypesuit

l'instru tion dans leot des op odes).

1.1.4.2 Chargement et exé ution

La gure 1.7 illustre les diérentes étapes menant de la ompilation du ode

sour e à l'exé ution par l'environnement .NET. Les boites grises sont des éléments

de laplate-forme.

Les assemblages générés par l'édition de lien prennent la forme de  hiers au

format PE (Portable Exe utable les): eux- i rassemblent ode-o tet, ode natif,

méta-données etéventuellement des données de ressour es.

Chargement de lasses. Les assemblages pris en entrée du hargeur de lasses

ontpu être produitspar des ompilateursde langagesdiérents.À otédu ode

o -tet, le ode natifest égalementpris en harge, etlesdeux peuvent êtreproduits par

un même ompilateur( 'estle aspour leC++ave extensions géréesparexemple).

Lorsde l'exé utiond'unassemblage,leCLRest hargéderésoudre lesréféren es

aux lassesinternesou externesàl'assemblage.Cetterésolution passepar

l'identi- ation des lasses et de leur sour e par l'intermédiairede méta-données: référen es

de lasses et référen es aux assemblages tiers. Les méta-données intégrent des

in-formations de version et in orporent un mé anisme d'authenti ation des sour es

grâ e à la signature par les noms forts. L'empla ement physique des assemblages à

harger est déterminé à l'aide des méta-données et de réglages administratifsde la

plate-formehte.

Selonleniveau de onan ea ordé au ode hargé,lemé anismedevéri ation

peut être appliqué. De son té le ode natif doit toujours être digne de onan e

ar ilne peut être vérié. L'exé ution a lieumoyennant l'appli ationdes politiques

de sé urité, dont ertaines lauses s'expriment de manièredynamique.

6.Unop odedésignel'o tetouleso tetsreprésentantphysiquementl'instru tionenmémoire.

7.Enpratique,lesréféren esauxméta-donnéessontimplantéesaumoyende lefsdequelques

(32)

CIL et

Code source

Compilateur

Code natif et

métadonnées

Editeur de liens

.EXE ou .DLL

Code natif géré

BCL

Exécution

Appel à une

méthode inconnue

confiance

seulement

Code digne de

.OBJ

.OBJ

.DLL

Seulement le

code natif

(digne de confiance)

Gestionnaire

de code

Vérificateur

de sécurité

Compilateur JIT

Vérificateur

Chargeur de classes

métadonnées

métadonnées

Moteur de

Fig. 1.7 Compilation et exé ution

Compilation Just In Time. Dans l'univers des ma hines virtuelles, il est

pos-sibled'interpréter le ode-o tetoubiende le ompileran d'exé uterdu ode natif.

Cela se nommela ompilationJust In Time(JIT) puisqu'ellea lieuau dernier

mo-ment(à l'exé ution) sur l'ar hite ture on rète hébergeant lama hine virtuelle.

Enrésumé:

 On préfère distribuer le ode-o tet, portable,que du ode natifpré ompilé.

 La ompilationJITpermetensuited'attendrede onnaîtrelaplate-formehte

an de ompilere a ementen tenant omptede ses ara téristiques.

Les JVMs utilisent diérentes heuristiques hoisissant au as par as si une

mé-thodedoit êtreinterprétée oubien ompiléejusteàtemps.Carsiuneméthodeainsi

ompilées'exé uteraplus rapidementpour touslesappelsultérieurs,letempspassé

(33)

Du té de l'ar hite ture .NET, le hoix est simple: haque méthode CIL est

ompilée en ode natif lors de son premier appel. Il s'agit don d'un JIT

systéma-tique.

1.1.4.3 Questions de sûreté

Code géré et typage. Les programmes type-safe ne référen ent que la mémoire

qui a été allouée pour eux et n'a èdent aux objets qu'à travers leur interfa e

pu-blique. Cela autorise les objets à partager un même espa e d'adressage de manière

sûre et fait en sorte que les garanties prévues par les interfa es des objets ne sont

pas ontournées.

Ilfaut toutefoisun moyen de vérier ette propriété surles programmes hargés

par leCLR, alorsmêmeque esprogrammesproviennentde sour eséventuellement

non sûres, et ont été ompilés à partir de langages diérents, proposant des

mé a-nismes de véri ation statique plus ou moinsélaborés.

Le modèle proposé par les langages statiquement typés tel que Obje tive Caml

ne setranspose pasdansle adredesma hinesvirtuellesmulti-langages.Cependant,

la présen e de méta-données (et don de types) dire tement in luses dans le ode

géré permet de répondre à e problème. En revan he les se tions de ode non géré

doiventfaire l'objet d'une onan e totale.

Lepro essusdevéri ationdubyte ode onsisteàvérierla ohéren edes

méta-données (par exemplelesnomsde typeseux-mêmes, quidoivent orrespondre,mais

aussi lamanière de les instan ier en mémoire,en pré isant l'alignement,la

onven-tion d'endianness...), appliquerun ertain nombre de ritèreslimitantl'utilisation

d'instru tions ritiques et faire une analyse des ots d'exé ution au sein du ode

pour garantirdes propriétés de ohéren e de pile(ainsi l'étattypé de lapiletelque

déni plus haut doit être identique en tout point du programme vis à vis des

dif-férents hemins d'exé ution qui peuvent y mener). Ce pro essus ne s'applique qu'à

du ode géré: le ode natif n'estjamais vériable.

Au bout du ompte, on peut lasser le ode CIL géré de la manièresuivante:

Code gérésyntaxiquement orre t

Codevalide

Code type-safe

Code vérié

(34)

 Code géré syntaxiquement orre t.

 Code géré valide. C'estdu ode pour lequel le ompilateurJIT est apablede

produireunereprésentationnative.Du ode invalide orrespond àdes

instru -tions illégales dans leur ontexte ( 'est le as par exemple si une instru tion

de bran hement br pointe à l'extérieur du ode de la méthode dans laquelle

elleapparaît).

 Code géré type-safe. Cette propriété peut être vraiepour du ode utilisantde

manièresûre des opérationsde nature non sûre.

 Code géré vérié. C'est un sous-ensemble du ode type-safe pour lequel ette

propriété est prouvable algorithmiquement.

La lassede odevériédépenddel'algorithmedevéri ation hoisi.L'important

est que elui- isoit onservatif, ne laissantpasserquedu ode type-safe. Cependant

la sûreté par le typage n'est pas une propriété dé idable par un algorithme et il

fautsesatisfaired'unalgorithme onservatifquirejetteraparfois du odetype-safe:

il faut arbitrer entre pré ision et oût de l'algorithme. L'algorithme de véri ation

implantédansleCLRréalise e ompromisentreexhaustivitéetvitessed'exé ution.

Au sujet du ode non-géré. Il est également possible de produire dans les

assemblages .NET du ode non-géré, 'est-à-dire du ode natif (qu'il ne faut pas

onfondre ave le ode géré non-vériable). Le ode non-géré tourne en dehors de

tout ontrlede l'environnementd'exé ution:en parti ulieriln'yapasde

ramasse-mietteset lesstru tures de données ne sont pas munies de type CTS.

Certaines instru tions CIL permettent de faire le lien entre le monde géré et

le monde natif: manipulation de pointeurs, appel de fon tion par indire tion,

ma-nipulationdeblo sdemémoire.Bienentendu esinstru tionsnesontpasvériables.

Le seul langage à proposer la génération de ode non-géré et mêmeun mélange

entre odegéréet odenon-géré,estVisualC++ave extensionsgérées(deslangages

ommeF# proposent le hoixentre générationsde ode géré vériableet géré

non-vériable, e qui est totalement diérent).

Autres mé anismes de sé urité. Au delà de la sûreté par le typage, le CLR

applique des politiques de sé urité permettantde ne donnerl'a ès à ertaines

mé-thodes que sous ertaines onditions, statiques ou dynamiques, sur la méthode

ap-pelante. Ces onditions exprimées sous la forme d'objets et de méta-données de

sé urité, sont éventuellement ontrlables de manière administrative sur la

plate-formehte.

Au hapitre de la sé urité on peut également iter le mé anisme de

(35)

1.1.5 Utilisation de la plate-forme pour la ompilation d'un

langage fon tionnel

Nous on luons ette présentationde laplate-forme.NET parun tour d'horizon

des moyens misà ladisposition d'un ompilateur de langagesfon tionnels.

1.1.5.1 Apports de la plate-forme

Au premier oup d'oeil la plate-forme .NET semble surtout adaptée aux

para-digmes impératifet objet. Toutefois, ertaines ara téristiques sont très utilespour

l'implantationde langages fon tionnels ommeCaml:

Appelsré ursifsterminaux(tail alls). Leslangagesfon tionnels onduisentà

un styledeprogrammationreposantde manièreintensivesurlaré ursion.Celapeut

provoquerdesprofondeursdepiled'appeltrèsimportantesàl'exé ution,quipeuvent

être évitées grâ e à l'identi ation d'appels ré ursifs terminaux, pour lesquels le

adred'a tivationd'unefon tionpeutêtreabandonnéd'unappelré ursifàunautre,

évitant ainsi des empilementsinutiles.

LeCLRgèrelui-mêmelemé anismed'appelsdeméthodesetilestheureusement

prévu de réaliserdes appelsré ursifs terminaux(au moyen du préxe tail.ou des

instru tions jmp). Remarquons que ette possibilitéest absentede lama hine Java.

Ré upération automatique de mémoire. Leslangagesfon tionnels, àl'instar

de laplupart des langages modernes (ave Java et C# en première ligne), reposent

sur un mé anisme de ré upérationautomatique de lamémoire.

L'environnement d'exé ution de Obje tive Caml in orpore son propre GC, et il

estpratiquepourtout ompilateur iblantlaplate-forme.NETdepouvoirs'appuyer

sur leGC de elle- i.

1.1.5.2 La unes de la plate-forme

Cependantun ertainnombrededétailslaissentpenserqueleslangages

fon tion-nels n'ontpas étéau oeur des onsidérationslorsdel'élaborationde laplate-forme

.NET.

Fermetures. Il n'y a pas de support natif pour les fermetures, une stru ture de

donnée in ontournabledansl'implantationdes langagesfon tionnels.Uneextension

développée dans les laboratoires de re her he de Mi rosoft, appelée ILX [82℄, tente

de ombler ettela unemaisnefaitpartiedel'environnement.NETo iel.Cesujet

est de nouveau évoqué à lase tion 1.3.1.2.

Types algébriquesetpolymorphisme. Lestypesalgébriques hersaulangages

fon tionnels n'ontpas de représentationdire tedans lesystème de typesCTS,etle

polymorphismed'interfa edes langagesobjetsne orrespondpasaupolymorphisme

(36)

En e qui on erne lepolymorphismeparamétrique,lesGeneri s[50, 92℄,à

l'ori-gineuneextensionexpérimentale etparlasuiteajoutéeauCLRdanssaversion2.0,

propose une solutionpartielle (voir lase tion 1.3.1.2pour plus de détails).

1.1.5.3 Cara téristiques utiles au développement

Indépendemment du type de langagedéveloppé sur la plate-forme, elle- i ore

un ertainnombrede servi esqui permettentlamise aupointrapide d'un

ompila-teur.

Génération de ode. Il n'est nullement né essaire de générer des  hiers au

for-matPE,dumoinslorsdelaphasedemiseaupoint.Si ertains hoisissentdegénérer

du ode C# qui sera ensuite ompilé en ode-o tet par le ompilateur C# s , la

plupartdesprojetsgénèrentdu ode-o tet CILsousformede mnémoniques,

ompi-léepar lasuiteaumoyende l'assembleurde odeCILilasm.Cesdeux ompilateurs

sontfournis ave la plate-forme.

D'autre part la BCL omporte de nombreuses méthodes d'émission de ode,

en parti ulier toute l'API Refle tion.Emit, ainsi que des méthodes permettant

d'a éder aux méta-données. Cette appro he est envisageable dans le adre d'un

ompilateurbootstrappé,dont le ode aura naturellement a èsà es servi es.

Débogage. La mise au point d'un ompilateur est fa ilité par les systèmes de

garde-fous,de rattrapage etd'analysed'erreurs quefournit laplate-forme.Ainsidu

fait même de la présen e des types à l'exé ution et de la gestion native des

ex ep-tions, ilest fa iled'avoir des indi ations lorsd'un rash du programme(que e soit

les programmes engendrés par le ompilateur en phase de mise au point ou bien

mêmele ompilateur bootstrappéun peu plus tard lorsdu y le de développement,

voirlase tion 5.2.1.1).

Lesoutils suivants, fournis ave la plate-forme,sontégalement très utiles:

 ledés-assembleur de ode CIL ildasm,

 levéri ateur de ode CIL peverify,

Figure

Fig. 1.1  Plate-forme .NET
Fig. 1.2  Le système CTS dans les grandes lignes
Fig. 1.3  Design pattern  observateur  ave
 un délégué
Fig. 1.4  Design pattern  observateur  ave
 une interfa
e
+7

Références

Documents relatifs

Such an approach focuses on visual signs of disruption and organizes a specific kind of urban maintenance in which building façades are daily taken care of through a

In order to approach a specific interaction in an equitable way, we design a control task which facilitates a social robot reach an optimal meeting point by planning a

La conduite de U2000 et de U3M illustre donc à la fois la place croissante donnée aux collectivités locales et aux intérêts privés dans l’action publique, le déplacement des lieux

Le sujet est bien choisi : au cours de la période étudiée, le quatuor, grâce notamment à la revue qu’il avait créée, a su donner un nouveau cours à la sociologie française,

refusant de choisir entre un traitement se réclamant de la fiction ou du documentaire, contreviennent au principe de généricité. Aussi, avec leurs faibles ou

À partir des années 1970, l’histoire des sciences s’est développée avec la création de nouvelles institutions et équipes dans le cadre du CNRS ou de l’EHESS, ouvrant ainsi

Finally, the hydraulics of inner leaf tissues can have a strong impact on the dynamic responses of leaf water potential and stomata, and as a consequence on plant carbon economy

2 Time evolution of the relative liquid volume contained in the foam (full symbols) and of the relative foam volume (open symbols) in free drainage configuration at 25  C for