13

Jython、がありJRubyGroovyこれらは動的に型付けされ、 で実行されJVMます。これらの言語がバイトコードにコンパイルされることを理解しています。

などの他の言語Scalaは型推論をサポートしており、コンパイラが型を推論することは明らかです。

しかしJava、静的言語であり、バイトコードにコンパイルされます。これは、バイトコードが動的型付けをサポートすることを意味しますか?

たとえばJava、コンパイル時に変数の型を宣言する必要があり、それを変更することはできません。ただしPython、型を宣言する必要はありませんが、実行時に同じ変数に任意の型の値を割り当てることができます。

動的型付けは静的言語でどのように機能しますか?

4

3 に答える 3

7

しかし、Java は静的言語であり、バイトコードにコンパイルされます。これは、バイトコードが動的型付けをサポートすることを意味しますか?

はい、それはそれを意味します。

Java は完全に静的に型付けされた言語ではないことがわかります。オブジェクトをタイプからサブタイプにキャストするたびに、JVM は動的 (実行時) タイプチェックを実行して、オブジェクトが実際にサブタイプのインスタンスであることを確認します。Usinginstanceofは、動的型チェックのもう 1 つの例です。

動的型チェックは、リフレクション API を使用する場合や、ジェネリックを使用する場合でも、内部で使用されます。

動的型付けは静的言語でどのように機能しますか?

それが純粋に静的に型チェックされた言語である場合、そうではありません。たとえば、Pascal は (純粋に) 静的な型付けを使用する厳密に型指定された言語です。しかし、最新のプログラミング言語のほとんどは、少なくともある程度の実行時の型チェックをサポートしています。また、多くの動的型付け言語には、オプションの静的型付け、または型推論を使用して型関連のエラーを検出する開発者ツールがあります。

ちなみに、言語は静的に型付けされることも、型推論を使用することもできます。型推論は、静的型付けの代替としてではなく、明示的な型宣言の代替として見なされるべきです。

于 2012-07-10T06:05:56.517 に答える
6

他の人が指摘しているように、動的言語とは、一部の(そして多くの場合すべての)型チェックが完全に実行時に行われることを意味します。非常に静的に型付けされた(またはほとんど型付けされていない(x86マシンコード))環境でも、非常に動的な言語を構築できます。

Javaはまた、動的言語のネイティブサポートをますます追加しています。Sunは、これが何を意味するのか、そして動的言語がJVMでうまく機能し、くつろげるのにどのように役立つのかについての非常に優れた概要を公開しました。

于 2012-07-10T06:09:41.257 に答える
5

あなたは言語とアーキテクチャを混同しています。一般に、アーキテクチャは型について何も知りません。動的型付けとは、オブジェクトが型情報を保持する場合です。動的に型付けされた言語は、「Object」型と多くの「instanceof」チェックのみを背後に持つ Java と考えることができます。

于 2012-07-10T06:04:32.413 に答える