Re[5]: const в D, требуется помощь клуба.
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.07.05 11:28
Оценка:
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.