Re[3]: Нет возможности использовать константные ссылки
От: prVovik Россия  
Дата: 10.11.06 12:44
Оценка: -1
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, prVovik, Вы писали:


V>>С точки зрения шарпа, тут косяк в архитектуре, так как по сути передаваемый объект имеет открытые методы и свойства, доступ к которым должен быть закрыт. То есть надо было передавать не объект целиком, а, лишь, некоторый тоненький интерфейс, через который можно делать только то, что разрешено явно. Хорошо это, или плохо — это другой вопрос. Я вот не знаю, хорош этот подход, или, наоборот плох. Хотелось бы услышать соображения общественности

GZ>На мой взгляд здесь сколько не косяк, а именно недоработочка. Если бы у типа был некоторый модификатор который запрещал бы менять внутреннее состояние объекта кроме как в конструкторе, IMHO, это было бы правильнее и проще.

Но факт остается фактом: попытка вызвать метод, который меняет состояние, это фактически попытка вызова закрытого в данном контексте метода. Для закрытия методов в зависимости от контекста имеются штатные механизмы. Да, писанины выходит больше, но, зато все очень гибко и понятно. Идея с модификатором, конечно, хороша, но у нее есть один приличный косяк: как определять, меняет ли метод внутреннее состояние объекта, или не меняет? Вот чтобы рещить эту проблему и придется добавлять всякие консткасты, за использование которых джедаи потом "бъют морды".
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[4]: Нет возможности использовать константные ссылки
От: prVovik Россия  
Дата: 10.11.06 12:46
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, GlebZ, Вы писали:


GZ>>На мой взгляд здесь сколько не косяк, а именно недоработочка. Если бы у типа был некоторый модификатор который запрещал бы менять внутреннее состояние объекта кроме как в конструкторе, IMHO, это было бы правильнее и проще.

WH>И я о том же. Должны быть изменяемые и не изменяемые объекты.
WH>А где-то изменяемый и где-то не изменяемый объект это прямой путь на минное поле.

Как определить, что метод не меняет состояние объекта?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[4]: недостатки системы типов .NET
От: vdimas Россия  
Дата: 10.11.06 12:47
Оценка:
Здравствуйте, VladD2, Вы писали:


AF>>Все равно я думаю, что escape-анализ — это самый правильный путь. Пусть и более сложный в реализации.


VD>Ради справедливости надо заметить, что тогда по уму нужно отказываться вообще от вэлью-типов. Это снимет море проблем.


И потеряем одно интересное св-во. Для вэлью типа логически верно то экземпляр и его копия — это одно и то же. Удобное весьма св-во. Для классического ОО два экземпляра объекта — это как бы означает два разных объекта.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: недостатки системы типов .NET
От: AndreiF  
Дата: 10.11.06 12:49
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

VD>>Но оптимизатр при этом должен будет быть просто зверским. Иначе будет ну очень не быстро и расточительно по памяти.

WH>И должен он будет работать в глобальном масштабе... Ибо если на тойже виртуальной машине сделать межпроцессное общение типа как в сингулярити...

Подозреваю, что рано или поздно всё к этому и придет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Нет возможности использовать константные ссылки
От: AndreiF  
Дата: 10.11.06 12:51
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>А где-то изменяемый и где-то не изменяемый объект это прямой путь на минное поле.


обоснуй
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Нет возможности использовать константные ссылки
От: WolfHound  
Дата: 10.11.06 12:52
Оценка: +1
Здравствуйте, prVovik, Вы писали:

V>Как определить, что метод не меняет состояние объекта?

Это должно быть свойством типа. Как value типы и reference типы. Также должно быть еще одно измерение mutable типы и imutable типы.
Те объект либо изменяемый либо нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: недостатки системы типов .NET
От: AndreiF  
Дата: 10.11.06 12:54
Оценка:
Здравствуйте, vdimas, Вы писали:

V>И потеряем одно интересное св-во. Для вэлью типа логически верно то экземпляр и его копия — это одно и то же. Удобное весьма св-во. Для классического ОО два экземпляра объекта — это как бы означает два разных объекта.


Для этого есть метод Equals. Перегружай его, и сравнивай объекты как тебе нравится.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Нет возможности использовать константные ссылки
От: prVovik Россия  
Дата: 10.11.06 12:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, prVovik, Вы писали:


V>>Как определить, что метод не меняет состояние объекта?

WH>Это должно быть свойством типа. Как value типы и reference типы. Также должно быть еще одно измерение mutable типы и imutable типы.
WH>Те объект либо изменяемый либо нет.

Ну вот мы указали, что класс imutable. А он внутри себя пишет в лог. Как в этом случае должен поступить компилятор?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[6]: недостатки системы типов .NET
От: fmiracle  
Дата: 10.11.06 12:56
Оценка: +1 :)
Здравствуйте, AndreiF, Вы писали:

VD>>>Но оптимизатр при этом должен будет быть просто зверским. Иначе будет ну очень не быстро и расточительно по памяти.

WH>>И должен он будет работать в глобальном масштабе... Ибо если на тойже виртуальной машине сделать межпроцессное общение типа как в сингулярити...

AF>Подозреваю, что рано или поздно всё к этому и придет.


Подозреваю, что рано или поздно люди смогут жить на Луне. Но это еще не значит, что надо сегодня в качестве машины покупать луноход.
Re[6]: недостатки системы типов .NET
От: WolfHound  
Дата: 10.11.06 12:59
Оценка:
Здравствуйте, AndreiF, Вы писали:

WH>>И должен он будет работать в глобальном масштабе... Ибо если на тойже виртуальной машине сделать межпроцессное общение типа как в сингулярити...

