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