5

Pythonなどは、import外部機能を取得する手法を使用しています。

Cやその他のユーザーは使用しますinclude(たとえば、C ++にはnamespace頭痛の種が伴います)。

言語を設計する際に一方を選択する(またはObjective-Cのように両方を使用する)理由は何ですか?

AppleがLLVMに紙を介していくつかの更新/変更を提案しているのを見て、なぜ違いが存在するのか疑問に思います。

@delnan回答に基づく説明

実装する方法が複数あることを考えるとimport(彼の答えまで私は気づいていませんでした)、!include対の全体的な利点は何includeですか?このimport手法では、指定されたパスに基づいて個々のサブコンポーネントのみが検出されるようです(少なくとも、Pythonでは[apparent]メソッドが私が知っている唯一のメソッドです)。

方法論の他の使用法は、それとどのようにimport異なりますか?include現代語の設計と実装(もしあれば)において、「古いスタイル」の方法を使用することが意味をなすのはいつですか?

4

1 に答える 1

11

C++ や Objective C が単純に継承した C のアプローチは、定義と実装が非常に簡単です (一言で言えば、「#include. これらの問題のいくつかは、これまでに見たプレゼンテーション (および他の場所) で名前が付けられています。問題の一部を軽減するイディオムとベスト プラクティス (そのプレゼンテーションや他の場所でも説明されています) とマイナーな拡張機能 ( #pragma once、プリコンパイル済みヘッダー) がありますが、結局のところ、このアプローチは基本的にあまりにも制限されており、ソフトウェア エンジニアが持っているものを処理できません。モジュールシステムに期待するようになります。最近の代替手段 (以下を参照) と同じように振る舞うことは、非常に漏れやすい抽象化です。

今日では、言語設計について意見を持っている人は皆、できることならやるべきではないことに同意しているようです。C++ と Objective C には、下位互換性が必要なため、その選択肢がありませんでした (ただし、どちらにも別のメカニズムを追加する選択肢があり、Objective C はそれを行いました)。それが行われたときはかなり良い決定だったという点で「その日は公正」ですが(それは十分に機能し、規律があればまだ機能します)、世界は前進し、より良い方法に落ち着きましたコードをモジュールに分割してから、元に戻します。(そのような方法は初期の C 時代にすでに存在していたことに注意してください。

あなたが「その」importテクニックと呼んでいるものは、実際にはかなり大きなデザイン空間です。多くのモジュール システムは、互いに完全ではありませんが、ほとんど異なります。残りのモジュール システムには、1 日を台無しにするほどの微妙な違いがあります。インポートしたファイルを新しいスコープ (Python、PHP) で実行することから、本格的な ML スタイルのファンクターまで、何でもかまいません。これらすべてのモジュール システムは、それぞれの "モジュール" (それぞれのシステムでそれが意味するものは何でも) に独自のスコープ/名前空間を与え、(通常) モジュールの個別のコンパイルを許可し、一般的にはモジュールを修正するために邪魔をしないという点で、いくつかの類似点があります。 C スタイルのテキスト インクルードの問題 (または作成者が代替案で見たその他の問題)。一般的に言えるのはこのくらいです。

于 2012-11-26T18:48:59.927 に答える