動的型付け言語または静的型付け言語に関して C C++ Java を説明できる人はいますか。
C C++ と Java はすべて静的言語であるとどこかで読みました。しかし、これらについては他の意見があることを思い出します。非常に混乱。
ありがとう!
動的型付け言語または静的型付け言語に関して C C++ Java を説明できる人はいますか。
C C++ と Java はすべて静的言語であるとどこかで読みました。しかし、これらについては他の意見があることを思い出します。非常に混乱。
ありがとう!
他にどんな意見がありますか?C、C ++、およびJavaがすべて静的に型付けされた言語であり、C++とJavaが動的に型付けされた機能を備えていることは間違いありません。もう1つの問題があります。強い型と弱い型の違いです。これは主に暗黙の変換とオーバーロードに関係します。Web上で利用可能なこれらの問題に関する多くの詳細な議論があります。http://en.wikipedia.org/wiki/Type_systemから始めることをお勧めします
それはスペクトルです。Cには動的型付け機能はありませんが、自分でトリックを実行するために使用void *
およびキャストすることができます。C ++とJavaはクラスメソッドに対して動的ディスパッチを行うため、C ++とJavaでは、実行時までオブジェクトで実際に呼び出されているメソッドがわからない場合があります。Javaには、実行時に型を実際に検査および変更できるリフレクションAPIが含まれているため、C++よりも少し動的です。次に、PythonやRubyのように、ほぼ完全に動的な言語があります。コンパイル時にほとんど何もチェックされません。「ダックタイピング」のような機能があり、実際の型をサポートしている限り、実際の型をあまり気にしません。気になる操作。
hlovdal の回答の後、Benjamin Pierce を再び引用し、質問に肯定的なものを加えます。彼の「Types and Programming Languages」の第 1 章を参照して展開します。
Java は安全な言語 (実行時の型エラーが防止される) であり、ほとんどが静的な型チェックを備えています。ただし、継承 (より正確には、サブタイプ) により、変数の型は、指定された値の型よりも一般的である可能性があります。さらに、この言語では、オブジェクトが特定の型を持っているかどうかを検証し、実行時にオブジェクトをダウンキャストすることもできます。このような操作では、実行時に型がチェックされます。したがって、各オブジェクトには、その型の実行時表現へのポインターがあります。
C は、静的な型チェックを行う安全でない言語です。型は実行時には存在しません。C++ は静的な型チェックを行う安全でない言語ですが、特定の条件を満たすクラス (Java のすべてのオブジェクトと同様に、仮想メソッドを持つなど) を満たすクラスの実行時の型識別が制限されていることも特徴です。
編集:「静的型付け」は明確に定義された概念ではありません。それを示すために、「静的型付け」に関連する可能性のある 3 つのプロパティを (大まかに) 定義します。
上記の 3 つのプロパティをすべて備えている言語が「静的に型付けされている」と言う場合、Java、C、C++ のいずれも静的に型付けされていません。
静的/強力な型付けに関するさまざまな意見について、この質問を読んだ直後に、たまたまこの古いスラッシュドットのコメントに出くわしました:
私のお気に入りの「強い型付け」の定義は、Shriram Krishnamurthi のProgramming Languages: Application and Interpretation (p. 205)から来ています。
では、「強い型付け」とは何ですか?私たちが知る限り、これは無意味なフレーズであり、無意味な方法で使用されることがよくあります。
Benjamin Pierce (Types and Programming Languages の著者) も同様のことを書いています ( Mark Jason Dominus が Pierce on " _ _typing " を引用しているのを参照):
約 1 年前、「強く型付けされた」、「静的に型付けされた」、「安全な」などの用語を整理するために数週間を費やしましたが、驚くほど難しいことがわかりました。あなたのメッセージが指摘しているように、これらの用語の使用法は非常に多様であるため、ほとんど役に立たない.