Lisp 愛好家 (およびその他の動的言語愛好家) にとって、これは冒涜のように聞こえるかもしれませんが、静的 (コンパイル時) 型チェックをサポートするように Clojure コンパイラを拡張するのはどれほど難しいでしょうか?
静的型付けと動的型付けの賛成論と反対論を脇に置いて、これは可能ですか (「これはお勧めできません」)?
コンパイル時の型を強制する新しいリーダー マクロ (#^ マクロの拡張バージョン) を追加し、型情報をシンボル テーブルに追加すると、変数が誤用された場所にコンパイラがフラグを立てることができるようになると考えていました。たとえば、次のコードでは、コンパイル時エラーが予想されます (#* は「コンパイル時」タイプのマクロです)。
(defn get-length [#*String s] (.length s))
(defn test-get-length [] (get-length 2.0))
#^ マクロをグローバル変数 ( *compile-time-type-checking*
) で再利用して、コンパイラにチェックを強制することもできます。
実現可能性について何か考えはありますか?