来自邮件列表
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 : 变量#'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吗?升级的人员可能会看到新警告,这可能会令人惊讶。
*默认应该告警还是不告警弃用的内容?