ひたすら手打ちでがんばるスレ
MicroSoft Interpreter Language
いい加減MSILって言い方やめれ。
ISO標準のCILだ。
MicroSoft Itte-yoshi Language
インてリジェンッならングウィッジ
6 :
デフォルトの名無しさん:04/09/24 14:38:42
CIL って何の略?
早く誰かHellowolrdの手打ちして
8 :
デフォルトの名無しさん:04/09/24 15:00:04
10 :
デフォルトの名無しさん:04/09/24 15:35:36
なんだよ、ニーモニック直うちのことかよ。
それともハンドアセンブルまでやらせるのかよ。
それはそうと、CILって何の略?
なんだよ、1 は立て逃げかよ
MSIL (Microsoft Intermediate Language)
CLR (Common Language Runtime)
CIL (Common Intermediate Language)
CLI (Common Lanuage Infrastructure)
FCL (Framework Class Library)
IL のコンパイラの作り方でも説明してくれよ
サンプルだけじゃよくわかんねぇよヽ(`Д´)ノ
MFC(Microsoft Foundation Class)
WFC(Windows Foundation Class)
FCT(Football Club Tokyo)
14 :
デフォルトの名無しさん:04/09/24 20:22:01
class hellworld{
public static void Main(){
System.Console.WriteLine("HELL
>>1");
}
}
↓
.class private auto ansi beforefieldinit hellworld
extends [mscorlib]System.Object
{
.method public hidebysig static void Main() cil managed
{
.entrypoint
// コード サイズ 11 (0xb)
.maxstack 1
IL_0000: ldstr "HELL
>>1"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
} // end of method hellworld::Main
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// コード サイズ 7 (0x7)
.maxstack 1
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method hellworld::.ctor
} // end of class hellworld
【Console::WriteLineの実装】
.method public hidebysig static void WriteLine(string 'value') cil managed
{
// コード サイズ 12 (0xc)
.maxstack 8
IL_0000: call class System.IO.TextWriter System.Console::get_Out()
IL_0005: ldarg.0
IL_0006: callvirt instance void System.IO.TextWriter::WriteLine(string)
IL_000b: ret
} // end of method Console::WriteLine
↓
【System.IO.TextWrite】
.method public hidebysig newslot virtual
instance void WriteLine(string 'value') cil managed
{
// コード サイズ 123 (0x7b)
.maxstack 6
.locals (int32 V_0,
int32 V_1,
char[] V_2)
IL_0000: ldarg.1
IL_0001: brtrue.s IL_000a
IL_0003: ldarg.0
IL_0004: callvirt instance void System.IO.TextWriter::WriteLine()
IL_0009: ret
IL_000a: ldarg.1
IL_000b: callvirt instance int32 System.String::get_Length()
IL_0010: stloc.0
IL_0011: ldarg.0
IL_0012: ldfld char[] System.IO.TextWriter::CoreNewLine
IL ディスアセンブラの結果を載せるんじゃなくて、ニーモニック表きぼん
と、言ってみるテスト
>17
Ilasm.exe を使えよ
結局、
>>1 はどこ逝ったのかね
.assembly extern mscorlib {}
.assembly hello {}
.module hello.exe
.class private auto ansi HelloWorld
extends [mscorlib]System.Object
{
.method public hidebysig static void Main() il managed
{
.entrypoint
.maxstack 8
ldstr "Hello CIL to 2ch world!"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
}
むしゃくしゃしてサンプルをほとんどそのまま書いた
hello.il って名前で保存して
ilasm /exe hello.il
ってやると、実行可能な hello.exe ができる
あまり反省していない
>20
thx
IL のキーワード一覧とか見あたらないから、助かった
最近はMSもおとなしくなったな。ちゃんと標準化団体を通して文句を言われないように
するところとか
結局、死亡スレか
だが、実際、MSIL をちまちま書くよりも、.Net Framework のサンプルにあるように一度
C# あたりで書き直して、CSharp.Compiler を使った方が楽なんだよなぁ
23 :
デフォルトの名無しさん:04/10/19 11:19:00
JVMってアセンブラないの?
>23
JVM は Java 以外の言語で動くことは想定していないから、中間コードを必要としない
だから、いったん中間コードで吐いて最適化かけて、ということをしていない
アセンブラがない、っていうのがどういう意味かよくわからないが、Java の コンパイラは
ByteCode を直接出力すればいい。ByteCode のニーモニックについては、自分で
探してや
25 :
デフォルトの名無しさん:04/10/19 21:10:19
>>24 最初のパラグラフは何が言いたいのか良くわからんが、
昔は、JavaコンパイラがはくJava Byte Code自体がいまいちだったので、組み込みの世界ではJava Byte Codeの段階で人手で最適化したりした。
>25
>23 って、Java に MSIL に対応するものがないかって意味じゃないのか?
Java は別にCILで言語間を共通化する必要がないから、直接、ByteCode 出してる
だから JVM にとっての MSIL みたいなものはないぞといってるんだが
CLR では、各言語から IL が出た後に、もう一回、最適化かけてるけど、Java は言語に
依存してるから、最初からちゃんと最適化した ByteCode を出す努力してるだろう?
昔はいまいちだったんだろうけど、Sun もがんばって高速化してるわけだし
最適化云々は置いておくとして、JVMのバイトコード用の
アセンブラとかないの?見たことないんだけど。
Sunが許さないのかな。
>>27 バイトコードアセンブラなら2、3種類ぐらいあったと思うけど。
Shujit あたりからJITコンパイラをぱちくるとか
・・・って、Java スレで聞いた方が親身になって教えてくれると思うぞ
よく考えると、ここは彼らの嫌いなM$すれだからな〜
31 :
デフォルトの名無しさん:04/10/23 01:16:09
>>26 なにを言っているのかよくわからん。ByteCode をはく高級言語は、Javaしかないが原理的には他の言語も作ることができる。
そもそも、いまのJavaVMの実装は、CLRと同じようにJITコンパイラになっているし、組み込みだとByteCode 自体を直接実行するCPUを使っている場合もある。
JITコンパイラの実装法の中には、IKVMのように、ByteCode をJITでMSILに変換(コンパイル)してそれをCLRで実行させるものも存在する。
>ByteCode をはく高級言語
結構あるような気がするが…MJのような拡張Javaだけでなく、Adaとかも
>>32 不勉強で申し訳ない。ほかにどんなのがあるんですか?
ゲイシの手のひらで遊んでいる内は知ることがないだろうけど、
Jythonとかそれなりの利用者がいるJavaバイトコードをはく高級言語はままあるわけなんだがな。
35 :
デフォルトの名無しさん:04/10/23 23:10:23
>>34 Jythonぐらいは、使ったことはなかったがしっていた。JRubyと同じようなものとおもっとった。
ほかにもたくさんありますし、一部普及しているものもあるようですね。勉強になりした。
いずれにせよ、JRE∽CLR, ByteCode∽IL と考えていいんですね。
36 :
デフォルトの名無しさん:04/11/06 23:36:45
>>34 Javaも、SunとIBMの手のひらの上というところは、似たようなもの。
バイトコードのアセンブラも知らないのか。
フツーのx86の逆汗みたいにアドレスやHEXまで見せてくれる逆汗ないの?
41 :
デフォルトの名無しさん: