来自邮件列表
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吗?升级的用户可能会看到意外的新的警告。
* 应该在弃用时警告还是不警告?