来自邮件列表
http://groups.google.com/group/clojure/msg/c41d909bd58e4534。在不自知的情况下,很容易使用过时的命名空间或 vars。文档警告很小,而且没有编译器警告。
*建议:*
* 添加新的 {{\*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 已过时
;; 使用过时的宏 (在宏展开时)
(defmacro ^:deprecated m [x] x)
(m 5)
;;=> 过时警告,NO_SOURCE_PATH:7:1 : 宏 #'user/m 已过时
;; 使用过时的命名空间 (在加载时)
(ns foo {:deprecated "1.1"})
(ns bar (:require foo))
;;=> 过时警告:从命名空间 `bar` 加载已过时的命名空间 `foo`
*补丁:* 706-deprecated-ns-var-warnings-tested-3.diff
*问题:* 过时警告的默认值应该是true吗?升级的人可能会看到新的警告,这可能会令他们惊讶。
* 应该在过时的情况下默认警告或不警告吗?