Common Intermediate Language: Porovnání verzí

Smazaný obsah Přidaný obsah
Rubinbot (diskuse | příspěvky)
m r2.5.4) (Robot: Upravuji zh:通用中间语言
G3robot (diskuse | příspěvky)
m komprese kódu, substituce šablony vjazyce2
Řádek 1:
'''Common Intermediate Language''' ('''CIL''', vyslovováno jako „sil“, případně „kil“, dříve '''Microsoft Intermediate Language''', '''MSIL''') je v [[Informatika (počítačová věda)|informatice]] nejnižší člověkem čitelný programovací jazyk definovaný specifikací [[Common Language Infrastructure]] používaný projekty [[.NET Framework]] a [[Mono (platforma)|Mono]]. Jazyky, které se zaměřují na CLI kompatibilní prostředí, jsou sestavovány do byte kódu ([[Bytecode]]). CIL patří mezi objektově orientované jazyky výhradně [[Zásobník (datová struktura)|zásobníkového typu]] ({{Vjazyce2Vjazyce|en}} {{Cizojazyčně|en|''stack-based''}}). Prováděn je prostřednictvím [[Virtuální stroj|virtuálního stroje]].
 
CIL byl původně během uvolňování beta .NET jazyků znám jako Microsoft Intermediate Language (MSIL). Vzhledem ke standardizaci [[C Sharp|C#]] a [[Common Language Infrastructure]] je byte-kód nově a oficiálně označován jako CIL.
 
== Základní informace ==
Při kompilování [[.NET]] programovacích jazyků je zdrojový kód přeložen do CIL kódu (nepoužívá se [[Počítačová platforma|platformně]] nebo do výpočetně specifický objektový kód). CIL je procesorově a zároveň platformě nezávislý soubor instrukcí, které mohou být realizovány v jakémkoli prostředí podporující [[Common Language Infrastructure]] (může se jednat buď o [[.NET]] runtime pro operační systém Microsoft Windows, nebo samostatně odvozené [[Mono (platforma)|Mono]], které pracuje pod operačními systémy jako [[Linux]] či [[Unix]]). CIL kód je za běhu ověřován z hlediska bezpečnosti, a proto poskytuje lepší zabezpečení a spolehlivost, než nativně kompilované binární soubory.
 
Proces spuštění vypadá takto:
Řádek 44:
ldloc.1
add
stloc.0 // a = a + b or a += b;
</source>
 
Řádek 57:
.class public Foo
{
.method public static int32 Add(int32, int32) cil managed
{
{
.maxstack 2
.locals init (
[0] int32 num1,
[1] int32 num2
)
)
ldloc.0
ldloc.1
add
stloc.0 // a = a + b or a += b;
ret // return a;
}
}
}
</source>
Řádek 77:
 
<source lang="csharp">
int r = Foo.Add(2, 3); //5
</source>
V CIL
Řádek 94:
.class public Car
{
.method public specialname rtspecialname
instance void .ctor(int32, int32) cil managed
{
{
/* Constructor */
}
}
.method public void Move(int32) cil managed
{
{
/* Omitting implementation */
}
}
.method public void TurnRight() cil managed
{
{
/* Omitting implementation */
}
}
.method public void TurnLeft() cil managed
{
{
/* Omitting implementation */
}
}
.method public void Break() cil managed
{
{
/* Omitting implementation */
}
}
}
</source>
Řádek 137:
ldc.i4.4
newobj instance void Car::.ctor(int, int)
stloc.0 // myCar = new Car(1, 4);
ldc.i4.1
ldc.i4.3
newobj instance void Car::.ctor(int, int)
stloc.1 // yourCar = new Car(1, 3);
</source>
 
Řádek 153:
V CIL
<source lang="cil">
ldloc.0 // Load the object "myCar" on the stack
ldc.i4.3
call instance void Car::Move(int32)
Řádek 171:
.method static void Main()
{
.entrypoint
.maxstack 1
ldstr "Hello, world!"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
</source>
Řádek 185:
{
outer:
for (int i = 2; i < 1000; i++)
{
{
for (int j = 2; j < i; j++)
{
{
if (i % j == 0)
goto outer;
}
}
Console.WriteLine(i);
}
}
}
</source>
Řádek 201:
<source lang="cil">
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 2
.locals init (int32 V_0,
int32 V_1)
IL_0000: ldc.i4.2
stloc.0
br.s IL_001f
IL_0004: ldc.i4.2
stloc.1
br.s IL_0011
IL_0008: ldloc.0
ldloc.1
rem
rem
brfalse.s IL_0000
ldloc.1
ldc.i4.1
add
add
stloc.1
IL_0011: ldloc.1
ldloc.0
blt.s IL_0008
ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
ldloc.0
ldc.i4.1
add
add
stloc.0
IL_001f: ldloc.0
ldc.i4 0x3e8
blt.s IL_0004
ret
ret
}
</source>
 
Řádek 245:
== Kompilace just-in-time ==
 
Kompilace [[just-in-time]] kompilace zahrnuje vrácení byte-kódu do kódu, který je okamžitě vykonatelný pomocí [[Procesor|CPU]]. Konverze je prováděna postupně v průběhu vykonávání programu. JIT kompilace nabízí specifické optimalizace daného prostředí a ověření assembly. K dosažení tohoto, JIT kompilátor zkoumá nashromážděná metadata pro nezákonné přístupy a ovládá přiměřeně rušení.
 
== Externí odkazy ==