Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, prVovik, Вы писали:
V>>С точки зрения шарпа, тут косяк в архитектуре, так как по сути передаваемый объект имеет открытые методы и свойства, доступ к которым должен быть закрыт. То есть надо было передавать не объект целиком, а, лишь, некоторый тоненький интерфейс, через который можно делать только то, что разрешено явно. Хорошо это, или плохо — это другой вопрос. Я вот не знаю, хорош этот подход, или, наоборот плох. Хотелось бы услышать соображения общественности GZ>На мой взгляд здесь сколько не косяк, а именно недоработочка. Если бы у типа был некоторый модификатор который запрещал бы менять внутреннее состояние объекта кроме как в конструкторе, IMHO, это было бы правильнее и проще.
Но факт остается фактом: попытка вызвать метод, который меняет состояние, это фактически попытка вызова закрытого в данном контексте метода. Для закрытия методов в зависимости от контекста имеются штатные механизмы. Да, писанины выходит больше, но, зато все очень гибко и понятно. Идея с модификатором, конечно, хороша, но у нее есть один приличный косяк: как определять, меняет ли метод внутреннее состояние объекта, или не меняет? Вот чтобы рещить эту проблему и придется добавлять всякие консткасты, за использование которых джедаи потом "бъют морды".
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[4]: Нет возможности использовать константные ссылки
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, GlebZ, Вы писали:
GZ>>На мой взгляд здесь сколько не косяк, а именно недоработочка. Если бы у типа был некоторый модификатор который запрещал бы менять внутреннее состояние объекта кроме как в конструкторе, IMHO, это было бы правильнее и проще. WH>И я о том же. Должны быть изменяемые и не изменяемые объекты. WH>А где-то изменяемый и где-то не изменяемый объект это прямой путь на минное поле.
Как определить, что метод не меняет состояние объекта?
AF>>Все равно я думаю, что escape-анализ — это самый правильный путь. Пусть и более сложный в реализации.
VD>Ради справедливости надо заметить, что тогда по уму нужно отказываться вообще от вэлью-типов. Это снимет море проблем.
И потеряем одно интересное св-во. Для вэлью типа логически верно то экземпляр и его копия — это одно и то же. Удобное весьма св-во. Для классического ОО два экземпляра объекта — это как бы означает два разных объекта.
Здравствуйте, WolfHound, Вы писали:
VD>>Но оптимизатр при этом должен будет быть просто зверским. Иначе будет ну очень не быстро и расточительно по памяти. WH>И должен он будет работать в глобальном масштабе... Ибо если на тойже виртуальной машине сделать межпроцессное общение типа как в сингулярити...
Подозреваю, что рано или поздно всё к этому и придет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Нет возможности использовать константные ссылки
Здравствуйте, prVovik, Вы писали:
V>Как определить, что метод не меняет состояние объекта?
Это должно быть свойством типа. Как value типы и reference типы. Также должно быть еще одно измерение mutable типы и imutable типы.
Те объект либо изменяемый либо нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, vdimas, Вы писали:
V>И потеряем одно интересное св-во. Для вэлью типа логически верно то экземпляр и его копия — это одно и то же. Удобное весьма св-во. Для классического ОО два экземпляра объекта — это как бы означает два разных объекта.
Для этого есть метод Equals. Перегружай его, и сравнивай объекты как тебе нравится.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Нет возможности использовать константные ссылки
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, prVovik, Вы писали:
V>>Как определить, что метод не меняет состояние объекта? WH>Это должно быть свойством типа. Как value типы и reference типы. Также должно быть еще одно измерение mutable типы и imutable типы. WH>Те объект либо изменяемый либо нет.
Ну вот мы указали, что класс imutable. А он внутри себя пишет в лог. Как в этом случае должен поступить компилятор?
Здравствуйте, AndreiF, Вы писали:
VD>>>Но оптимизатр при этом должен будет быть просто зверским. Иначе будет ну очень не быстро и расточительно по памяти. WH>>И должен он будет работать в глобальном масштабе... Ибо если на тойже виртуальной машине сделать межпроцессное общение типа как в сингулярити...
AF>Подозреваю, что рано или поздно всё к этому и придет.
Подозреваю, что рано или поздно люди смогут жить на Луне. Но это еще не значит, что надо сегодня в качестве машины покупать луноход.
Здравствуйте, AndreiF, Вы писали:
WH>>И должен он будет работать в глобальном масштабе... Ибо если на тойже виртуальной машине сделать межпроцессное общение типа как в сингулярити... AF>Подозреваю, что рано или поздно всё к этому и придет.
Те предлогаешь каждый раз когда в системе появляется новый код перекомпилировать всю систему?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, AndreiF, Вы писали:
WH>>>И должен он будет работать в глобальном масштабе... Ибо если на тойже виртуальной машине сделать межпроцессное общение типа как в сингулярити... AF>>Подозреваю, что рано или поздно всё к этому и придет. WH>Те предлогаешь каждый раз когда в системе появляется новый код перекомпилировать всю систему?
ага, мы уже проходили это светлое будущее с шаблонами в С++
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[4]: Нет возможности использовать константные ссылки
Здравствуйте, WolfHound, Вы писали:
WH>И я о том же. Должны быть изменяемые и не изменяемые объекты. WH>А где-то изменяемый и где-то не изменяемый объект это прямой путь на минное поле.
Только тут есть одна сложность. По настоящему этим воспользоваться нельзя. Есть unsafe режим которому все эти модификаторы по барабану. В Net постоянно закрывают дырки связанные с этим вопросом. Например в StringBuilder закрыли дырку в том, что он возвращал один и тот же string в разные потоки. Вобщем с unsafe все значительно сложнее.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Нет возможности использовать константные ссылки
Здравствуйте, prVovik, Вы писали:
V>Ну вот мы указали, что класс imutable. А он внутри себя пишет в лог. Как в этом случае должен поступить компилятор?
Зачем imutable классу писать в лог? Он де блин imutable.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Нет возможности использовать константные ссылки
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, prVovik, Вы писали:
V>>Ну вот мы указали, что класс imutable. А он внутри себя пишет в лог. Как в этом случае должен поступить компилятор? WH>Зачем imutable классу писать в лог? Он де блин imutable.
А каким боком запись в лог меняет состояние объекта? К тому же может он пишет в лог только на этапе отладки?
WolfHound wrote:
>> > Вот за const_cast нужно бить морду. Причем сильно, длого и прилюдно. > kan>А в каком языке есть const, но нет const_cast? > Ты лучше покажи язык кроме С++ где этот самый const_cast есть...
Потому что это единственный (мне известный) язык (не функциональный) где есть const.
Автор вопроса о const явно подразумевал C#, на крайняк CLI, что явно не функциональные языки.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
FR wrote:
>> > kan>Почему-то мне кажется, что const нельзя делать без const_cast, а эта >> > операция не согласуется с идеологией безопасных языков. >> > Вот за const_cast нужно бить морду. Причем сильно, длого и прилюдно. > kan>А в каком языке есть const, но нет const_cast? > В большинстве функциональных, правда неявный
Функциональщина не в счёт, там вопрос о const ни у кого и не возникает, имхо.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Нет возможности использовать константные ссылки
prVovik wrote:
> V>>Как определить, что метод не меняет состояние объекта? > WH>Это должно быть свойством типа. Как value типы и reference типы. > Также должно быть еще одно измерение mutable типы и imutable типы. > WH>Те объект либо изменяемый либо нет. > > Ну вот мы указали, что класс imutable. А он внутри себя пишет в лог. Как > в этом случае должен поступить компилятор?
Лог — не состояние объекта, это другой объект, объект содержит лишь указатель на него (вот указатель изменить нельзя, но
указуемый объект можно).
В общем, посмотри как с C++ сделано.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, prVovik, Вы писали:
WH>>Те предлогаешь каждый раз когда в системе появляется новый код перекомпилировать всю систему? V>ага, мы уже проходили это светлое будущее с шаблонами в С++
Нет. По сравнению с тем что предлагается шалоны С++ это детский лепет. Ибо предлагают перекомпилировать вобще всеь софт на машине каждый раз когда что-то меняется.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Нет возможности использовать константные ссылки
kan>Лог — не состояние объекта, это другой объект, объект содержит лишь указатель на него (вот указатель изменить нельзя, но kan>указуемый объект можно). kan>В общем, посмотри как с C++ сделано.
Да знаю я, как оно там сделано. А вот WolfHound говорит, что запись в лог состояние меняет, так как идет обращение к неконстантному объекту, от которого теоретически может зависеть исходный объект. А вот есть ли реально зависимость, или нет знать может только программист, отсюда и вытекает необходимость костылей вроде консткаста.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, prVovik, Вы писали:
WH>>>Те предлогаешь каждый раз когда в системе появляется новый код перекомпилировать всю систему? V>>ага, мы уже проходили это светлое будущее с шаблонами в С++ WH>Нет. По сравнению с тем что предлагается шалоны С++ это детский лепет. Ибо предлагают перекомпилировать вобще всеь софт на машине каждый раз когда что-то меняется.