強く型付けされた言語と静的に型付けされた言語の違いは何ですか? 質問する

強く型付けされた言語と静的に型付けされた言語の違いは何ですか? 質問する

また、一方が他方を暗示するものでしょうか?

ベストアンサー1

強く型付けされた言語と静的に型付けされた言語の違いは何ですか?

静的に型付けされた言語には、実装 (コンパイラまたはインタープリタ) によってコンパイル時にチェックされる型システムがあります。型チェックによって一部のプログラムが拒否され、チェックに合格したプログラムには通常、いくつかの保証が付属します。たとえば、コンパイラは浮動小数点数に対して整数演算命令を使用しないことを保証します。

「強く型付けされた」が何を意味するかについては実際の合意はありませんが、専門文献で最も広く使用されている定義は、「強く型付けされた」言語では、プログラマーが型システムによって課せられた制限を回避することができないというものです。この用語は、ほとんどの場合、静的に型付けされた言語を説明するために使用されます。

静的と動的

静的型付けの反対は「動的型付け」であり、これは

  1. 実行時に使用される値は型に分類されます。
  2. このような値の使用方法には制限があります。
  3. これらの制限に違反すると、違反は (動的) 型エラーとして報告されます。

例えば、ルア動的型付け言語である Lua には、文字列型、数値型、ブール型などがあります。Lua では、すべての値は 1 つの型に属します、これはすべての動的型付け言語の要件ではありません。Lua では、2 つの文字列を連結することはできますが、文字列とブール値を連結することはできません。

強いか弱いか

「強く型付けされた」の反対は「弱く型付けされた」で、これは型システムを回避できることを意味します。C は、ポインター型をキャストするだけで他のポインター型に変換できるため、型付けが弱いことで有名です。Pascal は強く型付けされることを意図していましたが、設計上の見落とし (タグなしバリアント レコード) により型システムに抜け穴ができたため、技術的には弱く型付けされています。真に強く型付けされた言語の例には、CLU、Standard ML、Haskell などがあります。Standard ML は、実際に、言語が広く導入された後に発見された型システムの抜け穴を取り除くために、何度か改訂されています。

ここで一体何が起こっているのでしょうか?

全体的に、「強い」と「弱い」について話すことはあまり役に立たないことがわかりました。型システムに抜け穴があるかどうかは、抜け穴の正確な数と性質、実際に発生する可能性、抜け穴を悪用した場合の結果よりも重要ではありません。実際には、「強い」と「弱い」という用語を完全に避けるのが最善です。なぜなら、

  • アマチュアは、これらを「静的」と「動的」と混同することがよくあります。

  • どうやら「弱い型付け」は、暗黙的な変換の相対的な普及度または不在度について話すために一部の人々によって使用されているようです。

  • 専門家の間でも、これらの用語が正確に何を意味するかについて意見が一致していません。

  • 全体的に、聴衆に情報を提供したり、啓蒙したりすることはほとんど不可能です。

残念なことに、型システムに関しては、「強い」と「弱い」には普遍的に同意された技術的な意味はありません。型システムの相対的な強さについて議論したい場合は、どのような保証が提供され、どのような保証が提供されないかを正確に議論する方がよいでしょう。たとえば、「特定の型 (またはクラス) のすべての値は、その型のコンストラクターの 1 つを呼び出すことによって作成されたことが保証されていますか?」という質問は適切です。C では答えは「いいえ」です。CLU、F#、および Haskell では「はい」です。C++ についてはよくわかりませんが、知りたいです。

対照的に、静的型付けとは、プログラムが実行される前にチェックされ、プログラムが開始する前に拒否される可能性があることを意味します。動的型付けとは、実行中にの型がチェックされ、型付けが不適切な操作によってプログラムが停止したり、実行時にエラーが通知される可能性があることを意味します。静的型付けの主な理由は、このような「動的型エラー」が発生する可能性のあるプログラムを除外することです。

一方が他方を暗示していますか?

細かいことを言えば、いいえ。なぜなら、「強い」という言葉は実際には何の意味も持たないからです。しかし、実際には、人々はほとんどの場合、次の 2 つのうちのいずれかを行います。

  • 彼らは (誤って) 「強い」と「弱い」を「静的」と「動的」の意味で使用していますが、その場合、彼らは (誤って) 「強く型付けされた」と「静的に型付けされた」を同じ意味で使用しています。

  • 静的型システムの特性を比較するために、「強い」と「弱い」が使われます。動的型システムの「強い」または「弱い」について話す人はほとんどいません。実際には型システムを持たない FORTH を除いて、型システムを破壊できる動的型付け言語は思いつきません。定義上、これらのチェックは実行エンジンに組み込まれており、すべての操作は実行前に健全性チェックが行われます。

いずれにせよ、ある言語を「強く型付けされた」と呼ぶ人は、静的に型付けされた言語について話している可能性が非常に高いです。

おすすめ記事