「共通中間言語」の版間の差分

imported>Administrator
編集の要約なし
imported>Administrator
編集の要約なし
1行目: 1行目:
'''共通中間言語'''(きょうつうちゅうかんげんご、'''C'''ommon '''I'''ntermediate '''L'''anguage、'''CIL''')とは、[[Mono]]および[[.NET Framework]]で用いられる[[アセンブリ言語]]、および[[共通言語基盤]]([[CLI]]、[[.NET]]の[[仮想マシン]])が理解できる架空の[[機械語]]のことである。.NET Frameworkがベータ版だったころまでは「'''M'''icro'''s'''oft '''I'''ntermediate '''L'''anguage」('''MSIL''')として知られており、今なおMSILと呼ぶひとは多い。
'''共通中間言語'''(きょうつうちゅうかんげんご、'''C'''ommon '''I'''ntermediate '''L'''anguage、'''CIL''')とは、[[Mono]]および[[.NET Framework]]で用いられる[[アセンブリ言語]]、および[[共通言語基盤]]([[CLI]]、[[.NET]]の[[仮想マシン]])が理解できる架空の[[機械語]]のことである。.NET Frameworkがベータ版だったころまでは「'''M'''icro'''s'''oft '''I'''ntermediate '''L'''anguage」('''MSIL''')として知られており、今なおMSILと呼ぶひとは多い。


一般的に「[[中間言語]]」と言えばバイナリ形式だが、「共通中間言語」という言葉自体は、[[アセンブリ言語]]([[テキスト]])としての意味も、[[マシン語]]([[バイナリ]])としての意味もあり、非常に曖昧な表現となっている。どちらを表しているかは文脈から読み取る必要がある。紛らわしいのでバイナリ形式のことを「[[マネージドコード]]」もしくは「[[ピュアマネージドコード]]」と呼ぶひともいる。このページでは[[アセンブリ言語]]としての共通中間言語について記載する。
== コード表現とバイナリイメージ表現 ==
一般的に「[[中間言語]]」と言えばバイナリ形式。
だが「共通中間言語」という言葉自体は、[[アセンブリ言語]]([[テキスト]])としての意味も、[[マシン語]]([[バイナリ]])としての意味もあり、非常に曖昧な表現となっている。どちらを表しているかは文脈から読み取る必要がある。


紛らわしいのでバイナリ形式のことを「[[マネージドコード]]」もしくは「[[ピュアマネージドコード]]」と呼ぶひともいる。
人によっては「CILコード」と「CILイメージ」で使い分けている人もいる。
どれが正解かは知らない。


なお、このページでは主に[[アセンブリ言語]]としての共通中間言語について記載する。


== 概要 ==
CILは、[[オブジェクト指向]]な[[アセンブリ言語]]であり、かつ完全にスタックベースの言語である。
CILは、[[オブジェクト指向]]な[[アセンブリ言語]]であり、かつ完全にスタックベースの言語である。


.NET系の[[プログラミング言語]]で書かれた[[ソースコード]][[コンパイル]]されてCILに変換される。CIL自体はプラットフォームに依存しない(特定CPUに依存しない)命令セットで構成されている。そのためCILは、理論上は直接[[ネイティブコード]]に変換することも([[Mono]]では実験的に可能)、[[.NET Framework]]の[[仮想マシン]]である[[共通言語基盤]]([[CLI]])で実行することもできる。
[[.NET Framework]]系の[[プログラミング言語]]で書かれた[[ソースコード]]は、各種[[コンパイラ]][[コンパイル]]されてCILイメージに変換される。


[[MonoDevelop]]ではこの[[アセンブリ言語]]を使ったプロジェクトを作れる。誰得。
CIL自体は特定のプラットフォームに依存しない(特定CPUに依存しない)命令セットで構成されている。そのため理論上は、直接[[ネイティブコード]]に変換することも([[Mono]]では実験的に可能)、[[.NET Framework]]の[[仮想マシン]]である[[共通言語基盤]]([[CLI]])で実行することもできる。
 
[[MonoDevelop]]では、この[[アセンブリ言語]]を使ったプロジェクトを作れる。
誰得。


== 使用例 ==
== 使用例 ==
CILによる「[[Hello, world]]」[[プログラム]]の例。
CILコードによる「[[Hello, world]]」[[プログラム]]の例。
<source lang="cil">
<source lang="cil">
.method public static void Main() cil managed
// classとかオブジェクト指向な感じだね
.class private auto ansi beforefieldinit AppMain
    extends [mscorlib]System.Object
{
{
     .entrypoint
     // C#みたいな感じでコメントも書けるよ
    .maxstack 1
    .method public static hidebysig
    ldstr "hello, world"
        default void Main(string[] args) cil managed
    call void [mscorlib]System.Console::WriteLine(string)
    {
     ret
        // どうみてもエントリーポイント
        .entrypoint
        .maxstack 8
        ldstr "hello, world"
        call void class [mscorlib]System.Console::WriteLine(string)
        ret
     }
}
}
</source>
</source>