Я часто видел термины immutable
и const
использовал их взаимозаменяемо. Однако, из моего (небольшого) опыта, они сильно отличаются по «контракту», который они заключают в коде:
Immutable заключает договор о том, что этот объект не изменится (например, кортежи Python, строки Java).
Const заключает договор о том, что в области действия этой переменной она не будет изменена (никаких обещаний относительно того, что другие потоки могут сделать с объектом, на который указывает этот период, например, с ключевым словом C / C ++).
Очевидно, что они не эквивалентны, если только язык не является однопоточным (PHP) или не имеет линейной или уникальной системы ввода (Clean, Mercury, ATS).
Во-первых, верно ли мое понимание этих двух понятий?
Во-вторых, если есть разница, почему они почти исключительно используются взаимозаменяемо?
const
не существует в каждом языке, а изменчивость и неизменность не существуют в каждом языке, поэтому использование этого языка в качестве агониста не применимо. Это язык конкретных только там , где применяются эти понятия.