我想问一下 Clojure 上有哪些类型的安全语言结构?
我已经多次阅读 Luke VanderHart 和 Stuart Sierra 的“实用 Clojure”,但我仍然有明显的印象,即 Clojure(像其他 lisps 一样)并没有非常重视编译时验证检查。类型安全只是对正确语义进行编译时检查的一种(非常流行的)策略
我问这个问题是因为我渴望被证明是错误的;clojure 上有哪些设计模式可用于验证(在编译时,而不是在运行时)期望字符串的函数不会被调用,例如整数列表?
另外,我读过像 Paul Graham 这样非常聪明的人公开提倡 lisp 允许在其之上实现来自低级语言的所有内容(大多数人会说该语言本身正在其之上重新实现),所以如果那个断言会是真的,那么像类型检查这样的琐碎事情应该是小菜一碟。那么你是否觉得在 clojure 或其他 lisps 中存在类型系统(或实现此类类型系统的能力),这使程序员能够将验证检查从运行时偏移到编译时,甚至更好的设计-时间?