来自邮件列表
http://groups.google.com/group/clojure/msg/c41d909bd58e4534。在不清楚自己在做什么的情况下,很容易使用已废弃的命名空间或变量。文档中的警告很细小,并且没有编译器警告。
*建议:*
* 添加新的{{\*warn-on-deprecated*}}动态变量,默认设置为false
* 当加载{{{:deprecated true}}}命名空间时,向stderr发出警告。
* 当分析{{{:deprecated true}}}变量时,向stderr发出警告。
* 当展开{{{:deprecated true}}}宏时,向stderr发出警告。
* 新的系统属性clojure.compiler.warn-on-deprecated
* 以clojure.compiler.warn-on-deprecated编译Clojure本身
* 修复Clojure内部的废弃警告(replicate, clear-agent-errors)
* 使用:deprecation标记将clojure.parallel标记为废弃
示例
(set! *warn-on-deprecated* true)
;; 使用废弃的变量(在编译时)
(defn ^:deprecated f [x] x)
(f 5)
;;=> 废弃警告,NO_SOURCE_PATH:7:1 : var #'user/f is deprecated
;; 使用废弃的宏(在宏展开时)
(defmacro ^:deprecated m [x] x)
(m 5)
;;=> 废弃警告,NO_SOURCE_PATH:7:1 : macro #'user/m is deprecated
;; 使用废弃的命名空间(在加载时)
(ns foo {:deprecated "1.1"})
(ns bar (:require foo))
;;=> 废弃警告:正在从命名空间 `bar` 加载已废弃的命名空间 `foo`
*补丁:* 706-deprecated-ns-var-warnings-tested-3.diff
*问题:* 废弃警告的默认值应该是true吗?升级的用户可能会看到新的警告,这可能会令人惊讶。
* 默认值应该是警告还是不警告废弃的事项?