AF>Подозреваю, что рано или поздно всё к этому и придет.
Те предлогаешь каждый раз когда в системе появляется новый код перекомпилировать всю систему?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: недостатки системы типов .NET
От: prVovik Россия  
Дата: 10.11.06 13:03
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, AndreiF, Вы писали:


WH>>>И должен он будет работать в глобальном масштабе... Ибо если на тойже виртуальной машине сделать межпроцессное общение типа как в сингулярити...

AF>>Подозреваю, что рано или поздно всё к этому и придет.
WH>Те предлогаешь каждый раз когда в системе появляется новый код перекомпилировать всю систему?

ага, мы уже проходили это светлое будущее с шаблонами в С++
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[4]: Нет возможности использовать константные ссылки
От: GlebZ Россия  
Дата: 10.11.06 13:04
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>И я о том же. Должны быть изменяемые и не изменяемые объекты.

WH>А где-то изменяемый и где-то не изменяемый объект это прямой путь на минное поле.
Только тут есть одна сложность. По настоящему этим воспользоваться нельзя. Есть unsafe режим которому все эти модификаторы по барабану. В Net постоянно закрывают дырки связанные с этим вопросом. Например в StringBuilder закрыли дырку в том, что он возвращал один и тот же string в разные потоки. Вобщем с unsafe все значительно сложнее.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Нет возможности использовать константные ссылки
От: WolfHound  
Дата: 10.11.06 13:05
Оценка:
Здравствуйте, prVovik, Вы писали:

V>Ну вот мы указали, что класс imutable. А он внутри себя пишет в лог. Как в этом случае должен поступить компилятор?

Зачем imutable классу писать в лог? Он де блин imutable.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Нет возможности использовать константные ссылки
От: prVovik Россия  
Дата: 10.11.06 13:07
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, prVovik, Вы писали:


V>>Ну вот мы указали, что класс imutable. А он внутри себя пишет в лог. Как в этом случае должен поступить компилятор?

WH>Зачем imutable классу писать в лог? Он де блин imutable.

А каким боком запись в лог меняет состояние объекта? К тому же может он пишет в лог только на этапе отладки?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[6]: недостатки системы типов .NET
От: kan Великобритания  
Дата: 10.11.06 13:14
Оценка: +1
WolfHound wrote:

>> > Вот за const_cast нужно бить морду. Причем сильно, длого и прилюдно.

> kan>А в каком языке есть const, но нет const_cast?
> Ты лучше покажи язык кроме С++ где этот самый const_cast есть...
Потому что это единственный (мне известный) язык (не функциональный) где есть const.
Автор вопроса о const явно подразумевал C#, на крайняк CLI, что явно не функциональные языки.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: недостатки системы типов .NET
От: kan Великобритания  
Дата: 10.11.06 13:15
Оценка: -1
FR wrote:

>> > kan>Почему-то мне кажется, что const нельзя делать без const_cast, а эта

>> > операция не согласуется с идеологией безопасных языков.
>> > Вот за const_cast нужно бить морду. Причем сильно, длого и прилюдно.
> kan>А в каком языке есть const, но нет const_cast?
> В большинстве функциональных, правда неявный
Функциональщина не в счёт, там вопрос о const ни у кого и не возникает, имхо.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Нет возможности использовать константные ссылки
От: kan Великобритания  
Дата: 10.11.06 13:19
Оценка:
prVovik wrote:

> V>>Как определить, что метод не меняет состояние объекта?

> WH>Это должно быть свойством типа. Как value типы и reference типы.
> Также должно быть еще одно измерение mutable типы и imutable типы.
> WH>Те объект либо изменяемый либо нет.
>
> Ну вот мы указали, что класс imutable. А он внутри себя пишет в лог. Как
> в этом случае должен поступить компилятор?
Лог — не состояние объекта, это другой объект, объект содержит лишь указатель на него (вот указатель изменить нельзя, но
указуемый объект можно).
В общем, посмотри как с C++ сделано.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[8]: недостатки системы типов .NET
От: WolfHound  
Дата: 10.11.06 13:20
Оценка:
Здравствуйте, prVovik, Вы писали:

WH>>Те предлогаешь каждый раз когда в системе появляется новый код перекомпилировать всю систему?

V>ага, мы уже проходили это светлое будущее с шаблонами в С++
Нет. По сравнению с тем что предлагается шалоны С++ это детский лепет. Ибо предлагают перекомпилировать вобще всеь софт на машине каждый раз когда что-то меняется.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Нет возможности использовать константные ссылки
От: prVovik Россия  
Дата: 10.11.06 13:21
Оценка:
Здравствуйте, kan, Вы писали:


kan>Лог — не состояние объекта, это другой объект, объект содержит лишь указатель на него (вот указатель изменить нельзя, но

kan>указуемый объект можно).
kan>В общем, посмотри как с C++ сделано.

Да знаю я, как оно там сделано. А вот WolfHound говорит, что запись в лог состояние меняет, так как идет обращение к неконстантному объекту, от которого теоретически может зависеть исходный объект. А вот есть ли реально зависимость, или нет знать может только программист, отсюда и вытекает необходимость костылей вроде консткаста.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[9]: недостатки системы типов .NET
От: prVovik Россия  
Дата: 10.11.06 13:22
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, prVovik, Вы писали:


WH>>>Те предлогаешь каждый раз когда в системе появляется новый код перекомпилировать всю систему?

V>>ага, мы уже проходили это светлое будущее с шаблонами в С++
WH>Нет. По сравнению с тем что предлагается шалоны С++ это детский лепет. Ибо предлагают перекомпилировать вобще всеь софт на машине каждый раз когда что-то меняется.

Суть таже, разница только в масштабах
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.