コンパイルの実行
javac mysource.java
としてやればJavaVMが解釈可能な中間コードができる。
これを java mysource という感じにして実行する。
こうするとJava仮想マシン上で mysource が実行される。
だが、C言語の場合はこれよりいくらか複雑だ。
cc や gcc でコンパイルすれば実行ファイルができあがるが、
この時に
- プリプロセッサ
- リンカ
という大事なプログラムが動いている。
プリプロセッサはソースコードの置換?
リンカの仕事は、イメージとしてはjavaでいうところのimportしているクラスを読み込む処理だろうか。(ClassLoderの仕事?)
javaではそれほど意識しなくてもいい部分だが、Cの場合はこれを意識していないといけないような気がする。(まだその根拠はないが)
リンカはJavaの場合はインタプリタの仕事かも・・・
Cでのコンパイルから実行までは、
- ソースコードを編集し保存する
- プリプロセッサがソースコードを処理
- コンパイラがオブジェクトコードを生成
- リンカがオブジェクトコードとライブラリを結びつけ実行ファイル作成
- ローダによって実行ファイルがメモリにロードされる
- メモリにロードされた実行ファイルがCPUに読み込まれ実行される
という流れだ。Javaの場合は仮想マシンがこの大半の処理を隠蔽しているが、Cの場合はこれを意識していないといけなそうだ。
インタプリタの処理としてあまり意識しなくてもよかった部分もCの場合はきっちり押さえておかないと後で訳がわからなくなるかも・・・
ある程度VMの動きも知っていないといけないなぁ。