Robert Harperは、 「動的言語は静的言語である」という興味深い記事を書きました。その中で彼は次のように書いています。
そして、これこそまさに動的型付け言語の問題点です。型を無視する自由を与えるのではなく、単一の型への注意を制限するという束縛を課します! すべての値はそのタイプの値でなければなりません。選択の余地はありません!
これは、 uni-typed languagesを意味するようになりました。(単一タイプの言語)。
現在、Clojureは動的言語であると主張しています。
Clojure は、Java 仮想マシン (および CLR、JavaScript) を対象とする動的プログラミング言語です。汎用言語として設計されており、スクリプト言語の親しみやすさとインタラクティブな開発を、マルチスレッド プログラミング用の効率的で堅牢なインフラストラクチャと組み合わせています。Clojure はコンパイル済み言語です。JVM バイトコードに直接コンパイルされますが、完全に動的なままです。Clojure がサポートするすべての機能は、実行時にサポートされます。
「動的」とは、「型を持たない」というよりも、「実行時に対話できる」ことを意味します。
現在、静的と動的の間で行われている重要な違いは、「コンパイル時に型エラーを取得できますか?」ということのようです。
次の Clojure コードを記述した場合:
(deftype circle-type [radius] )
(deftype square-type [side-length])
(defn def-check-type [new-symbol-type existing-symbol]
(let [existing-symbol-type (type existing-symbol)]
(cond
(= new-symbol-type existing-symbol-type)
(def new-symbol existing-symbol)
:else (str "types didn't match: " new-symbol-type " : " existing-symbol-type))))
(println (def-check-type circle-type (square-type. 2)));)
次に、Leiningen でコンパイルします。
lein uberjar
次に、次のようになります。
$ lein uberjar
Compiling clojure-unittyped.core
types didn't match: class clojure_unittyped.core.circle-type : class clojure_unittyped.core.square-type
これは、動的言語でのコンパイル時の型エラーのように見えます。
私の質問は次のとおりです。Clojure は Uni-Typed ですか?
編集 - 私はcore.typedを知っています- これは優れた作品です。それとは別に質問します。