言語が混在したプログラミングの問題点

言語が混在したプログラミングとは,ある言語で書かれたルーチンが,別の言語で書かれた関数,手続,またはサブルーチンを呼び出すことを指します。たとえば,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 と他の言語の違いを吸収するために使用できるキーワード,属性,および技術について説明します。次に示す節では,呼び出し規約の調整,名付け規約の調整,およびインタフェース手続の作成について説明しています。

言語が混在した手続間で一貫性のあるインタフェースを作成したら,個々のデータ型 (文字,配列など) の扱いの違いを吸収する必要があります。これについては,「言語が混在したプログラミングにおけるデータ交換と参照」で説明しています。


注意:この節では,「ルーチン」という言葉を,各種の言語の関数,サブルーチン,および手続を指す一般的な用語として使っています。