相変わらず説明が足りてない!

http://beautiful.homelinux.net/~sky-software/diary/?date=20050204#p01
http://edward.dip.jp/20050120.html#p03
えーと、リファラより、いくつが誤解があるようなので、書いとこう…こういう基本的なところの説明を飛ばすから、僕の説明はわかりにくくなるんだよな…


下の説明では、GCCgccで使い分けてます。「GCC」と書いた場合はコンパイラの集合としてのGCC、「gcc」と書いた場合はコンパイラ起動の為のプログラムであるgccを指してます。って書いてもわからんな…


ILogScriptは単体では実行ファイルを作ることはできない、という話。
「をいをい…お前はよう…ILogScriptの利点は機械語を生成できるっていうところじゃなかったのか?」というような感じなんだけど、まあ、そこらへんについては許してもらうとして、ILogScriptが単体では実行ファイルを作れない理由は、

  • ILogScriptはアセンブリを生成するところまでしかできない
  • 付属ライブラリが存在しない

のふたつ。


まず、「アセンブリを生成するところまでしかできない」と、いう点。
これは、ILogScript、というか、GCC自体が、アセンブリ機械語に変換する機能を持ってないから、と、いう話。
gccコマンドは実行ファイルを作ってるように見えるけど、実はあれは、中でコンパイラの実体であるcc1プログラムとアセンブリ機械語に変換するasプログラムを呼んでるから、と、いう話がありまして、実際にはGCC自体にはそういう機能は無い、とかそういうややこしいことになってたりして、うまく説明できん。
教科書的には、「コンパイラアセンブリに変換して、アセンブリ機械語に変換、それをリンカでくっつける」とか、そういう話になるんだけど、実際の開発では、そこらへんをまとめてコンパイラと呼んでたり、GCCのように、コンパイラが勝手にリンカを呼んでるとか、VCみたいに、そもそもどれがリンカなんだかわからないとか、そういう話でややこしくなるんだよな…


えーと、だから、実際に機械語を生成しようと思ったら、リンカとアセンブラが必要になる、っていう話。もし、「俺ハードウェア言語」を作るのであれば、それ用のアセンブラ、リンカのほうがまず必要になるので、ILogScript単体ではどうにもならないです。



で、もういっこ、「付属ライブラリが存在しない」と、いう点。
よくあるプログラムでは、mainが実行される前に実はCRTとかいうライブラリに含まれるプログラムが実行される、という構成が普通になってるんだけど、ILogScriptには、そのCRTというライブラリが無いので、単体では実行ファイルが作れない、という話。
この、CRTというライブラリはコンパイラの都合でどうなるかわからないので、普通はコンパイラに付属してくる。で、先日の「さくっと言語」ではそこらへん対応するのが面倒だったので、gccに任せよう、と。そういう事情で「さくっと言語ではMingwCygwingccがいります。」と、書いてます。

(んんんーっと。ここらへんまとめられたドキュメントでもあればいいんだけどなぁ…「GCCプログラミング工房 書籍版」がただの「日本人はダメダネ本」になってないことを祈る、いや、ならないと思うけど、ほら、少し、ね、思うじゃないですか)


で、「さくっと言語」は、ILogScriptでどういうことができるかを示すサンプルになればよかったと思ったのだけど、ちょーっと、微妙だな。もうちょい簡単なほうが良かったような。あと、コメント。まあ、とりあえず、あのぐらいの規模の言語をILogScriptで書くとあのくらいになる、ぐらいは参考になる…かなぁ…大体5日くらいであのくらいになってます。参考までに。