「なぜScalaの型システムはClojureのライブラリではないのですか?」という質問に簡単に答えるには:
型システムは scala ライブラリではなく、scala コンパイラの一部であるためです。scala 型システムの全能力は、コンパイル時にのみ存在します。JVM はそのようなことをサポートしていません。これは、型の消去と、単純に実行速度が低下するためです。また、それは必要ありません。静的に型付けされた言語を使用している場合、汚いことをしたくない限り、実行時に型情報は必要ありません。
編集:
@mikera jvm は確実に scala コンパイラを実行できますが、そのようなことは何も言いませんでした。jvm はそのような型システムをサポートしていないと言いました。ジェネリックもサポートしていません。実行時には、これらの型はすべてなくなります。コンパイラは、プログラムの正確性をチェックし、上位の種類の型/ジェネリックをすべて削除します。
例:
val xs: List[Int] = List(1,2,3,4)
val x1: Int = xs.head
実行時に次のようになります。
val xs: List = List.apply(1,2,3,4)
val x1: Int = xs.head.asInstanceOf[Int]
ただし、コンパイラが以前にチェックしたため、問題ではありません。リストに任意の値を入れることができ、実行時に値がキャストされた場所で正確に壊れるため、リフレクションを使用する場合にのみ問題が発生する可能性がありますInt
。
これが理由の 1 つであり、scala 型システムが scala ライブラリの一部ではなく、コンパイラに組み込まれている理由の 1 つです。
また、OP の質問は「... Scala の型システムが Clojure のライブラリではないのはなぜですか?」というものでした。「clojureのscalasなどの型システムを作成することは可能ですか?」ではありません。私はその質問に完璧に答えました。