Common Intermediate Language: Porovnání verzí

Smazaný obsah Přidaný obsah
JAnDbot (diskuse | příspěvky)
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 "sil"„sil“, případně "kil")„kil“, (dříve '''Microsoft Intermediate Language''' nebo, '''MSIL''') je v [[Informatika (počítačová věda)|informatice]] 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)|zásobníkového typu]] ({{Vjazyce2|en|''stack-based]]''}}). Prováděn je prostřednictvím [[Virtuální stroj|virtuálního stroje]].
{{pravopis|pozůstatky mechanického překladu z angličtiny}}
'''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) během uvolňování beta .NET jazyků. Vzhledem ke standardizaci [[C Sharp|C#]] a [[Common Language Infrastructure]] je byte-kód oficiálněnově známýa jako CIL. Na základě tohoto odkazu, je stále ještě CILoficiálně označován jako MSIL, především od dlouhodobých uživatelů [[.NET]] jazykůCIL.
 
== Základní informace ==
Při kompilování [[.NET]] programovacích jazyků, je zdrojový kód přeložen do CIL kódu, spíše(nepoužívá nežse do[[Počítačová platformyplatforma|platformně]] nebo do výpočetně-specifického objektovéhospecifický kóduobjektový 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]], které pracuje pod operačními systémy jako [[Linux]] či [[Unix]]). CIL kód je ověřenza běhu ověřován z hlediska bezpečnosti „za běhu“, kterýa proto poskytuje lepší zabezpečení a spolehlivost, než nativně kompilované binární soubory.
 
'''Proces spuštění vypadá takto:'''
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.
 
1.# Zdrojový kód je převeden do Common Intermediate Language, CLI ekvivalent k nižším programovacím jazykům pro CPU.<br />
'''Proces spuštění vypadá takto:'''
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 />
1. Zdrojový kód je převeden do Common Intermediate Language, CLI ekvivalent k nižším programovacím jazykům pro CPU.<br />
4.# Nativní kód je zpracováván pomocí procesoru.
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 tlačenaukládána z registrů do zásobníku místo toho, aby byla vytahovánaodkládána do z registrů,paměti jako ve většině [[Architektura procesoru|CPU architektur]].
 
V architektuře [[x86]] by to mohlo vypadat následovně:<br />
 
<source lang=asm>
<code>
add eax, edx<br />
mov ecx, eax<br /></code>
</source>
 
Odpovídající kód v ILCIL můžeby býtmohl vyjádřenvypadat jako tentotakto:
 
<source lang="cil">
Řádek 48 ⟶ 47:
</source>
 
ZdeV programu jsou použity dvě lokálně proměnné, které sejsou přesunoupřesunuty do fronty. Když je přidaná instrukce zavolána, operand je vyhozenze zásobníku vyzvednut a výsledek je posunutna Zbývajícíněj obratem uložen. hodnotaHodnota je pak vyhozenavyzvednuta a uložena jako první lokální proměnná.
 
=== Objektově-orientované koncepty ===
Toto se vztahuje rovněž naV objektově-orientovanéorientovaném koncepty.konceptu Můžetemůžete vytvářet objekty, volat metody a používat další typy členů, jako jsou například pole. CIL je navržen jako objektově orientovaný a všechny metody (až na výjimky) musí být obsažené v příslušné třídě.
 
CIL je dizajnován jako objektově orientovaný a všechny metody (až na výjimky) musí být obsažené v příslušné třídě.
 
Příklad statické metody:
Řádek 77 ⟶ 74:
</source>
 
TatoPoužitá metoda nevyžaduje žádnou deklaraci instance třídy Foo, protože je statická. To znamená, zeže náleží do třídy a může být následně použitpoužita jako v tomto případě v C#.
 
<source lang="csharp">
Řádek 90 ⟶ 87:
</source>
 
'''==== Instance tříd''' ====
 
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>
 
'''==== Vytváření objektů''' ====
 
Instance tříd jsou v [[C sharp|C#]] jsou vytvářeny následujícím způsobem:
 
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">
 
A ty to příkazyPříkazy jsou přibližně stejné jako tyto instrukce:
 
<source lang="cil">
ldc.i4.1
Řádek 144:
</source>
 
'''==== Vyvolání metody instance''' ====
 
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.
 
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 níže je napsán v CIL a demonstruje kód „Hello, World“.:
 
<source lang="cil">
.assembly Hello {}
Řádek 178 ⟶ 179:
</source>
 
''Tento kód může být porovnán s odpovídajícím kódem [[Java Bytecode]].'':
 
<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>
 
TotoVýše je správná reprezentace toho, jak vypadá CIL blízko VM úrovně. Když jsou zkompilované metody uloženy v tabulkách a instrukce zase v bytech uvnitř assembly, který je přenosně spustitelným souborem (Portable Executable-file). <br />
 
== 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ý.
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ý.<br />
 
== VykonáváníKompilace kompilacejust-in-time ==
 
JustKompilace [[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 />
'''Kompilování ([[just-in-time]])'''
<br />
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 ==