Microsoft Intermediate Language (MSIL), joka tunnetaan myös nimellä Common Intermediate Language (CIL), on ohjesarja, joka on alustariippumaton ja jonka kielikohtainen kääntäjä luo lähdekoodista. MSIL on alustariippumaton ja siksi se voidaan suorittaa missä tahansa Common Language Infrastructure -tuetussa ympäristössä, kuten Windowsissa. .NETTO suoritusaika.
JIT-kääntäjä muuntaa MSIL:n tietyksi tietokoneympäristökohtaiseksi konekoodiksi. Tämä tehdään ennen kuin MSIL voidaan suorittaa. Myös MSIL muunnetaan konekoodiksi tarpeen mukaan, eli JIT-kääntäjä kääntää MSIL:n tarpeen mukaan eikä koko sen.
Suoritusprosessi Common Language Runtimessa (CLR): Suoritusprosessi, joka sisältää MSIL:n luomisen ja MSIL:n muuntamisen konekoodiksi JIT-kääntäjällä, esitetään seuraavasti:

java lisäysmerkkijono
- Lähdekoodi muunnetaan MSIL:ksi kielikohtaisella kääntäjällä CLR:n käännösajassa. Kokoelmaan tuotetaan MSIL:n ohella myös metatietoja. Metatiedot sisältävät tietoja, kuten koodin tyyppien määritelmän ja allekirjoituksen, ajonaikaiset tiedot jne.
- Common Language Infrastructure (CLI) -kokoonpano luodaan kokoamalla MSIL. Tämä kokoonpano on pohjimmiltaan käännetty koodikirjasto, jota käytetään turvallisuuteen, käyttöönottoon, versiointiin jne. ja sitä on kahta tyyppiä eli prosessikokoonpanoa (EXE) ja kirjastokokoonpanoa (DLL).
- JIT-kääntäjä muuntaa sitten Microsoft Intermediate Language (MSIL) -kielen konekoodiksi, joka on ominaista sille tietokoneympäristölle, jossa JIT-kääntäjä toimii. MSIL muunnetaan konekoodiksi tarpeen mukaan, eli JIT-kääntäjä kääntää MSIL:n tarpeen mukaan eikä koko sen.
- JIT-kääntäjällä saadun konekoodin suorittaa sitten tietokoneen prosessori.
Esimerkki: MSIL:n luo kielikohtainen kääntäjä alla annetusta lähdekoodista. Ymmärtääksesi MSIL:n yksityiskohtaisesti, käytä yksinkertaista C#-lähdekoodia luokan Demolla, joka tulostuu techcodeview.com annetaan seuraavasti:
using> System;> > public> class> Demo {> >public> static> void> Main()> >{> >Console.WriteLine(>'techcodeview.com'>);> >}> }> |
java muuttumaton luettelo
>
>
C#-kääntäjän luoma MSIL yllä annetulle koodille annetaan seuraavasti:
// =============== 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 // =============================================================> Yllä olevassa MSIL:ssä on operaatiokoodeja, jotka ovat yhden tai kaksi tavua pitkiä. Perusluokkailmoitukset, joista kaikki muut luokat peritään, sisältyvät mscorlib.dll . Metodissa Main(), käsky ldstr lataa merkkijonoa techcodeview.com pinossa. Sitten staattinen System.Console.Writeline funktiota kutsutaan ja merkkijono pompataan pinosta. Lopuksi ret-käsky ilmoittaa funktiokutsun päättymisen.
Sitten .ctor( ) -lause tarkoittaa oletuskonstruktoria ilman parametreja luokassa Demo. Kääntäjä luo automaattisesti tämän konstruktorin ei-staattista luokkaa Demo varten. Kutsukäsky ohittaa perusobjektikonstruktorin ja ret-käsky ilmoittaa funktiokutsun päättymisestä.