ボジョレー効果は、ジャン・イクビアによるプログラミング言語 Adaの仕様草案における潜在的な意味論的エラーのクラスに付けられた名前です。この名前は、草案言語標準でそのような状況を見つけた人にボジョレー・ヌーボーの赤ワインを 1 本与えるとイクビアが約束したことに由来しています。そのような発見に対して実際に少なくとも 1 本が授与されました。[1]
意味
ボジョレー効果とは、Ada プログラムで単一使用句を追加または削除すると、コンパイルされたプログラムの動作が変わる状況であり、意味の正確さを重視する言語では非常に望ましくない効果です。Ichbiah は、ドラフト標準を更新して最終的な Ada 83 言語標準を作成する際に、この効果を防ぐための措置を講じました。この効果を生み出す可能性のある残りの状況は、後に数学的分析によって特定され、Ada 95 言語標準で対処されたため、Ada 83 で依然としてボジョレー効果をもたらす状況は、より最近の Ada 95 言語標準では違法な構成になりました。
原則として、言語仕様でそれが違法にならないように規定されていない限り、 名前空間やパッケージを使用する他の言語でもボジョレー効果が発生する可能性があります。
背景
Adaプログラミング言語では、ソースコードを、プログラムや他のライブラリパッケージで使用できるデータとアルゴリズムの定義を含むライブラリパッケージに分割できます。パッケージ内の定義は、with句によって表示されます。たとえば、次の行の場合 –
Ada.Text_IOを使用;
プログラムまたはパッケージのソース コードの先頭に が表示されると、ライブラリ パッケージAda.Text_IOで宣言されたデータ、プロシージャ、および関数をそのソース コード内で呼び出すことができます。これは、Ada の名前空間の概念の実装です。
したがって、ディレクティブを持つプログラムは、そこに定義を「見る」ことができ、 Ada.Text_IOでプロシージャをwith Ada.Text_IO;呼び出すために、名前で参照することができます。 New_Line
Ada.Text_IO.New_Line;
引数を必要とするプロシージャや関数、またはAda.Text_IOパッケージで宣言された変数への読み取り/書き込みでも同様です。
しかし、このように完全に指定された名前は非常に冗長になる可能性があるため、言語標準では、ソースコードに出現する名前を識別する際にパッケージの内容を検索するようにコンパイラに指示するuse句もサポートしています。したがって、次の行の両方が
Ada.Text_IOを使用する場合; Ada.Text_IOを使用します;
プログラムの先頭に現れると、New_LineパッケージAda.Text_IOのプロシージャはプログラムから見えるだけでなく、省略形で呼び出すこともできます。
改行;
use 句は、どのパッケージに定義が含まれているかをコンパイラに伝える ためです。
ただし、複数のパッケージNew_Lineで同じまたは類似のパラメータ プロファイルを持つプロシージャが定義されている場合は、あいまいさが生じます。プログラムであいまいさが解決されない場合、コンパイラはエラー メッセージでプログラムを拒否する必要があります。次に例を示します。
パッケージA は、プロシージャNew_Line (Number_Of_Lines : in Positive := 1); です 。end A; with A; use A; with Ada.Text_IO; use Ada.Text_IO; procedure Ambiguous is begin New_Line; -- error end Ambiguous;
上記の例では、呼び出しは、デフォルトのパラメータ値を持つAda.Text_IO.New_LineまたはA.New_Lineのいずれかに対応する可能性があるため、あいまいです。あいまいさを解決するには 2 つの方法があります。1 つはパッケージ名を指定することであり、もう 1 つは、呼び出すサブプログラムにパラメータがある場合にパラメータ名を明示的に指定することです。以下の 3 つの例はすべて、あいまいさを解決します。
Ada.Text_IO.New_Line; A.新しい行; 改行 (行数 => 1);
参考文献
- ^ 「「ボジョレー効果」とは何か?」。2006年8月23日時点のオリジナルよりアーカイブ。2006年9月11日閲覧。
