С помощью Clojure (и других диалектов Лиспа) вы можете модифицировать работающий код. Итак, когда функция изменяется во время выполнения, доступно ли это изменение для нескольких потоков?
Я пытаюсь понять, как технически это работает в параллельных условиях: если несколько потоков используют функцию foo, что происходит, когда я переопределяю (скажем, используя defn) функция foo?
Должна быть какая-то синхронизация: когда и как такая синхронизация происходит и сколько это стоит?
Скажем, в JVM функция ссылается на volatile
ссылку? Если да, значит ли это, что каждый раз, когда происходит «поиск функции», нужно платить volatile
стоимость?