C++ や Objective C が単純に継承した C のアプローチは、定義と実装が非常に簡単です (一言で言えば、「#include
. これらの問題のいくつかは、これまでに見たプレゼンテーション (および他の場所) で名前が付けられています。問題の一部を軽減するイディオムとベスト プラクティス (そのプレゼンテーションや他の場所でも説明されています) とマイナーな拡張機能 ( #pragma once
、プリコンパイル済みヘッダー) がありますが、結局のところ、このアプローチは基本的にあまりにも制限されており、ソフトウェア エンジニアが持っているものを処理できません。モジュールシステムに期待するようになります。最近の代替手段 (以下を参照) と同じように振る舞うことは、非常に漏れやすい抽象化です。
今日では、言語設計について意見を持っている人は皆、できることならやるべきではないことに同意しているようです。C++ と Objective C には、下位互換性が必要なため、その選択肢がありませんでした (ただし、どちらにも別のメカニズムを追加する選択肢があり、Objective C はそれを行いました)。それが行われたときはかなり良い決定だったという点で「その日は公正」ですが(それは十分に機能し、規律があればまだ機能します)、世界は前進し、より良い方法に落ち着きましたコードをモジュールに分割してから、元に戻します。(そのような方法は初期の C 時代にすでに存在していたことに注意してください。
あなたが「その」import
テクニックと呼んでいるものは、実際にはかなり大きなデザイン空間です。多くのモジュール システムは、互いに完全ではありませんが、ほとんど異なります。残りのモジュール システムには、1 日を台無しにするほどの微妙な違いがあります。インポートしたファイルを新しいスコープ (Python、PHP) で実行することから、本格的な ML スタイルのファンクターまで、何でもかまいません。これらすべてのモジュール システムは、それぞれの "モジュール" (それぞれのシステムでそれが意味するものは何でも) に独自のスコープ/名前空間を与え、(通常) モジュールの個別のコンパイルを許可し、一般的にはモジュールを修正するために邪魔をしないという点で、いくつかの類似点があります。 C スタイルのテキスト インクルードの問題 (または作成者が代替案で見たその他の問題)。一般的に言えるのはこのくらいです。