ほとんどのスクリプト言語が緩く型付けされているのはなぜですか?例えば
javascript、pythonなど?
まず、あなたの用語にはいくつかの問題があります。緩く型付けされた言語などというものはなく、スクリプト言語という用語も曖昧であり、最も一般的にはいわゆる動的プログラミング言語を指します。
異なるタイプ (つまり、 yieldかエラーか)がどの程度厳密に区別されるかについては、弱い型付けと強い型付けがあります。1 + "2"
3
また、動的型付けと静的型付けがあります。これは、型情報がいつ決定されるか (実行中または実行前) に関するものです。
では、動的言語とは何でしょうか? コンパイルではなく解釈される言語? 確かにそうではありません。言語の実行方法は、言語固有の特性ではなく、純粋な実装の詳細であるためです。実際、同じ言語のインタープリターとコンパイラーが存在する場合があります。Haskell には GHC と GHCi があり、C にも Ch インタプリタがあります。
それでは、動的言語とは何でしょうか。それらをどのように扱うかを通してそれらを定義したいと思います。
動的言語では、プログラムのプロトタイプを迅速に作成し、それを何らかの方法で動作させることが好きです。あなたがしたくないのは、プログラムの動作を正式に指定することです。意図したとおりに動作させたいだけです。
したがって、あなたが書くなら
foo = greatFunction(42)
foo.run()
スクリプト言語では、greatFunction
あるオブジェクトを返す数値を取るものがあると仮定するだけですrun
。コンパイラに対してこれを証明することは決してありません-事前定義された型、いいえIRunnable
.... これにより、動的型付けのドメインに自動的に移動します。
しかし、型推論もあります。型推論とは、静的に型付けされた言語では、コンパイラが自動的に型を判断することを意味します。結果のコードは非常に簡潔になる可能性がありますが、それでも静的に型付けされています。たとえば、
square list = map (\x -> x * x) list
ハスケルで。Haskell は、ここに含まれるすべての型を前もって把握します。私たちはlist
数字のリストであり、リストのmap
任意の要素に他の関数を適用しsquare
、別の数字のリストから数字のリストを生成する関数です。
それにもかかわらず、コンパイラーはすべてがうまくいくことを前もって証明できます - 何かがサポートする操作は正式に指定されています。したがって、私は Haskell をスクリプト言語とは決して呼びませんが、同等のレベルの表現力 (それ以上ではないにしても!) に達することができます。
全体として、スクリプト言語は動的に型付けされます。これは、指定せずに実行中のシステムのプロトタイプを作成できるためですが、関連するすべての操作が存在することを前提としています。これがスクリプト言語の目的です。
私はあなたの質問をよく理解していません。PHP、VBScript、およびUnixシェルを除けば、COMMAND.COM
私は緩く型付けされたスクリプト言語を実際に考えることはできません。
大まかに型付けされていないスクリプト言語の例としては、Python、Ruby、Mondrian、JavaFXScript、PowerShell、Haskell、Scala、ELisp、Scheme、AutoLisp、Io、Ioke、Seph、Groovy、Fantom、Boo、Cobra、Guile、Slate、Smalltalkがあります。 、Perl、…