Я изучал clojure lib, когда заметил, что изменчивое поле было аннотировано ^:unsynchronized-mutable. Mutable изменчиво, но я понятия не имел, что имел в виду синхронизирован часть, так что я прочитал docs, которые содержат:Каковы семантические последствия: volatile-mutable versus: unsynchronized-mutable?
Примечание хорошо, что изменяемые поля чрезвычайно трудно правильно использовать , и присутствуют только облегчают строительство более высоких конструкций уровня , таких как ссылочные типы Clojure, в Clojure . Они предназначены только для экспертов - если семантика и последствия of: volatile-mutable или: unsynchronized-mutable не являются незамеченными , вам не следует их использовать.
Я не мог получить нюанс: это говорит о том, что на практике не имеет значения, какую аннотацию изменчивости я выбираю, или что люди должны просто забыть об использовании изменяемых типов вообще?
И, ради любопытства, на более низком уровне абстракции, какова семантическая разница между ними?
Спасибо!
Это, безусловно, говорят, что вы должны ** не ** использовать изменяемые поля. – Chuck
Ссылка на исходный пример теперь сломана, но для тех, кто сейчас задается вопросом об источнике предупреждения, он находится в docstring для '' deftype' '(http://clojuredocs.org/clojure.core/deftype). – Mars