7

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を知っています- これは優れた作品です。それとは別に質問します。

4

2 に答える 2

11

はい、Clojure は uni-typed ですが、Sam Tobin-Hochstadt、uni-typed 分類は実際にはあまり有益ではないと主張しています。

単一型付け理論は、動的型付け言語でのプログラミングの性質についてほとんど明らかにしていません。主に、型理論における「動的」型の存在を正当化するのに役立ちます。

Typed Racketのようなプロジェクトは、そのような言語でプログラマーが利用する暗黙の型情報を正確に発見してモデル化するために考案されました。多くの場合、型は非常に正確であり、目に見える以上のことが行われていることを示しています。

于 2014-04-25T07:02:18.457 に答える