Common Intermediate Language: Porovnání verzí
Smazaný obsah Přidaný obsah
m robot přidal: da, de, es, fa, fr, he, hu, id, it, ja, pl, ru, sv, zh; kosmetické úpravy |
Formulace, -pravopis |
||
Řádek 1:
'''Common Intermediate Language''' ('''CIL''', vyslovováno jako
▲'''Common Intermediate Language''' ('''CIL''', vyslovováno jako "sil", případně "kil") (dříve '''Microsoft Intermediate Language''' nebo '''MSIL''') je nejnižší člověkem čitelný programovací jazyk definovaný specifikací [[Common Language Infrastructure]] a používaný projekty [[.NET Framework]] a [[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íkového typu ([[Zásobník (datová struktura)|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)
== Základní informace ==
Při kompilování [[.NET]] programovacích jazyků
▲Při kompilování [[.NET]] programovacích jazyků, je zdrojový kód přeložen do CIL kódu, spíše než do platformy nebo do výpočetně-specifického objektového kódu. 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]], které pracuje pod operačními systémy jako [[Linux]] či [[Unix]]). CIL kód je ověřen z hlediska bezpečnosti „za běhu“, který poskytuje lepší zabezpečení a spolehlivost, než nativně kompilované binární soubory.
▲'''Proces spuštění vypadá takto:'''
▲1. Zdrojový kód je převeden do Common Intermediate Language, CLI ekvivalent k nižším programovacím jazykům pro CPU.<br />
▲2. CIL je pak převeden do byte-kódu a je vytvořeno .NET assembly.<br />
▲3. Po provedení .NET assembly, jeho byte kód projde skrz provozní JIT kompilátor, aby generoval nativní kód.<br />
▲4. Nativní kód je zpracováván pomocí procesoru.
== Instrukce ==
Řádek 31 ⟶ 29:
== Výpočetní model ==
Common Intermediate Language je považován za objektově orientovaný jazyk zásobníkového typu ([[Zásobník (datová struktura)|stack-based]]). To znamená, že data jsou
V architektuře [[x86]] by to mohlo vypadat následovně:
<source lang=asm>
add eax, edx
mov ecx, eax
</source>
Odpovídající kód v
<source lang="cil">
Řádek 48 ⟶ 47:
</source>
=== Objektově-orientované koncepty ===
Příklad statické metody:
Řádek 77 ⟶ 74:
</source>
<source lang="csharp">
Řádek 90 ⟶ 87:
</source>
Instance třídy obsahuje nejméně jeden [[konstruktor]] a nějaké další členy. Tato třída má sadu metod reprezentujících akce objektu Car.
<source lang="cil">
.class public Car
Řádek 124 ⟶ 122:
</source>
▲Instance tříd v [[C sharp|C#]] jsou vytvářeny následujícím způsobem:
<source lang="csharp">
Car myCar = new Car(1, 4);
Řádek 132 ⟶ 131:
<source lang="csharp">
<source lang="cil">
ldc.i4.1
Řádek 144:
</source>
Například metody jsou volány následovně:
<source lang="csharp">
myCar.Move(3);
Řádek 156 ⟶ 157:
call instance void Car::Move(int32)
</source>
=== Metadata ===
.NET zaznamenává informace o kompilovaných třídách jako [[metadata]]. Proces čtení těchto metadat se nazývá zrcadlení ''(reflection)''. Metadata mohou být data v podobě atributů. Ty mohou být volně rozšířeny o atributy třídy, čímž se stávají velmi silným nástrojem.
== Příklad ==
Příklad
<source lang="cil">
.assembly Hello {}
Řádek 178 ⟶ 179:
</source>
<source lang="csharp">
static void Main(string[] args)
Řádek 196 ⟶ 198:
V CIL-syntaxi by zápis vypadal následovně:
<source lang="cil">
.method private hidebysig static void Main(string[] args) cil managed
Řádek 234 ⟶ 237:
</source>
== Vývoj ==
CIL assembly a instrukce jsou generovány buď kompilátorem nebo nástrojem zvaným jako ''IL Assembler'' (ILASM). Složené IL může být také znovu rozloženo do kódu užitím IL Disassembler (ILDASM). Existují další nástroje jako [[.NET Reflektor]], které umožní dekompilaci IL do jazyků vyšší úrovně (např. C#, [[Visual Basic]]). Tato vlastnost je sdílená s Java bytecode. Ale existují nástroje, které mohou zmást kód, a to tak, že vlastní kód nemůže být rozložen, ale přesto je spustitelný.
==
▲Just-in-time kompilace zahrnuje vrácení byte-kódu do kódu, který je okamžitě vykonatelný pomocí [[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í.<br />
== Externí odkazy ==
|