Közös középfokú nyelv

A Common Intermediate Language ( röviden CIL ) a .NET virtuális gép "magas szintű összeszerelője" . A Microsoft által a .NET-keretrendszerhez kifejlesztett köztes nyelv . A CIL JIT fordító a CLR ( c ommon  l Anguage r untime ) része, amely a .NET nyelveken írt programok közös végrehajtási környezete . A nyelvet korábban " Microsoft Intermediate Language (MSIL) "-nek hívták, de átnevezték az "ECMA-335" szabvány létrehozására.

Minden .NET platformot támogató fordítónak le kell fordítania a kódot a .NET platform magas szintű nyelveiről CIL-re. A CIL kódot a Microsoft Visual Studio fejlesztői környezetében található összes Microsoft .NET fordító generálja ( C# , Managed C++ , Visual Basic .NET , Visual J# .NET ).

A CIL szintaxisban és mnemonikában hasonlít az assembly nyelvre . Felfogható egy .NET virtuális gép összeszerelőnek. Ugyanakkor a CIL nyelv tartalmaz néhány meglehetősen magas szintű konstrukciót, amelyek bármely valós gép esetén az assembler szintje fölé emelik, és könnyebb közvetlenül CIL-ben kódot írni, mint valódi gépeknél assemblerben. Ezért a CIL egyfajta "magas szintű assemblernek" tekinthető.

A CIL nyelvet gyakran egyszerűen IL-nek is nevezik az angolból.  i ntermediate l anguage  - szó szerint "köztes nyelv".

A CIL nyelv szintaxisát és mnemonikáját az ECMA-335 szabvány írja le. A CIL specifikáció egy általánosabb specifikáció – a CLI specifikáció ( angol  c ommon l anguage i nfrastructure ) – szerves része.

Mintakód

A következő program CIL-ben íródott, és a " Hello, world !" karakterláncot adja ki.

.assembly Szia {} .method public static void Main() cil kezelve { .belépési pont .maxstack 1 ldstr "Szia, világ!" call void [mscorlib]System.Console::WriteLine(string) ret }

A következő program C# nyelven íródott .

static void Main ( string [ ] args ) { for ( int i = 2 ; i < 1000 ; i ++ ) { for ( int j = 2 ; j < i ; j ++ ) { if ( i % j == 0 ) ) külső ; _ } Konzol . WriteLine ( i ); külső :; } }

Tekintsük azt a CIL kódot, amelyre a fenti C# kód fordít.

.assembly prímszámok{} .method private hidebysig static void Main(string[] args) cil kezelve { .belépési pont .max verem 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 add hozzá 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 add hozzá stloc.0 //v_0+=1 IL_001f: ldloc.0 ldc.i4 0x3e8 blt.s IL_0004 //if v_0<=1000 ret }

A Microsoft Visual Studio IDE egy segédprogramot tartalmaz , amely lehetővé teszi a CIL-kódok megtekintését. alapértelmezés szerint a " C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools " mappába van telepítve (a pontos elérési út az operációs rendszer bitjétől és a a .NET-keretrendszer ). ildasmildasm