Yhteinen välikieli

Common Intermediate Language ( lyhyesti CIL ) on .NET - virtuaalikoneen "korkean tason kokoaja" . Microsoftin .NET Frameworkille kehittämä välikieli . CIL JIT -kääntäjä on osa CLR :ää ( c ommon  l Anguage r untime ), joka on yleinen suoritusympäristö .NET-kielillä kirjoitetuille ohjelmille . Kieltä kutsuttiin aiemmin nimellä " Microsoft Intermediate Language (MSIL) ", mutta se nimettiin uudelleen "ECMA-335"-standardin luomiseksi.

Kaikkien .NET -alustaa tukevien kääntäjien on käännettävä koodi .NET-alustan korkean tason kielistä CIL:iin. Erityisesti CIL-koodin luovat kaikki Microsoft Visual Studio -kehitysympäristöön sisältyvät Microsoft .NET -kääntäjät ( C# , Managed C++ , Visual Basic .NET , Visual J# .NET ).

CIL muistuttaa kokoonpanokieltä syntaksissa ja muistotekniikassa . Sitä voidaan pitää .NET-virtuaalikoneen kokoajana. Samaan aikaan CIL-kieli sisältää melko korkean tason rakenteita, jotka nostavat sen minkä tahansa oikean koneen assemblerin tason yläpuolelle, ja koodia on helpompi kirjoittaa suoraan CIL:iin kuin oikeiden koneiden assemblerissä. Siksi CIL:ää voidaan pitää eräänlaisena "korkean tason kokoajana".

CIL-kieltä kutsutaan usein myös yksinkertaisesti IL:ksi englannista.  i ntermediate l anguage  - kirjaimellisesti "välikieli".

CIL-kielen syntaksi ja muistomerkit kuvataan ECMA-335-standardissa. CIL-spesifikaatio on olennainen osa yleisempää spesifikaatiota - CLI -spesifikaatiota ( englanniksi  c ommon l anguage i nfrastructure ).

Esimerkkikoodi

Seuraava ohjelma on kirjoitettu CIL-kielellä ja tulostaa merkkijonon " Hei, maailma !".

.assembly Hei {} .method public static void Main() cil hallinnoitu { .sisääntulopiste .maxstack 1 ldstr "Hei, maailma!" call void [mscorlib]System.Console::WriteLine(merkkijono) ret }

Seuraava ohjelma on kirjoitettu C# :lla .

static void Main ( merkkijono [ ] args ) { for ( int i = 2 ; i < 1000 ; i ++ ) { for ( int j = 2 ; j < i ; j ++ ) { if ( i % j == 0 ) ) meni ulospäin ; } Konsoli . WriteLine ( i ); ulompi :; } }

Harkitse CIL-koodia, johon yllä oleva C# -koodi käännetään.

.assembly primes{} .method yksityinen hidebysig static void Main(string[] args) cil hallinnoitu { .sisääntulopiste .max pino 2 .locals init(int32 V_0, int32 V_1) ldc.i4.2 stloc.0 // v_0=2 br.s IL_001f IL_0004: ldc.i4.2 stloc.1 // v_1=2 br.s IL_0011 IL_0008: ldloc.0 // V_0 ldloc.1 // V_1 rem // V_0 % V_1 brfalse.s IL_001b ldloc.1 //v_1 ldc.i4.1 lisätä stloc.1 // v_1+=1 IL_0011: ldloc.1 //jos v_1<=v_0 ldloc.0 blt.s IL_0008 ldloc.0 call void [mscorlib]System.Console::WriteLine(int32) IL_001b: ldloc.0 //v_0 ldc.i4.1 lisätä stloc.0 //v_0+=1 IL_001f: ldloc.0 ldc.i4 0x3e8 blt.s IL_0004 //jos v_0<=1000 ret }

Microsoft Visual Studio IDE : n mukana tulee apuohjelma , jonka avulla voit tarkastella CIL-koodia. oletusarvoisesti se asennetaan kansioon " C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools " (tarkka polku riippuu käyttöjärjestelmän bittimäärästä ja versiosta .NET Framework ) .ildasmildasm