JVM: Возможно ли исправление / исправление производственного кода через удаленную реплику Clojure? - PullRequest
0 голосов
/ 03 апреля 2020

In Clojure для Java Программисты, часть 1 talk Рич Хикки упоминает это как одно из преимуществ Clojure:

Если вы создаете приложение с некоторым доступом к возможность загружать код - либо удаленное соединение repl, либо какой-либо способ сделать это. Ваши работающие производственные системы будут иметь возможность загружать исправления в работающие программы.

Мне интересно, насколько это легко на практике. Допустим, я знаю, что в одной функции есть ошибка, и я хочу переопределить / переопределить ее в производственном процессе через удаленную реплику

  • Возможно ли это?
  • Будет ли измененная версия оставаться активной после Я выхожу из repl?
  • Это поведение присутствует во всех контейнерах приложений JVM?

У меня нет опыта использования JVM в рабочей среде, и поэтому я задаю этот вопрос.

1 Ответ

1 голос
/ 03 апреля 2020

Возможно ли это?

Да, я бы порекомендовал посмотреть Радости и опасности интерактивного развития - Стюарт Сьерра он рассказывает историю НАСА об исправлении спутника в пространстве с использованием REPL.

Будет ли измененная версия оставаться активной после того, как я выйду из repl?

Когда вы переоцените функцию, изменения будут применяться везде, например,

(defn add1 [x]
  (+ x 2))

(defn foo [x]
  (add1 x))

(foo 1)

Обратите внимание (foo 1) => 3, если вы исправите и переоцените add1, а затем снова запустите (foo 1) => 2

...