Vanligt mellanspråk

Common Intermediate Language ( CIL för kort ) är "högnivåmonteraren" för den virtuella .NET -maskinen . Ett mellanspråk utvecklat av Microsoft för .NET Framework . CIL JIT- kompilatorn är en del av CLR ( common  linguage r untime ) , en vanlig exekveringsmiljö för program skrivna på .NET-språk . Språket hette tidigare " Microsoft Intermediate Language (MSIL) ", men döptes om för att skapa standarden "ECMA-335".

Alla kompilatorer som stöder .NET -plattformen måste översätta kod från .NET-plattformens högnivåspråk till CIL. I synnerhet genereras CIL-kod av alla Microsoft .NET-kompilatorer som ingår i Microsoft Visual Studios utvecklingsmiljö ( C# , Managed C++ , Visual Basic .NET , Visual J# .NET ).

CIL liknar assemblerspråk i syntax och mnemonics . Det kan ses som en .NET virtuell maskin assembler. Samtidigt innehåller CIL-språket några konstruktioner på ganska hög nivå som höjer det över nivån för assembler för vilken riktig maskin som helst, och det är lättare att skriva kod direkt i CIL än i assembler för riktiga maskiner. Därför kan CIL betraktas som en sorts "högnivåmontör".

CIL-språket kallas också ofta helt enkelt för IL från engelska.  i nmellanspråk - bokstavligen  "mellanspråk".

CIL-språkets syntax och minnesminne beskrivs av ECMA-335-standarden. CIL-specifikationen är en integrerad del av en mer allmän specifikation - CLI - specifikationen ( engelsk  gemensam språk i nfrastructure ) .

Exempelkod

Följande program är skrivet i CIL och matar ut strängen " Hej, värld !".

.assembly Hej {} .method public static void Main() cil managed { .inkörsport .maxstack 1 ldstr "Hej världen!" call void [mscorlib]System.Console::WriteLine(string) röta }

Följande program är skrivet i C# .

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

Tänk på CIL-koden som C# -koden ovan kompileras till.

.assembly primtal{} .method privat hidebysig static void Main(string[] args) cil managed { .inkörsport .max stack 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 Lägg till 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 Lägg till stloc.0 //v_0+=1 IL_001f: ldloc.0 ldc.i4 0x3e8 blt.s IL_0004 //if v_0<=1000 röta }

Microsoft Visual Studio IDE kommer med ett verktyg som låter dig se CIL-kod. som standard är det installerat i mappen " C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools " (den exakta sökvägen beror på bitheten hos operativsystemet och versionen av .NET Framework ). ildasmildasm