VOS 上の開発環境 ― 2006年07月13日 12時00分30秒
VOS が PL/I で書かれているため、オブジェクトファイルは PL/I に都合がいいように出来ているらしい。どのコンパイル言語のオブジェクトも混ぜて、実行形式が作れる。ただし、構造体など各言語間の調整は自分でする必要がある。そのため、VOS C Compiler にはchar_varying 型というものがある。
char_varying(32) filename_cv;
struct
{
short len;
char buf[32];
} filename_c;
char_varying 型は引数として、文字列の長さを取る。なお、構造体的には filename_cv と filename_c は同じになる。char_varying は C++ で見る string 型に近い。各変数が文字数を保持しているため、C string の様に文字列の最後に NUL はない。PL/I を見るとわかるが、char_varying という型は PL/I から派生している型である。そして、VOS のシステムコールで文字列を渡したい時は、全てこの型を使う必要がある。
現在、VOS C Compiler と ANSI C Compiler と GNU C Compiler がある。gcc では、VOS 本来のシステムコールが使えない。VOS が PL/1 のため、システムコールが PL/I 仕様なのだ。OpenVOS と言う UNIX のフリーウェアを移植しやすくするためのプロジェクトと共に、数年程前に現れた。ANSI C Compiler はごく普通の ANSI コンパイラであるらしい。逆に ANSI 準拠のコンパイラであるが為に、char_varying の扱いに少々問題があるらしいと聞いた。(void *) にキャストする必要があるのだとのことだ。そのようなわけで、ANSI C Compiler は使っていない。それ故、こちらの特徴はあまり知らない。ある情報によると、これらの三つの主な違いは、コンパイラのパーサの部分らしい。そのため、一度構文の点検を通過すると、同じ実行コードが生成される。
オブジェクトファイルを生成したら、実行形式を作るためにリンクする必要がある。VOS では bind.pm と呼ばれるプログラムがリンクを行なう。小さいプログラムであれば、オプションでオブジェクトを指定する。少し大きくなったり、特殊なオプションを使う場合は bind file と呼ばれる物を書き、bind にオプションとして渡す。
VOS にはライブラリを実装してこなかったので、実行形式には全てのオブジェクトファイルが静的に組み込まれる。gcc が移植されたときに静的ライブラリが使えるようになったが、細かい仕組みは知らない。gcc でコンパイルされる過程を見ていたことがあるが、リンク時には VOS の bind.pm が起動されていた。静的ライブラリは gcc でのみしかサポートされていないと思われる。なお、動的ライブラリのサポートはない。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/07/13/443697/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。