来自邮件列表
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吗?升级的用户可能看到新警告,可能会感到惊讶。
*应该默认警告或不禁用弃用吗?