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