.NET ajoympäristö Juha Järvensivu juha.jarvensivu@tut.fi 2007
Käännösprosessi C# lähdekoodi C# kääntäjä CILtavukoodi JITkäännös Ajettava natiivikoodi Kehitysympäristössä ohjelmoijan toimesta Ajonaikana.NET ajoympäristön toimesta
Käännösprosessi 2-vaiheinen Kääntäminen CIL-välikielelle Common Intermediate Language CIL Kääntäminen ajettavaksi binääriksi ajonaikana JIT-kääntää CIL-koodin ajonaikaisesti konekoodiksi Kerran käännetty natiivikoodi säilyy muistissa ohjelman suorituksen loppuun asti.
JIT-käännös CIL välikoodi CLR Execution engine MyApp.exe MyApp.code MyLib.dll JIT COMPILER MyLib.code
Common Language Runtime (CLR).NET ajonaikainen suoritusympäristö (vrt javan virtuaalikone) Tehtävät Kääntää CIL-välikoodin ajonaikaisesti konekoodiksi Huolehtii muistinhallinnasta Tietotyyppitarkistuksista Turvallisuustarkistuksista Poikkeuskäsittelystä
Termistöä
CIL Common Intermediate Language CIL = MSIL = IL Välikieli (vrt Java bytecode) Käännetään suorituksen aikana konekoodiksi käyttäen JIT-käännöstä
Assembly Pienin yksittäinen asennettava yksikkö dll tai exe tiedosto Koostuu CIL-koodista Metadatasta Manifestista Resurssitiedostoista (optionaalinen)
Metadata Sisältää metatietoa CIL-koodista Kuvaa assemblyn sisällön ohjelmointikieliriippumattomalla tavalla Tyyppien kuvaukset (luokka, rajapinta jne) Nimi, näkyvyys, kantaluokka, toteutetut rajapinnat. Jäsenet (metodit, muuttujat, propertyt, eventit). Kääntäjä generoi metadatan automaattisesti
Manifesti Assemblyn metadataa Sisältö Versionumero Culture information Lista assemblyn sisältämistä tyypeistä Lista viittauksista muihin assemblyihin Kääntäjä generoi manifestin automaattisesti
Assembly Manifest Metadata CIL code Resources (optional)
Termistöä Hallittu koodi (Managed code) CLR:n hallinnassa ajettava koodi Ei hallittu koodi (Unmanaged code) Natiivikoodi, jota ei ajeta clr:n hallinnassa Managed heap CLR:n prosessille sen luontivaiheessa varaama muistialue Multi-file Assembly Assembly, joka koostuu useammasta tiedostosta (primary ja secondary modules)
Tyyppijärjestelmä
Ohjelmointikieliriippumattomuus.NET ohjelmia voidaan toteuttaa yli 20 ohjelmointikielellä APL Fortran Oberon Scheme C++ Haskell Oz SmallTalk C# Java Pascal Standard ML COBOL JScript Perl Visual Basic Forth Eiffel Mercury Python Lähde: http://msdn.microsoft.com/netframework/technologyinfo/overview/
CTS Common Type System.NET tyyppijärjestelmä Määrittelee kaikki.net ajoympäristön tukemat tietotyypit
CTS Types ClassType Structure Type Interface Type Enumeration Type Delegate Type
CLS Common Language Specification Yleinen kielimääritys Joukko tyyppejä, jotka kaikkien ohjelmointikielten pitää vähintään toteuttaa CLS compliant code [assembly: System.CLSCompoliant(true)]
Ympäristöriippumattomuus
Standard ECMA-335 Common Language Infrastructure (CLI) 4th edition (June 2006) Kansainvälinen standardi, joka mahdollistaa koodin suorittamisen erilaisissa ympäristöissä Sisältö Part 1: Concepts and Architecture Part 2: Metadata Definition Part 3: CIL Instruction Set Part 4: Profiles and Libraries Part 5: Debug Interchange Format. Part 6: Annexes Contains some sample programs written in CIL Assembly Language http://www.ecmainternational.org/publications/standards/ecma-335.htm
.NET ja Linux Mono-projekti www.mono-project.com Tavoitteena luoda OSS-versio.NETympäristöstä, joka mahdollistaa.net sovellusten ajon linux ja unix ympäristöissä
Esimerkki dll-kirjasto Ajastimen käyttö eventin luonti
Lähteitä ECM 335 http://www.ecma-international.org/publications/standards/ecma-335.htm Common Type System (wiki) http://en.wikipedia.org/wiki/common_type_system Common Type System (msdn) http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconthecommontypesystem.asp Common Language Runtime (CLR) http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconthecommonlanguageruntime.asp Inside.NET Framework http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconinsidenetframework.asp Raising an event http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconprovidingeventfunctionality.asp