1

この学術論文からの引用: Syntactic and Semantic Prediction in Dynamic Languages :

IntelliSense は、実際には変数の型の知識に基づいています。したがって、変数を記述するシンボルは、既知で解決できる場合はその型を含む必要があります。さらに、動的言語では、コードのさまざまな部分やさまざまなプログラム実行で、1 つの変数がさまざまな型のインスタンスを運ぶことができます。また、変数は動的に開始することができ、その型は実行時にのみ知ることができます。したがって、シンボルには、セマンティック分析で解決された可能なタイプのリストが含まれている必要があります。しかし、一般に、動的言語では明確に解決できません単一のプログラムを実行しても役に立ちません。

これに関するより多くのリソースをどこで見つけることができますか。特に、上記のブロック引用で強調されたステートメント、最終的にはコードの静的分析の予測率に関する統計に興味があります。

4

1 に答える 1

2

これが言うことは、本質的に有名なチューリングの計算不可能な結果です。一般に、計算が何をするか(または型として生成するか)に対する答えを知ることはできません。

これは一般的に当てはまりますが、特定の状況については何も述べていません。プログラマーが識別子のタイプが何であるかを知らなければ、それを使用するコードを記述できない可能性があることを少し考えてみてください。したがって、元のコーダーは知っています(バグのあるコードを書いた場合を除く)。しかし、彼らはシステムの残りの部分について仮定を立て、次にそれらの仮定を強制することによって知っています(多くの場合他の場所で)。

静的アナライザーは、プログラマーがどのような仮定をしたかを知らないため、正確にすることはできません。しかし、多くの特定の状況では、静的分析によってタイプを推測できます。問題は、コードの量がどれだけあるか、そしてコードの背後にある言語を作る深いセマンティクスを使用してそのコードを解釈できるかどうかです。

私はいつも「分析者は(人間のように)良いことはできない」という概念に悩まされています。アナライザーが人間が持っているのと同じ情報にアクセスできる場合、それは少なくとも同じくらい良く、多くの場合はもっと良いはずです。それは人々ができない方法で相互作用を追跡することができます。さらに重要なことに、静的アナライザーがコードの背後にある主要な仮定にアクセスできない場合、他のプログラマーがそのコードで作業することをどのように期待できますか?コードのブロックで使用されているすべての背景/仮定を知っていると主張する、どのようなproiriの理由がありますか?

したがって、静的アナライザーの制限の多くは、動的言語に適用されたとしても、コードを作成するときに使用する仮定を書き留めたくない、または書き留められないことが原因であると思います。(その後、適切に強力なアナライザーを設計するためのエネルギーの問題があります)。

于 2012-11-25T21:13:23.230 に答える