3

プログラミング言語は、「動的」と「静的」の 2 つの主要なクラスにグループ化されます。-これは、プログラミング言語が両方ではなく一方にある場合に常に当てはまりますか?つまり、言語は同時に動的と静的になることができますか?

4

5 に答える 5

4

C# 4.0 は、動的解決もサポートする静的に型付けされた言語です。キーワードはdynamic基本的にコンパイラーに伝えます: 今のところこれについて心配する必要はありません。実行時に型を解決できない場合、例外がスローされます。

于 2009-11-26T06:33:32.150 に答える
4

静的言語と動的言語の区別は、多くの異なる (多かれ少なかれ適切な) 基準を参照できるため、非常にあいまいです。それぞれのケースについて答えようとします:

解釈・編纂

これは言語自体に依存するのではなく、使用される実装にのみ依存します。したがって、言語はインタープリターとコンパイラーの両方を介して実行できます。例

  • Haskell (GHC / GHCI / ハグ)
  • C++ (G++ / Ch)
  • F#

コンパイル済み言語の中には、実行時にコードをコンパイルできるものもあります (.NET)。

静的/動的型付け

静的型付けと動的型付け (ダック タイピング) を 1 つの言語で組み合わせることができます。Option Explicit/Strict offまたはBooを使用したC# の VB を参照dynamicください。構造型付けを使用して、明示的な型階層なしで厳密な型付けを定式化できます。ポリモーフィック ベース タイプ ( ) は、ある種の動的動作もサポートしますが、型は静的に与えられます。System.Object

メタ構造 (リフレクション、ランタイム型生成など)

Java と .NET でも利用できます。

関数型のテクニック (例: 高階関数、継続)

静的に型付けされた言語でも複製できます。Haskell または Scala を参照してください。

于 2010-01-31T12:37:35.363 に答える
2

Objective-C は別の例です。これは C の厳密なスーパーセットであり、C は静的に型付けされています。しかし、「目的」のものは完全に動的にすることができます (すべてのオブジェクトが type として宣言されますid)。多くの標準メソッドがid. たとえば、NSArrayコレクションは type のオブジェクトを返すidため、コンパイラは次のものをキャッチできません。

NSMutableArray *a = [NSMutableArray arrayWithObject:@"私は文字列です"];
NSNumber *n = [a objectAtIndex:0]; //数値に文字列を代入!

NSNumber *n = @"I am a string"コンパイル時にフラグを立てることはできますが。

于 2009-11-26T07:34:38.720 に答える
1

はい。静的と動的の両方を一緒に持つことができます。

C# を使用している場合は、静的トラックに乗っており、System.linq.Expression tree APIVS 2010 (.NET 4.0) で新しい動きを使用しています。CLR の上のレイヤーである DLR (Dynamic Language Runtime) と呼ばれるフレームワークに向けてコードをターゲットにしています。

によって作成されたコードでさえ、expression classIronPython などの他の動的言語でも使用できます。

同様に、CLR で Iron python コードを使用できます。それらが式ツリーを発行し、DLR をターゲットにしていることを確認するために必要なことはすべてです。

于 2010-01-31T12:13:50.033 に答える
0

言語は同時に動的かつ静的になることができますか?

動的および静的は、非常にあいまいな方法で多くの異なるものを参照します。特に、言語は静的または動的に型指定することができます。つまり、型チェックはコンパイル時にある程度強制されるか、実行時に完全に延期されます。しかし、言語には REPL があり、定義と式を対話的に評価できるため、言語を「動的」と呼ぶことがよくあります。実際、F# は静的に型付けされた言語であり、調査で最高の動的言語に選ばれました。動的とは、内省/反省を行う能力を指すこともあります。

したがって、言語は同時に動的と静的の両方になる可能性があると思います。特に、静的な型チェックとインタラクティブな評価のサポートの両方が行われます。

于 2013-12-01T14:25:23.527 に答える