FreePascalその3

そんなこんなでdyayamlをpure-Pascal化して特に問題なくdmdとかとリンクできる状態まで持ってきました。小手調べのつもりで二日もかかった…。
そして…また嫌なことに気付いてしまいました。
それは、RUN TIME TYPE INFORMATION。使いもしない余計な情報がオブジェクトファイルへと埋め込まれているのです。具体的には列挙型の文字列テーブルとかレコードのInitialize/Finalizeなどで使われる初期化情報とか。{$TYPEINFO ON}で有効になるpublished節のRTTIとはまた別物です。
いやまぁこんなもの別に気にしなければいい話なんですけど、そこはそれ、小さいEXEを作りたい人間としましては、C言語版が既にあるのに、それより劣化することになるのが気に食わないのです。
まず、はっきり言ってターゲットgcc以外では何の問題もありません。BorlandにしてもDigitalMarsにしてもMicrosoftにしても、賢いリンカがスマートリンクという機能を持ってまして、使わないものは実行ファイルに含まれません。
このスマートリンクができない「プラットフォーム」がgccというよりbinutilsJava、.NETです。Java、.NETに関しては実行時情報の塊ですのでわからなくもないのですが…余談ですがDelphi for .NETは静的リンクする分に限れば.NETの流儀を無視してスマートリンクしてくれますのでVCL.NETとか静的リンクしたほうが実行ファイルは大きくなりますがメモリ使用量はぐっと減ります。もうひとつ余談ですが外付けのキャプチャーBOXをUSBで繋いでいるとDelphi2005のIDEが.NETを切り離す離さないが関係なくなるぐらいに恐ろしく重くなるのは何故でしょうか。
FreePascalは{$SMARTLINK ON}をサポートしてますが、これは出力を細切れにして.oの代わりに.aを使うというだけですしね…。
どうせ.sを経由するなら、と、.sの段階でRTTI__で始まるシンボルをばっさり削除するようにしたところで、唐突に馬鹿らしくなってきたのでした。ここまでするならCのほうがまだいいじゃん、と…。プラットフォーム毎に対処しないとならないため醒めます…。あと-Atasmで吐いてくれるコードはC++BuildrX付属バージョンのtasm32的には怪しいっぽいです。
というわけでpure-Pascal dyayamlは封印かな…。
ldがスマートリンクを持ってないのは、gcc対応言語中、素のC以外がさっぱり使われない理由として必要充分になってしまっているのではないかと思うのですよ。私だけ?Adaの列挙型だって'Image/'Valueを使わなくても文字列テーブルが埋め込まれてしまいますし…こっちは回避用のpragmaありますが…C++のあれやこれやだって同様です。ldのせいで、要らないものを省きたいならC言語しかないこの現実。
最近ようやくgccは地球が宇宙に誇れるソフトウェアだと思えるようになってきたのですが、binutilsについては全然そうは思えないのでした。