言語を強く型付けするものは何ですか? 強く型付けされた言語の最も重要な側面を探しています。
昨日、PowerShell が厳密に型指定されているかどうかを尋ねましたが、「厳密に型指定された」という定義について誰も同意できなかったので、定義を明確にすることを検討しています。
ウィキペディアやその他の情報源へのリンクは自由ですが、答えを切り取って貼り付けるだけではいけません。
言語を強く型付けするものは何ですか? 強く型付けされた言語の最も重要な側面を探しています。
昨日、PowerShell が厳密に型指定されているかどうかを尋ねましたが、「厳密に型指定された」という定義について誰も同意できなかったので、定義を明確にすることを検討しています。
ウィキペディアやその他の情報源へのリンクは自由ですが、答えを切り取って貼り付けるだけではいけません。
「強くタイプされた」という用語には、合意された定義はありません。
誰かが間違っていることが証明されたときはいつでも、彼らはそれを彼らが意味したいものを意味するように再定義することができるので、それは炎上戦争で「素晴らしい」議論をします。それ以外は、この用語は本当の目的を果たしません。
この用語は使用しないのが最善です。使用する場合は、最初に厳密に定義してください。他の誰かがそれを使用しているのを見たら、その人に用語を定義するように頼んでください。
誰もが独自の定義を持っています。私が見たものは次のとおりです。
型理論には、ある型システムが別の型システムよりも強いという概念があります。e1
特に、型システムでは受け入れられるが型システムでは拒否されるような式T1
が存在する場合、はよりも強いと言われます。ここで注意すべき2つの重要なことがあります。T2
T2
T1
「Types and Programming Languages and Advanced Types and Programming Languages」を書いた BC Pierce によると:
「強く型付けされた」、「静的に型付けされた」、「安全」などの用語を整理するために数週間を費やしましたが、驚くほど難しいことがわかりました...これらの用語の使用法は非常に多様であるため、ほとんどレンダリングされません使い物にならない。
ですから、あなたの同僚が反対するのも不思議ではありません。
私は最も簡単な答えに行きます:キャストせずに文字列とintを連結できる場合、それは強く型付けされていません。
編集:コメントに記載されているように、Javaはそれを行うだけです:-(
重要なのは、静的に型付けされたものと厳密に型付けされたものとの間には違いがあることを覚えておくことです。厳密に型指定された言語とは、一度割り当てられると、特定の変数が再割り当てされるまで常に特定の型として動作することを意味します。定義上、Java や C# などの静的型付け言語は厳密に型付けされていますが、Ruby や Python などの多くの一般的な動的言語も厳密に型付けされています。
したがって、強く型付けされた言語では
x = "5"
x は常に文字列であり、整数になることはありません。
特定の弱く型付けされた言語では、次のようなことができます
x = "5"
y = x + 3
// y is now 8
人々は、静的に型付けされたものと強く型付けされたものを混同しています。静的型付けとは、「文字列は文字列であり、文字列である」ことを意味します。強い型付けとは、「これを文字列にすると、別のものとして再割り当てされるまで文字列として扱われる」ことを意味します。
編集:結局のところ、他の誰かがこれを指摘したのを見ます:)
あるインタビューで誰かが言っているのを聞きました (それは C# の Anders Hejlsberg であり、turbo Pascal で有名だったと思います)。
また、静的型付け言語が変数に型を割り当て、動的型付け言語が変数に格納されたオブジェクトに型を与える場合、強い型付け、弱い型付け、静的型付け、および動的型付けの間には多くの混乱があります。
詳細についてはウィキペディアを試してください。ただし、決定的な答えは期待しないでください: http://en.wikipedia.org/wiki/Strongly_typed_language
「強く型付けされた」という用語は、完全に無意味です。それは意味がありませんし、決してしませんでした。主張されている定義の一部が正確であったとしても、区別の理由については何の意味もありません。言語が強く型付けされているかどうか (それが意味するものは何でも) を知り、議論し、議論することが重要なのはなぜですか?
これは、「Web 2.0」または「OEM」という用語に非常に似ていますが、これも実際には意味がありません。
興味深いのは、これらのフレーズがどのように始まり、日常のコミュニケーションに根付くかです。
厳密に型指定されているとは、特定の型の変数を宣言することを意味し、その変数をキャストせずに別の型に変換しようとすると、コンパイラーはヒッシーフィットをスローします。
例(Javaで気をつけて):
int i = 4;
char s = i; // Type mismatch: cannot convert from int to char