「共通中間言語」の版間の差分
imported>Administrator |
imported>Administrator 編集の要約なし |
||
| 1行目: | 1行目: | ||
'''共通中間言語'''(きょうつうちゅうかんげんご、'''C'''ommon '''I'''ntermediate '''L'''anguage、'''CIL''')とは、[[Mono]]および[[.NET Framework]]で用いられる[[アセンブリ言語]]に類似した仮想マシン語のことである。.NET Frameworkがベータ版だったころまでは「'''M'''icro'''s'''oft '''I'''ntermediate '''L'''anguage」('''MSIL''')として知られており、今なおMSILと呼ぶひとは多い。 | '''共通中間言語'''(きょうつうちゅうかんげんご、'''C'''ommon '''I'''ntermediate '''L'''anguage、'''CIL''')とは、[[Mono]]および[[.NET Framework]]で用いられる[[アセンブリ言語]]に類似した仮想マシン語のことである。.NET Frameworkがベータ版だったころまでは「'''M'''icro'''s'''oft '''I'''ntermediate '''L'''anguage」('''MSIL''')として知られており、今なおMSILと呼ぶひとは多い。 | ||
一般的に「[[中間言語]]」と言えばバイナリ形式だが、「共通中間言語」という言葉自体は、[[アセンブリ言語]]([[テキスト]])としての意味も、[[マシン語]]([[バイナリ]])としての意味もあり、非常に曖昧な表現となっている。どちらを表しているかは文脈から読み取る必要がある。紛らわしいのでバイナリ形式のことを「[[マネージドコード]]」もしくは「[[ピュアマネージドコード]]」と呼ぶひともいる。 | |||
また、主に[[Java]]から来た人を中心に[[CIL]]のことを[[バイトコード]]と呼ぶこともあるが、CILは命令のバイト表現が多バイトなので、正確には命令は1バイト固定を要求する[[バイトコード]]の定義には当てはまらない。例えるなら[[CPU]]で言えば[[RISC]]と[[CISC]]のような違いのようなものである。ただし、そんな細かいことを気にしても仕方がなく、また大多数の人には意味は伝わるので、よほどの偏屈を相手にする場合を除き、気にする必要はない。 | |||
CILは、[[オブジェクト指向]]な[[アセンブリ言語]]であり、かつ完全にスタックベースの言語である。 | CILは、[[オブジェクト指向]]な[[アセンブリ言語]]であり、かつ完全にスタックベースの言語である。 | ||
.NET系の[[プログラミング言語]]で書かれた[[ソースコード]]は[[コンパイル]]されてCILに変換される。CIL自体はプラットフォームに依存しない(特定CPUに依存しない)命令セットで構成されている。 | .NET系の[[プログラミング言語]]で書かれた[[ソースコード]]は[[コンパイル]]されてCILに変換される。CIL自体はプラットフォームに依存しない(特定CPUに依存しない)命令セットで構成されている。 | ||
そのためCILは、理論上は[[ネイティブコード]]に変換することも(Monoでは実験的に可能)、.NET | そのためCILは、理論上は[[ネイティブコード]]に変換することも(Monoでは実験的に可能)、[[.NET Framework]]の[[仮想マシン]]である[[共通言語基盤]]([[CLR]])で実行することもできる。 | ||
== 使用例 == | == 使用例 == | ||
CILによる「[[Hello, world]] | CILによる「[[Hello, world]]」[[プログラム]]の例。 | ||
<source lang="cil"> | <source lang="cil"> | ||
.method public static void Main() cil managed | .method public static void Main() cil managed | ||