Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, c-smile, Вы писали:
CS>>>Я ж про это и говорю.
CS>>>CS>>>const char[] - immutable.
CS>>> char[] - mutable.
CS>>>
VD>>immutable — это характиристика типа. const же всего лишь предохраняет от модификации переменной.
CS>C точки зрения формальной логики
CS>CS>class A{...};
CS>const A a;
CS>
CS>const A есть образование нового типа A' у которого отсутвуют (или закрыты) все мутирующие методы.
Нет здесь никакой логики. const всего лишь модификатор распространяющийся на переменную. Самому объекту от этого не горячо и не холодно. Вот такой код тебя ведь не смущат:
class A { };
void main()
{
A* a1 = new A();
const A* a2 = a2;
}
При этом a1 можно менять, а a2 нет. Но по твоим словам у них разный тип.
CS>immutability может быть "ручной" и "автоматической" — в С# доступна только "ручная". В C++ и первая и вторая.
В С# доступна инкапсуляция которая позволяет создать immutability-объекты. Отальное от лукавого.
Главное, что этого достаточно для создания immutability-классов решающих поставленную проблему.
CS>Я ж и говорю — зависит от ручной импелементации.
Как меня раздражает эта твоя "импелементации"... если бы ты знал.
CS> В Java например String immutable а DateTime — нет.
CS>Автоматической — нет.
А зачем автоматическое? Это характиристика типа. Пусть тот кто проектирует тип и определяет эту характиристику.
Причем я как бы не спорю, что нечто вроде readonly для локальных переменных очень не помешало бы в Шарпе. Но immutable тем не менее — это характеристика класса. Это можно сказать паттерн проектрования. И никакие const его не заменят.
Тут уж было бы разумно говорить о ключевом слове (или атрибуте) immutable применяемом к классу. Ну, чтобы запретить модификацию полей вне конструктора (т.е. дополнительная проверка).
CS>Мы говорим не про mutability enforcment,
Ну, пошли иностранные ругательства.
CS> а про нормальное использование.
Дык что есть нормальное это еще очень большой вопрос.
CS>Из-за того что в C++ используется deep immutability который(ая) есть вещь суровая, то для практических целей оставлен
CS>const_cast<> — явное снятие immutability.
Это ты себе придумываешь. С++ предоставляет возможность локальной защиты в виде объявления
переменных как неизменяемыми. Ничего "глубокого" тут нет.
Как показывает практика при работе в рамках подхода когда сам тип определяет возможность своей модификации эта константность не так уж и необходима. Скорее возникает ощущение отсуствие того к чему привык. Но это проходит.
CS>Полный режим readonly возможен только на хардверном уровне.
Ну почему же? Если у меня полностью типобезопасный язык и язык действительно декларирует, что "A != const A", то он обязан гарантировать невозможность изменения объектов типа const A. Просто С++ никогда не бы типобезопасным. Только и всего. Да и const в нем все же трактуется как модификатор переменной.
... << RSDN@Home 1.2.0 alpha rev. 516>>