私は一般的に動的言語の経験はあまりありませんが、私が知っている動的言語の 1 つである JavaScript (別名 ECMAScript) は大好きです。
ちょっと待って、ここでの議論は何ですか?動的コンパイル?それとも動的型付け?JavaScript は両方のベースをカバーしているので、両方について話そうと思います:
動的コンパイル:
まず、動的言語がコンパイルされ、コンパイルは後回しになります。Java と .NET は実際には 2 回コンパイルされます。1 つはそれぞれの中間言語に、もう 1 つは動的に機械語に変換されます。
しかし、コンパイルが延期されると、結果がより速く表示されます。それが1つの利点です。ファイルを保存するだけで、プログラムの動作をかなり迅速に確認できます。
もう 1 つの利点は、実行時にコードを記述してコンパイルできることです。これが静的にコンパイルされたコードで可能かどうかはわかりません。JavaScript をコンパイルするものは最終的にマシン コードであり、静的にコンパイルされるため、そうに違いないと思います。しかし、動的言語では、これは簡単なことです。コードはそれ自体を記述して実行できます。(そして、.NETがこれを実行できると確信していますが、.NETがコンパイルするCILはとにかく動的にコンパイルされ、C#ではそれほど簡単ではありません)
動的型付け:
動的型付けは静的型付けよりも表現力があると思います。私が表現力豊かなという用語を非公式に使用していることに注意してください。これは、動的型付けがより少ない量でより多くのことを言うことができると言うことです。JavaScript コードを次に示します。
var Person = {};
今、どんな人か知っていますか?一般的な辞書です。私がすることができます:
Person["First_Name"] = "ジョン";
Person["Last_Name"] = "スミス";
しかし、それはオブジェクトでもあります。これらの「キー」のいずれかを次のように参照できます。
Person.First_Name
そして、必要と思われるメソッドを追加します。
Person.changeFirstName = function(newName) {
this.First_Name = newName;
};
確かに、newName が文字列でない場合、問題が発生する可能性があります。すぐに見つかることはありませんが、自分で確認できます。表現力と柔軟性を安全と引き換えにする問題です。私自身、型などをチェックするためのコードを追加することは気にしません。また、型のバグに遭遇したことはまだありません。 ) ) )。しかし、私はその場で適応する能力をとても楽しんでいます.