web-dev-qa-db-ja.com

すべてのスクリプト言語は動的に型付けされていますか?

すべてのスクリプト言語は動的に型付けされていますか?

TCLを使用しています。これはスクリプト言語であり、変数の型宣言を強制または許可しません。代わりに、ダックタイピングを使用した動的型付け言語です。変数の型は、変数に割り当てられた値に従ってインタープリターによって想定されます。

厳密に/強く型付けされたスクリプト言語があることを本当に知りたいです。

4
user2720323

さて、私の命名法では-これは普遍的ではありませんが、誰ですか? -TCLは動的に型付けされた言語ではなく、アセンブリ言語、BCPL、BLISSのような型なしの言語です。

静的型付け言語には、静的分析によって推定された型があります。

動的に型付けされた言語には、値に型が付けられています。

型なしの値は1種類の値(BCPLとBLISSの単語、TCLの文字列)のみを持ち、その型は、値に多かれ少なかれ盲目的に適用される操作から推定されます。

自動変換により、動的に型付けされた言語と型なしの言語の違いが不鮮明になる場合があります。進化はまた、型なし言語に動的に型付けされた味を与える可能性があります(これはおそらくTCLの場合です-私はあまりにも長い間使用していませんでした-型なしとして開始し、その後、異なる種類-配列など)の動作に一貫性がなくなり、説明が困難になります。


アヒルのタイピングは別の軸です。これは型の適合性をチェックする方法です。これは、使用されている特性のみがチェックされる構造型の変形です。静的に型付けされた言語で使用できます(C++のテンプレートはダックタイピングです)。動的言語では、時間を使用するためにチェックが遅れる場合があります。

4
AProgrammer

いいえ。言語が静的または動的に型付けされているか、弱くまたは強く型付けされているかは、直交実装の詳細である解釈/コンパイルとは関係ありません。

おそらく、ここで使用する最良の例は HugsHaskellインタプリタでしょう。それらを知らない人にとって、Haskellは非常に強力な型システムを備えた非常に強く型付けされた言語であり、強固な数学的裏付けを持つ強力な型システムのポスターの子のようなものです。

Scalaなどの、同様の機能を持つ型システムがあり、コンパイルと解釈の間に配置するのが非常に難しい言語も検討してください。これは、JVMバイトコードに「コンパイル」され、実行されているJVMのさまざまな実装の詳細に応じて解釈/コンパイル/ JITされます。

3
Phoshi