JVM:是否可以通过远程 Clojure repl hotfix/patch 生产代码?
JVM: Is it possible hotfix/patch production code via remote Clojure repl?
在 Clojure for Java Programmers Part 1 谈话中,Rich Hickey 提到这是 Clojure 的好处之一:
If you build an application with some access to the ability to load
code - either a remote repl connection or some way to do that. Your
running production systems will have this capability to have fixes
loaded into running programs.
我想知道它在实践中有多容易。假设我知道一个函数中有一个错误,我想 redefine/override 通过远程 repl
在生产中解决它
- 可能吗?
- 我退出 repl 后覆盖的版本是否仍然有效?
- 是否在所有 JVM 应用程序容器中都有此行为?
我没有在生产中使用 JVM 的任何经验,这就是问这个问题的原因。
Is it possible?
是的,我建议观看 The Joys and Perils of Interactive Development - Stuart Sierra 他讲述了 NASA 使用 REPL 在 space 中修补卫星的故事。
Will the overridden version stay active after I exit the repl?
当您重新评估函数时,更改将应用到所有地方,例如
(defn add1 [x]
(+ x 2))
(defn foo [x]
(add1 x))
(foo 1)
注意 (foo 1) => 3
如果您修复并重新评估 add1
然后 运行 再次 (foo 1) => 2
在 Clojure for Java Programmers Part 1 谈话中,Rich Hickey 提到这是 Clojure 的好处之一:
If you build an application with some access to the ability to load code - either a remote repl connection or some way to do that. Your running production systems will have this capability to have fixes loaded into running programs.
我想知道它在实践中有多容易。假设我知道一个函数中有一个错误,我想 redefine/override 通过远程 repl
在生产中解决它- 可能吗?
- 我退出 repl 后覆盖的版本是否仍然有效?
- 是否在所有 JVM 应用程序容器中都有此行为?
我没有在生产中使用 JVM 的任何经验,这就是问这个问题的原因。
Is it possible?
是的,我建议观看 The Joys and Perils of Interactive Development - Stuart Sierra 他讲述了 NASA 使用 REPL 在 space 中修补卫星的故事。
Will the overridden version stay active after I exit the repl?
当您重新评估函数时,更改将应用到所有地方,例如
(defn add1 [x]
(+ x 2))
(defn foo [x]
(add1 x))
(foo 1)
注意 (foo 1) => 3
如果您修复并重新评估 add1
然后 运行 再次 (foo 1) => 2