Siirry sisältöön

CIL (tietotekniikka)

Wikipediasta
(Ohjattu sivulta Common Intermediate Language)

CIL (Common Intermediate Language) on Common Language Infrastructure (CLI) - ympäristön määrittelemä tavukoodin (bytecode) muotoinen välikieli, johon CLI-yhteensopivilla ohjelmointikielillä kirjoitetut ohjelmat käännetään ennen suorittamista.[1] CIL muodostaa .NET-ympäristön tavukoodin: se on matalan tason, pinoon perustuva käskykieli, jota Common Language Runtime (CLR) tai muu Common Language Infrastructure (CLI) - yhteensopiva ajonaikainen ympäristö suorittaa kääntämällä sen edelleen natiiviksi konekieleksi.[2]

CIL on suunniteltu kieliriippumattomaksi välikieleksi: eri ohjelmointikielet, kuten C# ja Visual Basic .NET, voidaan kääntää samaan CIL-koodiin, kunhan ne noudattavat CLI:n määrittelemää Common Type System -tietomallia.[3] CIL-ohjelmat sisältävät itse käskyjen lisäksi metatiedot tyypeistä, jäsenistä ja viittauksista, mikä mahdollistaa muun muassa heijastuksen (reflection) ja dynaamisen koodin lataamisen.[1]

CIL on pinoon perustuva käskykieli, jossa useimmat käskyt ottavat operandit arvopinosta ja tallettavat tulokset takaisin pinoon.[1] CIL-käskyvalikoima sisältää muun muassa:

  • aritmeettiset ja loogiset perusoperaatiot
  • haarautumis- ja silmukkakäskyt
  • metodikutsut ja paluut
  • poikkeusten käsittelyn käskyt
  • muistinkäsittelyyn liittyvät lataus- ja talletusoperaatiot.

CIL tavukoodi koostuu binäärisistä käskyistä ja metatiedoista. Tavukoodi suoritetaan Common Language Infrastructure (CLI) -ympäristön virtuaalikoneessa. Microsoftin .NET-ympäristössä tämä virtuaalikone on CLR, joka kääntää CIL-tavukoodin natiiviksi konekieleksi.

CIL-koodi tallennetaan tavallisesti PE/COFF-muotoisiin suoritettaviin tiedostoihin (EXE) ja kirjastoihin (DLL), joissa tavukoodi ja metatiedot ovat erillään natiivikoodista.[1]

Suhde hallittuun suoritukseen

[muokkaa | muokkaa wikitekstiä]

CLR:ssä hallittu suoritusprosessi alkaa, kun CIL-tavukoodi ja siihen liittyvät metatiedot ladataan muistiin.[2] CLR tarkistaa koodin tyyppiturvallisuuden ja käyttöoikeudet, minkä jälkeen se kääntää CIL-koodin just-in-time-kääntäjän (JIT) avulla natiiviksi konekieleksi tai hyödyntää etukäteen käännettyä natiivikoodia (Native AOT).[4] CIL:n ja metatietojen yhdistelmä mahdollistaa sen, että ajonaikainen ympäristö voi tarkastella ohjelman rakennetta, valvoa sen turvallisuutta ja tarjota korkeantason palveluja kuten roskienkeruun ja dynaamisen koodin lataamisen.[2]

CIL:stä käytettiin aiemmissa Microsoftin dokumenteissa myös nimitystä Microsoft Intermediate Language (MSIL).[1] ECMA-335-standardissa välikielestä käytetään nimeä Common Intermediate Language (CIL), ja tätä termiä käytetään .NET-ympäristön välikielen virallisena nimenä.

C# -metodi, joka laskee kahden luvun summan, käännetään CIL-välikielelle Roslyn-kääntäjäalustan toimesta esimerkiksi dotnet build -komennon yhteydessä. Roslyn analysoi C#-lähdekoodin syntaktisesti ja semanttisesti ja generoi siitä ECMA-335-standardin mukaista CIL-tavukoodia.[1]

C#-lähdekoodi:

public static int Add(int a, int b)
{
    return a + b;
}

Roslynin generoima CIL-tavukoodi:

.method public static int32 Add(int32 a, int32 b) cil managed
{
  .maxstack 2

  ldarg.0   // lataa a pinolle
  ldarg.1   // lataa b pinolle
  add       // laske a + b
  ret       // palauta tulos
}

Tämä esimerkki kuvaa CIL:n pinoon perustuvaa toimintaa: operandit ladataan pinoon (ldarg), operaatio suoritetaan (add) ja tulos palautetaan (ret). Esimerkin rakenne vastaa ECMA-335-standardin Partition III:ssa esiteltyjä aritmeettisia käskyjä.[1]

  1. a b c d e f g Standard ECMA-335: Common Language Infrastructure (CLI), Partition I: Architecture Ecma International. Viitattu 8.12.2025.
  2. a b c Managed execution process Microsoft Learn. Viitattu 8.12.2025.
  3. Language independence and language-independent components Microsoft Learn. Viitattu 8.12.2025.
  4. Native AOT deployment overview Microsoft Learn. Viitattu 8.12.2025.

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]