„Microsoft Intermediate Language“ (MSIL), taip pat žinoma kaip bendroji tarpinė kalba (CIL), yra nuo platformos nepriklausomų instrukcijų rinkinys, kurias generuoja konkrečiai kalbai skirtas kompiliatorius iš šaltinio kodo. MSIL yra nepriklausoma nuo platformos ir todėl gali būti vykdoma bet kurioje bendrosios kalbos infrastruktūros palaikomoje aplinkoje, pvz., Windows .NET vykdymo laikas.
JIT kompiliatorius MSIL konvertuoja į tam tikrą kompiuterio aplinkos specifinį mašinos kodą. Tai atliekama prieš paleidžiant MSIL. Be to, MSIL konvertuojamas į mašinos kodą pagal poreikį, t. y. JIT kompiliatorius sukompiliuoja MSIL pagal poreikį, o ne visą.
Vykdymo procesas Common Language Runtime (CLR): Vykdymo procesas, apimantis MSIL sukūrimą ir JIT kompiliatoriaus MSIL konvertavimą į mašininį kodą, pateikiamas taip:

dirbtinis neuroninis tinklas
- Šaltinio kodas konvertuojamas į MSIL konkrečios kalbos kompiliatoriaus CLR kompiliavimo metu. Be to, kartu su MSIL, kompiliacijoje taip pat sukuriami metaduomenys. Metaduomenyse yra informacijos, tokios kaip kodo tipų apibrėžimas ir parašas, vykdymo informacija ir kt.
- Bendrosios kalbos infrastruktūros (CLI) rinkinys sukuriamas surenkant MSIL. Šis rinkinys iš esmės yra sudaryta kodų biblioteka, naudojama saugai, diegimui, versijų kūrimui ir kt., ir ji yra dviejų tipų, ty proceso surinkimo (EXE) ir bibliotekos surinkimo (DLL).
- Tada JIT kompiliatorius konvertuoja „Microsoft Intermediate Language“ (MSIL) į mašinos kodą, būdingą kompiuterio aplinkai, kurioje veikia JIT kompiliatorius. MSIL konvertuojamas į mašinos kodą pagal poreikį, t. y. JIT kompiliatorius sukompiliuoja MSIL pagal poreikį, o ne visą.
- Mašininį kodą, gautą naudojant JIT kompiliatorių, tada vykdo kompiuterio procesorius.
Pavyzdys: MSIL sugeneruoja konkrečios kalbos kompiliatorius iš toliau pateikto šaltinio kodo. Norėdami išsamiai suprasti MSIL, spausdinkite paprastą C# šaltinio kodą su demonstracine klase techcodeview.com pateikiama taip:
using> System;> > public> class> Demo {> >public> static> void> Main()> >{> >Console.WriteLine(>'techcodeview.com'>);> >}> }> |
Java išimčių tvarkymas
>
>
MSIL, kurį C# kompiliatorius sukuria aukščiau pateiktam kodui, pateikiama taip:
// =============== 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 // =============================================================> Aukščiau pateiktame MSIL yra vieno arba dviejų baitų ilgio operacijų kodai. Bazinių klasių deklaracijos, iš kurių paveldimos visos kitos klasės, yra mscorlib.dll . Metodo Main() instrukcija ldstr įkelia eilutę techcodeview.com ant kamino. Tada statinis System.Console.Writeline iškviečiama funkcija ir eilutė iškeliama iš kamino. Galiausiai ret instrukcija signalizuoja funkcijos iškvietimo pabaigą.
Tada .ctor( ) sakinys reiškia numatytąjį konstruktorių be parametrų klasei Demo. Šį konstruktorių automatiškai sukuria nestatinės klasės Demo kompiliatorius. Iškvietimo instrukcija perduoda bazinio objekto konstruktorių, o ret instrukcija signalizuoja funkcijos iškvietimo pabaigą.