<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.multimediaexpo.cz/mmecz/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Common_Intermediate_Language</id>
		<title>Common Intermediate Language - Historie editací</title>
		<link rel="self" type="application/atom+xml" href="http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Common_Intermediate_Language"/>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Common_Intermediate_Language&amp;action=history"/>
		<updated>2026-05-01T18:13:52Z</updated>
		<subtitle>Historie editací této stránky</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Common_Intermediate_Language&amp;diff=624486&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Common_Intermediate_Language&amp;diff=624486&amp;oldid=prev"/>
				<updated>2014-04-25T11:49:04Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 25. 4. 2014, 11:49&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Common_Intermediate_Language&amp;diff=624485&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Common_Intermediate_Language&amp;diff=624485&amp;oldid=prev"/>
				<updated>2010-10-21T17:20:18Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''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]]. 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]] ({{Vjazyce2|en|''stack-based''}}). Prováděn je prostřednictvím [[Virtuální stroj|virtuálního stroje]].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Základní informace ==&lt;br /&gt;
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]], 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.&lt;br /&gt;
&lt;br /&gt;
Proces spuštění vypadá takto:&lt;br /&gt;
&lt;br /&gt;
# Zdrojový kód je převeden do Common Intermediate Language, CLI ekvivalent k nižším programovacím jazykům pro CPU.&lt;br /&gt;
# CIL je pak převeden do byte-kódu a je vytvořeno .NET assembly.&lt;br /&gt;
# Po provedení .NET assembly, jeho byte kód projde skrz provozní JIT kompilátor, aby generoval nativní kód.&lt;br /&gt;
# Nativní kód je zpracováván pomocí procesoru.&lt;br /&gt;
&lt;br /&gt;
== Instrukce ==&lt;br /&gt;
&lt;br /&gt;
CIL bytecode má instrukce pro následující skupiny úloh:&lt;br /&gt;
&lt;br /&gt;
* Načítání a ukládání&lt;br /&gt;
* Aritmetické&lt;br /&gt;
* Typ konverze&lt;br /&gt;
* Vytváření objektů a manipulaci s nimi&lt;br /&gt;
* Operand managementu zásobníku (push / pop)&lt;br /&gt;
* Kontrola převodu (větvení - Branching)&lt;br /&gt;
* Volání metod &lt;br /&gt;
* Vyhazování výjimky&lt;br /&gt;
* Synchronizace&lt;br /&gt;
&lt;br /&gt;
== Výpočetní model ==&lt;br /&gt;
&lt;br /&gt;
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 ukládána z registrů do zásobníku místo toho, aby byla odkládána do paměti jako ve většině [[Architektura procesoru|CPU architektur]].&lt;br /&gt;
&lt;br /&gt;
V architektuře [[x86]] by to mohlo vypadat následovně:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=asm&amp;gt;&lt;br /&gt;
add eax, edx&lt;br /&gt;
mov ecx, eax&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpovídající kód v CIL by mohl vypadat takto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cil&amp;quot;&amp;gt;&lt;br /&gt;
ldloc.0&lt;br /&gt;
ldloc.1&lt;br /&gt;
add&lt;br /&gt;
stloc.0    // a = a + b or a += b;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V programu jsou použity dvě lokálně proměnné, které jsou přesunuty do fronty. Když je přidaná instrukce zavolána, operand je ze zásobníku vyzvednut a výsledek je na něj obratem uložen. Hodnota je pak vyzvednuta a uložena jako první lokální proměnná.&lt;br /&gt;
&lt;br /&gt;
=== Objektově-orientované koncepty ===&lt;br /&gt;
V objektově-orientovaném konceptu můž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ě. &lt;br /&gt;
&lt;br /&gt;
Příklad statické metody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cil&amp;quot;&amp;gt;&lt;br /&gt;
.class public Foo&lt;br /&gt;
 {&lt;br /&gt;
     .method public static int32 Add(int32, int32) cil managed&lt;br /&gt;
     {&lt;br /&gt;
          .maxstack 2&lt;br /&gt;
          .locals init (&lt;br /&gt;
              [0] int32 num1,&lt;br /&gt;
              [1] int32 num2&lt;br /&gt;
          )&lt;br /&gt;
 &lt;br /&gt;
          ldloc.0&lt;br /&gt;
          ldloc.1&lt;br /&gt;
          add&lt;br /&gt;
          stloc.0    // a = a + b or a += b;&lt;br /&gt;
          ret        // return a;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Použitá metoda nevyžaduje žádnou deklaraci instance třídy Foo, protože je statická. To znamená, že náleží do třídy a může být následně použita jako v tomto případě v C#.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
int r = Foo.Add(2, 3);    //5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V CIL&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cil&amp;quot;&amp;gt;&lt;br /&gt;
ldc.i4.2&lt;br /&gt;
ldc.i4.3&lt;br /&gt;
call int32 Foo::Add(int32, int32)&lt;br /&gt;
stloc.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Instance tříd ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cil&amp;quot;&amp;gt;&lt;br /&gt;
.class public Car&lt;br /&gt;
 {&lt;br /&gt;
     .method public specialname rtspecialname&lt;br /&gt;
         instance void .ctor(int32, int32) cil managed&lt;br /&gt;
     {&lt;br /&gt;
         /* Constructor */&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     .method public void Move(int32) cil managed&lt;br /&gt;
     {&lt;br /&gt;
         /* Omitting implementation */&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     .method public void TurnRight() cil managed&lt;br /&gt;
     {&lt;br /&gt;
         /* Omitting implementation */&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     .method public void TurnLeft() cil managed&lt;br /&gt;
     {&lt;br /&gt;
         /* Omitting implementation */&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     .method public void Break() cil managed&lt;br /&gt;
     {&lt;br /&gt;
         /* Omitting implementation */&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Vytváření objektů ====&lt;br /&gt;
&lt;br /&gt;
Instance tříd jsou v [[C sharp|C#]] vytvářeny následujícím způsobem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
Car myCar = new Car(1, 4); &lt;br /&gt;
Car yourCar = new Car(1, 3);&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příkazy jsou přibližně stejné jako tyto instrukce:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cil&amp;quot;&amp;gt;&lt;br /&gt;
ldc.i4.1&lt;br /&gt;
ldc.i4.4&lt;br /&gt;
newobj instance void Car::.ctor(int, int)&lt;br /&gt;
stloc.0    // myCar = new Car(1, 4);&lt;br /&gt;
ldc.i4.1&lt;br /&gt;
ldc.i4.3&lt;br /&gt;
newobj instance void Car::.ctor(int, int)&lt;br /&gt;
stloc.1    // yourCar = new Car(1, 3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Vyvolání metody instance ====&lt;br /&gt;
&lt;br /&gt;
Například metody jsou volány následovně:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
myCar.Move(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V CIL&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cil&amp;quot;&amp;gt;&lt;br /&gt;
ldloc.0    // Load the object &amp;quot;myCar&amp;quot; on the stack&lt;br /&gt;
ldc.i4.3&lt;br /&gt;
call instance void Car::Move(int32)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Metadata ===&lt;br /&gt;
&lt;br /&gt;
.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.&lt;br /&gt;
&lt;br /&gt;
== Příklad ==&lt;br /&gt;
&lt;br /&gt;
Příklad je napsán v CIL a demonstruje kód „Hello, World“:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cil&amp;quot;&amp;gt;&lt;br /&gt;
.assembly Hello {}&lt;br /&gt;
.assembly extern mscorlib {}&lt;br /&gt;
.method static void Main()&lt;br /&gt;
{&lt;br /&gt;
     .entrypoint&lt;br /&gt;
     .maxstack 1&lt;br /&gt;
     ldstr &amp;quot;Hello, world!&amp;quot;&lt;br /&gt;
     call void [mscorlib]System.Console::WriteLine(string)&lt;br /&gt;
     ret&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tento kód může být porovnán s odpovídajícím kódem [[Java Bytecode]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
static void Main(string[] args)&lt;br /&gt;
{&lt;br /&gt;
outer:&lt;br /&gt;
    for (int i = 2; i &amp;lt; 1000; i++)&lt;br /&gt;
    {&lt;br /&gt;
         for (int j = 2; j &amp;lt; i; j++)&lt;br /&gt;
         {&lt;br /&gt;
              if (i % j == 0)&lt;br /&gt;
                   goto outer;&lt;br /&gt;
         }&lt;br /&gt;
         Console.WriteLine(i);&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V CIL-syntaxi by zápis vypadal následovně:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cil&amp;quot;&amp;gt;&lt;br /&gt;
.method private hidebysig static void Main(string[] args) cil managed&lt;br /&gt;
  {&lt;br /&gt;
    .entrypoint&lt;br /&gt;
    .maxstack  2&lt;br /&gt;
    .locals init (int32 V_0,&lt;br /&gt;
                  int32 V_1)&lt;br /&gt;
 &lt;br /&gt;
    IL_0000:  ldc.i4.2&lt;br /&gt;
              stloc.0&lt;br /&gt;
              br.s       IL_001f&lt;br /&gt;
    IL_0004:  ldc.i4.2&lt;br /&gt;
              stloc.1&lt;br /&gt;
              br.s       IL_0011&lt;br /&gt;
    IL_0008:  ldloc.0&lt;br /&gt;
              ldloc.1&lt;br /&gt;
              rem&lt;br /&gt;
              brfalse.s  IL_0000&lt;br /&gt;
              ldloc.1&lt;br /&gt;
              ldc.i4.1&lt;br /&gt;
              add&lt;br /&gt;
              stloc.1&lt;br /&gt;
    IL_0011:  ldloc.1&lt;br /&gt;
              ldloc.0&lt;br /&gt;
              blt.s      IL_0008&lt;br /&gt;
              ldloc.0&lt;br /&gt;
              call       void [mscorlib]System.Console::WriteLine(int32)&lt;br /&gt;
              ldloc.0&lt;br /&gt;
              ldc.i4.1&lt;br /&gt;
              add&lt;br /&gt;
              stloc.0&lt;br /&gt;
    IL_001f:  ldloc.0&lt;br /&gt;
              ldc.i4     0x3e8&lt;br /&gt;
              blt.s      IL_0004&lt;br /&gt;
              ret&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výš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).&lt;br /&gt;
&lt;br /&gt;
== Vývoj ==&lt;br /&gt;
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ý.&lt;br /&gt;
&lt;br /&gt;
== Kompilace just-in-time ==&lt;br /&gt;
&lt;br /&gt;
Kompilace [[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í.&lt;br /&gt;
&lt;br /&gt;
== Externí odkazy ==&lt;br /&gt;
* [http://www.ecma-international.org/publications/standards/Ecma-335.htm Common Language Infrastructure (Standard ECMA-335)]&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/netframework/aa569283.aspx “ECMA C# and Common Language Infrastructure Standards” on MSDN]&lt;br /&gt;
* [[wikibooks:Transwiki:List_of_hello_world_programs#CIL|Hello world program in CIL]]&lt;br /&gt;
* [http://weblogs.asp.net/kennykerr/archive/2004/09/07/introduction-to-msil-part-1-hello-world.aspx Kenny Kerr's intro to CIL (called MSIL in the tutorial)]&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/magazine/cc163808.aspx Speed: NGen Revs Up Your Performance With Powerful New Features -- MSDN Magazine, April 2005]&lt;br /&gt;
* http://en.csharp-online.net/CIL_Instruction_Set&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Článek z Wikipedie}} [[Kategorie:Počítačové jazyky]]&lt;br /&gt;
[[Kategorie:.NET]]&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	</feed>