1. ホーム
  2. type-safety

[解決済み] 強型付け言語と静的型付け言語の違いは何ですか?

2022-03-19 20:07:58

質問

また、一方は他方を意味するのでしょうか?

どのように解決するのですか?

<ブロッククオート

強型付け言語と静的型付け言語の違いは何ですか?

静的型付け言語では、コンパイル時に実装(コンパイラやインタプリタ)が型システムをチェックする。 例えば、コンパイラは浮動小数点数に対して整数の演算命令を使用しないことを保証しています。

しかし、専門的な文献で最も広く使われている定義は、「強く型付けされた言語では、プログラマが型システムの制約を回避することは不可能である」というものです。 この用語は、ほとんどの場合、静的型付け言語を説明するために使用されます。

静的と動的

静的型付けの反対は "動的型付け" で、これは次のことを意味します。

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

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

強いと弱い

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

本当はどうなんだろう?

全体として、quot;strong" と "weak" について話すことは、それほど有用ではないことがわかりました。 ある型システムに抜け穴があるかどうかは、抜け穴の正確な数や性質、それが実際に出てくる可能性、抜け穴を悪用した場合の結果よりも重要ではありません。 実際には 強い」「弱い」という言葉は使わないほうがいい。 なぜなら

  • 素人はよく、quot;static" と "dynamic" を混同してしまうのです。

  • 弱型付けは暗黙的変換の相対的な普及と不在について話すために使われることがあるようです。

  • 専門家の間でも、この用語の意味を正確に理解することに同意できない。

  • 全体として、聴衆に情報を提供したり、啓蒙したりすることは難しいでしょう。

悲しいことに、型システムに関して言えば strong"とweak"は、技術的に普遍的に合意された意味を持っているわけではありません。 型システムの相対的な強さを議論したいのであれば、どのような保証があり、どのような保証がないかを正確に議論したほうがよいでしょう。 たとえば、次のような質問をするのがよいでしょう。「ある型(またはクラス)のすべての値は、その型のコンストラクタのいずれかを呼び出すことで生成されたことが保証されていますか」。 CLU、F#、Haskellでは「イエス」です。 C++の場合はよく分かりませんが、知りたいと思います。

それに対して 静的型付け というのは、プログラムは 実行前にチェックする そのため、プログラムが開始される前に拒否される可能性があります。 動的な型付け の型は をチェックします。 期間中 型付けが不十分な場合、実行時にプログラムが停止したり、エラーが発生したりする可能性があります。 静的型付けを行う主な理由は、このような動的型付けエラーを起こす可能性のあるプログラムを除外するためである。

<ブロッククオート

一方は他方を意味するのでしょうか?

なぜなら、quot;strong"という言葉は、実際には何の意味も持たないからです。 しかし、実際には、人々はほとんど常に2つのうちの1つを行います。

  • 彼らは(間違って) "strong" と "weak" を、 "static" と "dynamic" の意味で使っており、この場合彼らは(間違って) "strongly typed" と "statically typed" を同じ意味で使っていることになります。

  • 静的型システムの特性を比較するために "strong" と "weak" を使っています。 動的な型システムで "strong" や "weak" について話す人は非常に稀です。 型システムのないFORTHを除けば、型システムを破壊できる動的型付け言語というのは思いつきません。 このようなチェックは実行エンジンに組み込まれていて、すべての操作は実行される前に正気かどうかチェックされるのです。

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