来自邮件列表
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 吗?升级的用户可能会看到新的警告,这可能会令人惊讶。
**应该默认在过时的情况下警告或无声警告吗?