型キャスト – 役者ではなくコンパイラ用

ずいぶん前にコードを記述していたとき、よく使った便利なコンパイラ機能が型キャストでした。プログラミング言語には基本的に、強く型付けされたものと弱く型付けされたものの 2 種類があります。 Pascal や FORTRAN などの強く型付けされた言語のコンパイラでは、使いやすさを理由に、型キャストを使って 1 つのデータ型を別のデータ型に強制的に変換できます。 C や C++ などの弱く型付けされた言語では、変換を暗黙的に実行できます。 言い換えると、C コンパイラでは、がけから落ちても何も言われません。 強く型付けされた言語では、コンパイラに対し、「自分で何をやっているかわかっているよ、がけから降ろしてくれ」と言う必要があります。型キャストでの値は、「余分な」手順を用意して変換について考えさせます。 変換に型キャストのオペランドが使用されなかった場合、コンパイラは、一致しないデータ型を通知するエラーを生成します。

以下は、VAXELN というリアルタイム OS のコードフラグメントです。 コンパイラは EPASCAL と呼ばれ、型キャストのほか、多くのほかのリアルタイム拡張をサポートしていました。 型キャストは、「::」オペランドで示していました。

procedure search_id(var header:queue_entry; id_in:integer; var found:boolean);

var walk:^queue_entry;

begin
    walk:=header.flink;
        repeat
            if walk::^store^.id=id_in
            then begin
                error ();
                walk:=address(header);
                found:=true;
                    end
            else
                walk:=walk^.flink;
        until walk = address(header);
end;    

個人的には、精度の高いコードを記述するのに重要でした。 バグ、特にあいまいなものを実装サイクルの早い段階で見つけることには意味がありました。 ポインタ (^) が多すぎるか、または少なすぎるせいで大騒ぎを引き起こし、回り道をしたことが何度ありますか ? コンパイラが処理できる優秀なコードはすばらしいですが、コードはすっきりしていて、自己文書化するポイントまでわかりやすいものでなければなりません。 プロジェクトの優秀な部分は、アルゴリズムと設計に残しておいてください。 コードはわかりやすく記述してください。 高い精度と安定性があると、確かな違いが表れます。 貴社のソフトウェアを使うお客様にたずねてみてください。

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s