言語が混在したプログラミングとは、ある言語で書かれたルーチンが、別の言語で書かれた関数、プロシージャ、またはサブルーチンを呼び出すことを指します。例えば、Fortran で書かれたメイン・プログラムから、アセンブリ言語でプログラムされた特定のタスクを実行する場合や、既存の共有ライブラリやシステム・プロシージャを呼び出すような場合です。
言語が混在したプログラミングは、インテル® Fortran および インテル® C++ で可能です。これらの言語は、関数、サブルーチン、およびプロシージャをほぼ同じ方法で実装しているからです。次の表に、各言語のさまざまな種類のルーチンの関係を示します。例えば、C のメイン・プログラムから、実際には Fortran のサブルーチンとして実装されている外部の void 関数を呼び出すことができます:
各言語のルーチン呼び出しの対応関係
言語 |
戻り値付きの呼び出し |
戻り値なしの呼び出し |
Fortran |
FUNCTION |
SUBROUTINE |
C および C++ |
function |
(void) function |
これらの言語がルーチンを実装する方法には、いくつかの重要な違いがあります。プログラムが実行に失敗したり、誤った結果を生成するのを防ぐには、どの 2 つの言語間でも、引数渡し、命名規則、およびその他のインターフェイス関連の問題を慎重に、また、一貫性のある形で調整しなくてはなりません。しかし、言語が混在したプログラミングには、一般にこの余分な作業を行うに足る利点があります。
次に、言語が混在したプログラミングにおける利点と制限をいくつか要約します:
Fortran/アセンブリ言語
アセンブリ言語のルーチンは、Fortran や C などの高水準言語のように初期化を必要としないため、小さく、きわめて高速に動作します。また、高水準言語のユーザには使用できないハードウェア命令を参照することができます。Fortran/アセンブリ言語のプログラムでは、メイン・ルーチンを Fortran でコンパイルすることで、アセンブリ言語のコードから Fortran の高水準プロシージャやライブラリ関数を参照でき、同時にアセンブリ言語のルーチンを速度と効率の点で最大限にチューニングすることができます。また、メイン・プログラムがアセンブリ言語のプログラムであってもかまいません。
Fortran/C (または C++)
一般に、Fortran と C が混在したプログラムは、一方の言語で書かれた既存のコードを使用することを目的に作成されます。Fortran と C は互いのルーチンを呼び出すことができるので、メイン・ルーチンはどちらの言語でも書くことができます。
このセクションでは、Fortran と他の言語の違いを調整するために使用できるキーワード、属性、および技術について説明しています。次に示すセクションでは、呼び出し規則の調整、命令規則の調整、およびインターフェイス・プロシージャの作成方法について説明しています。
言語が混在したプロシージャ間で一貫性のあるインターフェイスを作成した後は、個々のデータ型 (文字列、配列など) の処理方法の違いを調整する必要があります。詳細は、「言語が混在したプログラミングにおけるデータ交換と参照」を参照してください。
注
このセクションでは、「ルーチン」という言葉を、各言語の関数、サブルーチン、およびプロシージャを指す一般的な用語として使用しています。