言語が混在したプログラミングとは,ある言語で書かれたルーチンが,別の言語で書かれた関数,手続,またはサブルーチンを呼び出すことを指します。たとえば,Fortran 主プログラムが,機械語手続でプログラミングした特定の作業を実行したり,既存の DLL やシステム手続を呼び出すような場合です。
言語が混在したプログラミングは,Visual Fortran,Visual C/C++,Visual Basic,および機械語 (MASM) で可能です。これは,これらの言語が関数,サブルーチン,および手続をほぼ同じ方法で実装しているからです。次表に,各言語のさまざまな種類のルーチンの関係を示します。たとえば,C 主プログラムは,実際には Fortran サブルーチンとして実装されている外部の void 関数を呼び出すことができます。
各言語のルーチン呼び出しの対応関係
言語 | 戻り値付き呼び出し | 戻り値なし呼び出し |
Fortran | FUNCTION | SUBROUTINE |
C および Visual C++ | function | (void) function |
Visual Basic | Function | Sub |
機械語 | Procedure | Procedure |
これらの言語がルーチンを実装する方法には,いくつかの重要な違いがあります。プログラムが実行に失敗したり,誤った結果が生成されるのを防ぐには,どの 2 つの言語間でも,引数渡し,名付け規約,およびその他のインタフェース関連の問題を慎重に,一貫性のある形で調整しなくてはなりません。しかし,言語が混在したプログラミングには,一般にこの余分な作業を行うに足る利点があります。
次に,言語が混在したプログラミングの利点と制約をいくつか要約します。
機械語ルーチンは,Fortran や C などの高水準言語のように初期化を必要としないため,小さく,きわめて高速に動作します。また,高水準言語のユーザーには使用できないハードウェア命令を参照することができます。Fortran と機械語プログラムでは,主ルーチンを Fortran でコンパイルすることで,機械語コードから Fortran 高水準手続やライブラリー関数を参照し,同時に機械語ルーチンを速度と効率の点で最大限にチューニングすることができます。主プログラムが機械語プログラムであってもかまいません。
Fortran と Visual Basic 5.0 またはそれ以上 (32 ビット) の組み合わせにより,Visual Basic の簡単に実装できるユーザー・インタフェース機能を使用しながら,すべての計算を,特に浮動小数点演算を Fortran ルーチンで行うことができます。Fortran と Visual Basic プログラムでは,主ルーチンは Visual Basic でなくてはなりません。Fortran から Basic ルーチンを呼び出すことはできません。
一般に,Fortran と C プログラムは,相手側の言語で書かれた既存のコードを使用することを目的に作成されます。Fortran と C は互いのルーチンを呼び出すことができるので,主ルーチンはどちらの言語でも書くことができます。
複数の言語に対して同じ Microsoft ビジュアル開発環境を使用するには,同じバージョンのビジュアル開発環境をインストールしておかなければなりません。詳細は,『Compaq Visual Fortran Installing and Getting Started』の「7.5 Mixed-Language Programming Support with Visual C++ and Visual Basic」を参照してください。
この節では,Fortran と他の言語の違いを吸収するために使用できるキーワード,属性,および技術について説明します。次に示す節では,呼び出し規約の調整,名付け規約の調整,およびインタフェース手続の作成について説明しています。
言語が混在した手続間で一貫性のあるインタフェースを作成したら,個々のデータ型 (文字,配列など) の扱いの違いを吸収する必要があります。これについては,「言語が混在したプログラミングにおけるデータ交換と参照」で説明しています。