弱い型付けの言語がまだ活発に開発されているのはなぜですか?


17

なぜ型の弱い言語がまだ活発に開発されているのだろうか。たとえば、書くことができることからどのようなメリットが得られますか

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

大きく異なる、型指定されたバージョンを使用する代わりに

int someInt = 1;
(...)
string SomeString = 'SomeText';

2番目の例で追加変数を宣言する必要があるのは事実ですが、それは本当に痛いのでしょうか?コンパイル時に型の安全性を強制し、型キャストの落とし穴を回避するため、すべての言語が厳密に型指定されるように努めるべきではありませんか?


9
「厳密に型指定された」は、明確に定義された用語ではありません。ほとんどの場合、「型システムを破壊することはできません」という意味です。潜在型とマニフェスト型、または静的型と動的型の可能性がある上記の説明とは直交しています。
フランクシェラー

10
いくつかの密接に関連する、ほぼ間違いなく重複する質問(タグ内の静的および動的なタイピングに言及する質問についてはSackOverflowを検索する)から正当な質問へと移行する、これが欠けているものは何ですか?

1
静的型付け言語と動的型付け言語の両方には長所と短所があります。動的に型付けされた言語は、迅速な開発またはプロトタイピングに適しています(そのため、「スクリプト言語」は通常動的に型付けされます)。
チャールズサルビア

6
最初の例は、変数に宣言された型がないPythonに少し似ています。ただし、Pythonは非常に強く型付けされた言語です。オブジェクト自体が、変更または強制することがほとんど不可能な型を持っているからです。用語の誤用は、この質問に答えるのを非常に難しくすると思います。
S.Lott

1
@delnanこの質問が2つの妥当な答えになり、火炎戦争に発展しなかったという事実が役立ちます。
アダムリア

回答:


25

強い/弱いタイピングと静的/動的なタイピングは直交しています。

強い/弱いとは、機能的に言​​えば、値のタイプが重要かどうかです。弱い型付けの言語では、たまたま数字で埋められた2つの文字列を取得し、整数の加算を実行できます。厳密に型指定された言語では、これはエラーです(最初に値を正しい型にキャストまたは変換しない限り)。強い/弱いタイピングは白黒のものではありません。ほとんどの言語は100%厳密でも100%脆弱でもありません。

静的/動的型付けは、型が値にバインドするか識別子にバインドするかに関するものです。動的に型指定された言語では、型に関係なく、任意の変数に任意の値を割り当てることができます。静的型付けはすべての識別子の型を定義し、異なる型からの割り当てはエラーであるか、暗黙的なキャストになります。一部の言語は、静的に宣言された型と型なし識別子(「バリアント」)を可能にするハイブリッドアプローチを採用しています。型推論もあります。これは、すべての型を明示的に宣言せずに静的型付けを可能にするメカニズムです。コンパイラに型を認識させることにより、Haskellはこれを広範囲に使用しvarます。

弱い動的プログラミングでは、実用的なアプローチが可能です。ほとんどの場合、言語はあなたの邪魔になりませんが、自分自身を足で撃っているときにも介入しません。対照的に、強力な静的型付けは、コンパイラーまたはインタープリターがエラーのクラスを検出できるように、コード内の値に関する特定の期待をプログラマーに明示的に表現させます。優れたタイプシステムを使用すると、プログラマーは値に対して実行できることとできないことを正確に定義できます。偶然に誰かが望ましくない何かを試みた場合、タイプシステムはそれを防止し、どこで何が間違っているのかを正確に示すことができます。


文字列の連結と追加のための独立した事業者とのHyperTalkなどの適切な弱い型付けされた言語(例えば前提と&連結するために)、などの操作"12"+3やが45 & "6"(彼らはそれぞれ、15を計算し、そして「456」)は、あいまいさを提起しません。より厳密に型付けされた言語では、文字列と数値の操作が禁止されるため、あいまいさを引き起こすことなく、文字列の連結と数値の加算の両方で「+」演算子を安全にオーバーロードできます。言語が、実行するタイプも操作も指定しない場合に問題が発生します。
supercat

4

弱いタイピングは、に沿ったものです1 == "TRUE"ウィキペディアのこのセクションは、違いをうまく示しています。

ウィキペディアのどちらの例も静的に入力されていないことに注意してください。これは2番目の例で参照するものです。

そのため、なぜ人々が動的に型付けされた言語を使用するのかという質問なら、答えは次のとおりです。静的型システムはあなたに制限を課します。多くの人は、表現力豊かな静的型システムを使用したことがないため、静的型付けの欠点が利点を上回るという結論に至ります。


0

弱い型の言語は、人々がそれらを使用し、好むため、まだ開発中です。弱い型付けが気に入らない場合は、弱い型付けの言語を使用しないでください。何かが唯一の真の道であり、誰もがそれを行うべきであると宣言することは、世界の複雑さを無視します。


0

コンパイル時に型の安全性を強制し、型キャストの落とし穴を回避するため、すべての言語が厳密に型指定されるように努めるべきではありませんか?

必ずしも。Objective-Cの学習:入門書は、Objective-Cのコンテキストでその質問に直接対処します。

弱い型付けの変数は、コレクションクラスなど、コレクション内のオブジェクトの正確なタイプが不明な場合に頻繁に使用されます。強く型付けされた言語の使用に慣れている場合、弱く型付けされた変数を使用すると問題が発生すると考えるかもしれませんが、実際には非常に柔軟であり、Objective-Cプログラムでより大きなダイナミズムを可能にします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.