Fælles mellemsprog

Common Intermediate Language ( CIL for kort ) er "høj-niveau assembler" af den virtuelle .NET -maskine . Et mellemsprog udviklet af Microsoft til .NET Framework . CIL JIT - kompilatoren er en del af CLR ( common linguage  r untime ) , et almindeligt eksekveringsmiljø for programmer skrevet på .NET-sprog . Sproget hed tidligere " Microsoft Intermediate Language (MSIL) ", men blev omdøbt til at skabe "ECMA-335"-standarden.

Alle compilere , der understøtter .NET -platformen , skal oversætte kode fra .NET -platformens højniveausprog til CIL. Især CIL-kode genereres af alle Microsoft .NET-kompilere, der er inkluderet i Microsoft Visual Studio - udviklingsmiljøet ( C# , Managed C++ , Visual Basic .NET , Visual J# .NET ).

CIL ligner assemblersprog i syntaks og mnemonics . Det kan opfattes som en .NET virtuel maskinsamler. Samtidig indeholder CIL-sproget nogle konstruktioner på et ret højt niveau, der hæver det over niveauet for assembler for enhver rigtig maskine, og det er lettere at skrive kode direkte i CIL end i assembler til rigtige maskiner. Derfor kan CIL betragtes som en slags "high-level assembler".

CIL-sproget omtales også ofte blot som IL fra engelsk.  i mellemsprog - bogstaveligt talt " mellemsprog  ".

CIL-sprogets syntaks og mnemonics er beskrevet af ECMA-335-standarden. CIL-specifikationen er en integreret del af en mere generel specifikation - CLI - specifikationen ( engelsk  fællessprog i nfrastructure ) .

Eksempelkode

Følgende program er skrevet i CIL og udsender strengen " Hej, verden !".

.assembly Hej {} .method public static void Main() cil managed { .indgang .maxstack 1 ldstr "Hej verden!" call void [mscorlib]System.Console::WriteLine(string) ret }

Følgende program er skrevet i C# .

static void Main ( string [] args ) { for ( int i = 2 ; i < 1000 ; i ++ ) { for ( int j = 2 ; j < i ; j ++ ) { if ( i % j == 0 ) goto ydre ; } Konsol . WriteLine ( i ); ydre :; } }

Overvej CIL-koden, som C# -koden ovenfor kompilerer til.

.assembly primtal{} .method private hidebysig statisk void Main(streng[] args) cil managed { .indgang .max stak 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 tilføje stloc.1 // v_1+=1 IL_0011: ldloc.1 //if 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 tilføje stloc.0 //v_0+=1 IL_001f: ldloc.0 ldc.i4 0x3e8 blt.s IL_0004 //if v_0<=1000 ret }

Microsoft Visual Studio IDE leveres med et hjælpeprogram , der giver dig mulighed for at se CIL-kode. som standard er det installeret i mappen " C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools " (den nøjagtige sti afhænger af OS'ets bithed og versionen af .NET Framework ) .ildasmildasm