来自邮件列表
http://groups.google.com/group/clojure/msg/c41d909bd58e4534。在不知情的情况下使用已弃用的命名空间或变量很容易。文档警告很小,且没有编译器警告。
*建议:*
* 添加新的 {{\*warn-on-deprecated*}} 动态变量,默认为 false
* 当加载具有{{{:deprecated true}}}的命名空间时向标准错误输出警告。
* 当分析具有{{{:deprecated true}}}的变量时向标准错误输出警告。
* 当展开具有{{{:deprecated true}}}的宏时向标准错误输出警告。
* 新的系统属性 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 吗?正在升级的人可能会看到新的警告,可能会让人感到惊讶。
* 应该默认警告或无警告弃用吗?