Limbaj intermediar comun

Common Intermediate Language ( pe scurt CIL ) este „asamblatorul de nivel înalt” al mașinii virtuale .NET . Un limbaj intermediar dezvoltat de Microsoft pentru .NET Framework . Compilatorul CIL JIT face parte din CLR ( common language r untime  ), un mediu de execuție comun pentru programele scrise în limbaje .NET . Limbajul a fost numit anterior „ Microsoft Intermediate Language (MSIL) ”, dar a fost redenumit pentru a crea standardul „ECMA-335”.

Toți compilatoarele care acceptă platforma .NET trebuie să traducă codul din limbajele de nivel înalt ale platformei .NET în CIL. În special, codul CIL este generat de toate compilatoarele Microsoft .NET incluse în mediul de dezvoltare Microsoft Visual Studio ( C# , Managed C++ , Visual Basic .NET , Visual J# .NET ).

CIL seamănă cu limbajul de asamblare în sintaxă și mnemonică . Poate fi considerat ca un asamblator de mașini virtuale .NET. În același timp, limbajul CIL conține niște constructe destul de de înalt nivel care îl ridică deasupra nivelului de asamblare pentru orice mașină reală și este mai ușor să scrieți cod direct în CIL decât în ​​asamblare pentru mașini reale. Prin urmare, CIL poate fi considerat un fel de „asamblator de nivel înalt”.

Limba CIL este adesea denumită, de asemenea, simplu IL din engleză.  limbajul intermediar - literalmente „ limbaj  intermediar”.

Sintaxa și mnemonicii limbajului CIL sunt descrise de standardul ECMA-335. Specificația CIL este o parte integrantă a unei specificații mai generale - specificația CLI ( înfrastructură de limbă comună engleză  ) .

Exemplu de cod

Următorul program este scris în CIL și scoate șirul „ Bună ziua, lume !”.

.asamblare Bună ziua {} .method public static void Main() cil gestionat { .punct de intrare .maxstack 1 ldstr "Bună, lume!" apelați void [mscorlib]System.Console::WriteLine(șir) ret }

Următorul program este scris în C# .

static void Principal ( șir [] args ) { for ( int i = 2 ; i < 1000 ; i ++ ) { for ( int j = 2 ; j < i ; j ++ ) { dacă ( i % j == 0 ) goto outer ; } Consolă . WriteLine ( i ); exterior :; } }

Luați în considerare codul CIL la care se compilează codul C# de mai sus.

.asamblare prime{} .method private hidebysig static void Main(string[] args) cil managed { .punct de intrare .stiva maximă 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 adăuga stloc.1 // v_1+=1 IL_0011: ldloc.1 //if v_1<=v_0 ldloc.0 blt.s IL_0008 ldloc.0 apelați void [mscorlib]System.Console::WriteLine(int32) IL_001b: ldloc.0 //v_0 ldc.i4.1 adăuga 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 vine cu un utilitar care vă permite să vizualizați codul CIL . implicit, este instalat în folderul „ C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools ” (calea exactă depinde de bitness -ul sistemului de operare și versiunea de .NET Framework ) .ildasmildasm