Я знаю, что это может звучать как богохульство Lisp aficionados (и других любителей динамических языков), но насколько сложно было бы улучшить компилятор Clojure для поддержки статической (компиляции) проверки типов?
Отключение аргументов за и против статического и динамического ввода, возможно ли это (не "это целесообразно" )?
Я думал, что добавление нового макроса читателя для принудительного использования типа времени компиляции (расширенная версия макроса # ^) и добавление информации о типе в таблицу символов позволит компилятору отмечать места, где переменные были неправильно использованы, Например, в следующем коде я ожидал бы ошибку времени компиляции (# * - это макрос типа "время компиляции" ):
(defn get-length [#*String s] (.length s))
(defn test-get-length [] (get-length 2.0))
МакроС# ^ можно даже повторно использовать с глобальной переменной (*compile-time-type-checking*
), чтобы заставить компилятор выполнить проверки.
Любые мысли о выполнимости?