多くの言語には、イントロスペクションとリフレクションがあります。 しかし、いくつかは他のものより明らかに優れています。 この点でどの言語が「より良い」ものであるか、またその理由は何か。最高のイントロスペクション機能とリフレクション機能を備えたプログラミング言語はどれですか?
答えて
反射は基本的にソースプログラムのプロパティを抽出する機能です。 任意のプロパティ(例えば、任意のすべて)のソースコードを検査するには、検査可能なソースコードまたは少なくとも一部のソースコードが必要です。
実行時反映を許可する言語には、多くのプロパティのうちのどれを検査できるかがあらかじめ決められています。その数と結果の詳細は言語設計者によって決定されています。ランタイムスペースとリフレクションの時間がかかるため、ソースコード全体を保持する意思がないため、実質的にすべての言語で(言語に固有の)反映/検査の制限があります。したがって、言語設計者が有用と考えるもの、比較的簡単に計算してコンパクトに格納できるものを反映しています。これらの制限は、コンパイルされた言語では特に強く、その目的は実行とリソース(通訳者とは対照的に)で効率的であることです。
したがって、一般的にコメントや特定の変数が保持する可能性のある値の範囲に関する情報を反映して取得することはできません。
非常に多くの反射能力を提供する言語の1つがLISPです。これは、LISPプログラムのソーステキストが、LISPリストと同型であることを意識しているためです。これは、少なくとも解釈されたときにLISPがどのようにプログラムコードを格納するかです。 LISPはそのようなリストすべてに直接アクセスできるため、LISPプログラムは自分のコードを直接検査することができます。 [多くのLISPでコンパイルが可能です。これらは、検査可能なものに関する制限に関して、他のすべてのコンパイルされた言語と同じ制限を有する]。
したがって、言語のイントロスペクト/リフレクションの能力は、実際には制限されます。
ソーステキストの任意のプロパティに完全にアクセスするには、以外の言語をの外に設定する必要があります。その結果、完全なソースコードを実際に検査することができます。
Program transformation systems (PTS)は、これに最も近いツールです。 PTSは一般に、ソースコードを直接反映したabstract syntax treesにソースコードを解析し、同等のスタンドインとして機能することができます。より良いものは、実際には空白に関するコメントと情報を保持します。 PTSを使用して、カスタム、任意のアルゴリズムを記述して、ASTを乗り越え、これらのASTから任意の情報を抽出することができます。
PTSを使用した場合の非常に優れた副作用の1つは、コードを検査した後、PTSがコードを変換したり、つまり、問題や機会を分析し、結果としてプログラムを強化します。
多分、夢の言語は、それに完全なPTSが組み込まれている言語でしょう。 (私の会社のDMS製品であるPTSは、このプロパティを持つ小さなDSLセットであり、DMSを使用して検査/変換し、永続的に拡張します)通常、DMSは他の言語の検査/変換を行います。
- 1. プログラミング言語機能
- 2. 機能的で純粋なプログラミング言語
- 3. 簡単なUI開発機能を備えたスクリプト言語
- 4. Jプログラミング言語の 'assert'キーワードの機能は何ですか?
- 5. UltraEditマクロに似たテキスト解析機能を備えたプログラミング言語またはライブラリ
- 6. MapReduceを実行するための最高の機能言語ですか?
- 7. フロントエンドと高度な機能を備えたグラフデータベース
- 8. 機能プログラミング言語はグラフィックプログラミングに適していますか?
- 9. Android:Google機能のようなズーム機能を備えたグリッドビュー
- 10. 複数の機能を備えたコントローラ
- 11. MSSQLのjson機能を備えたMSSQL2020
- 12. onclick機能を備えたシングルページのウェブサイト
- 13. プログラミング言語でコンパイラを作成するために必要な言語機能は何ですか?
- 14. 機能更新機能を備えた配列の最も効率的な実装は何ですか?
- 15. ライブクリックイベント機能を備えたデータテーブル
- 16. ナビゲーション機能を備えたWPFコントロール
- 17. ブラウズ機能を備えたカスタムコンテンツパイプライン
- 18. フィルタリング機能を備えたインタラクティブなPDF
- 19. ドラッグ&ドロップ機能を備えたエキスパンドリストビュー
- 20. クレイジータイミング機能を備えたIE11 CSSアニメーション
- 21. CMS機能を備えたASP.NET MVC3アプリケーション
- 22. モノトーンダイアログドリルダウン機能を備えたニューススタイル要素
- 23. ファイルアップロード機能を備えたJQuery WYSIWYGエディタ
- 24. GXT - マルチセレクト機能を備えたComoboBox
- 25. ファイルブラウズ機能を備えたリモートコードエディタ
- 26. 1つのシーケンス機能と3つの現在の機能を備えたLSTM
- 27. C言語:どのように機能
- 28. プログラミング言語間の類似機能の参照
- 29. 自動ドロップ機能と自動更新機能を備えたHTMLドロップダウンメニュー
- 30. 言語機能直交?
[これは良い質問ではありません](http://stackoverflow.com/help/dont-ask)「より良い」という言葉を建設的に定義する方法はなく、実際の問題を解決することはできません。なぜなら、イントロスペクションとリフレクションでどれほど優れているかに基づいてタスクのプログラミング言語を選択しないからです。 –
@ JeroenMostert:「反射が実際に提供することができる、潜在的に無限のプロパティセットの数」として、よりよく定義できます。これは、コードについて任意の質問をすることが目標であれば、便利な定義です。私の答えを見てください。 –