logo

CIL ali MSIL | Microsoftov vmesni jezik ali skupni vmesni jezik

Microsoftov vmesni jezik (MSIL), znan tudi kot skupni vmesni jezik (CIL), je nabor navodil, ki so neodvisna od platforme in jih generira prevajalnik za posamezni jezik iz izvorne kode. MSIL je neodvisen od platforme in ga je posledično mogoče izvajati v katerem koli okolju, ki ga podpira skupna jezikovna infrastruktura, kot je Windows .MREŽA čas izvajanja.
Prevajalnik JIT pretvori MSIL v strojno kodo, specifično za določeno računalniško okolje. To se naredi, preden se lahko izvede MSIL. Poleg tega se MSIL pretvori v strojno kodo na podlagi zahteve, tj. prevajalnik JIT prevede MSIL po potrebi in ne celotnega.

Postopek izvajanja v izvajalnem okolju skupnega jezika (CLR): Postopek izvajanja, ki vključuje ustvarjanje MSIL in pretvorbo MSIL v strojno kodo s prevajalnikom JIT, je podan takole:



MSIL ali CIL

poštar
  • Izvorno kodo pretvori v MSIL prevajalnik, specifičen za jezik, v času prevajanja CLR. V kompilaciji so poleg MSIL izdelani tudi metapodatki. Metapodatki vsebujejo informacije, kot so definicija in podpis vrst v kodi, informacije o času izvajanja itd.
  • S sestavljanjem MSIL-a se ustvari sklop skupne jezikovne infrastrukture (CLI). Ta sestav je v bistvu prevedena knjižnica kode, ki se uporablja za varnost, uvajanje, ustvarjanje različic itd. in je dveh vrst, tj. sestav procesa (EXE) in sestav knjižnice (DLL).
  • Prevajalnik JIT nato pretvori Microsoftov vmesni jezik (MSIL) v strojno kodo, ki je specifična za računalniško okolje, v katerem teče prevajalnik JIT. MSIL se pretvori v strojno kodo na podlagi zahteve, tj. prevajalnik JIT prevede MSIL po potrebi in ne celotnega.
  • Strojno kodo, pridobljeno s prevajalnikom JIT, nato izvede procesor računalnika.

primer: MSIL ustvari jezikovno specifičen prevajalnik iz izvorne kode, podane spodaj. Za podrobno razumevanje MSIL uporabite preprosto izvorno kodo C# z razredom Demo, ki natisne techcodeview.com je podan kot sledi:








using> System;> > public> class> Demo {> >public> static> void> Main()> >{> >Console.WriteLine(>'techcodeview.com'>);> >}> }>

>

>

primer podniza v Javi

MSIL, ki ga ustvari prevajalnik C# za zgoraj navedeno kodo, je podan takole:

 // =============== CLASS MEMBERS DECLARATION =================== .class public auto ansi beforefieldinit Demo extends [mscorlib]System.Object { .method public hidebysig static void Main() cil managed { // .maxstack 8 IL_0000: nop IL_0001: ldstr 'techcodeview.com' IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Demo::Main .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } // end of method Demo::.ctor } // end of class Demo // =============================================================>

V zgornjem MSIL-u so kode, ki so dolge en ali dva bajta. Deklaracije osnovnih razredov, iz katerih so podedovani vsi drugi razredi, so vsebovane v mscorlib.dll . V metodi Main(), navodilo ldstr naloži niz techcodeview.com na skladu. Potem statika System.Console.Writeline se pokliče funkcija in niz se odstrani iz sklada. Končno ukaz ret signalizira konec klica funkcije.
Potem je .ctor( ) implicira privzeti konstruktor brez parametrov za razred Demo. Ta konstruktor samodejno ustvari prevajalnik za nestatični razred Demo. Ukaz za klic preide konstruktor osnovnega objekta, ukaz ret pa signalizira konec klica funkcije.