Re[17]: const в D, требуется помощь клуба.
От: vdimas Россия  
Дата: 14.07.05 19:04
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Из-за этого "гениального" решения мне несколько раз приходилось писать immutable proxy для того чтобы защититься от собственных случайных ошибок.


Угу, причем именно отдельных прокси-имплементаторов отдельных immutable интерфейсов.

Поначалу я посчитал себя шибко умным, сделал имплементацию некоего MyReadOnlyBase — класса, и в public сигнатурах использовал именно его. Однако, соседи за партой так же быстро приводили его к наследнику, типа:
(MyMutable)myReadOnlyBaseVariable;

Так что, остается именно так — полновесные прокси, с разделением на интерфейсы и реализации на ровном месте (где этого не требовалось).

А потом подумаешь малость... И придет к тебе еще более "просветленное" решение: "да нахрена это вообще надо, есть же юнит тесты... и их все-равно запускать"...

Привет, mainstream
Re[19]: const в D, требуется помощь клуба.
От: vdimas Россия  
Дата: 14.07.05 19:08
Оценка:
Здравствуйте, IT, Вы писали:

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


VD>>Еще хорошо бы все же иметь некий механизм позволяющий инкапсулировать общение между двумя тесносвязанными классами (вроде држбы в плюсах)


IT>internal — редкостная дрянь, впрочем не на много хуже чем friend в плюсах.


кстати, это единственный механизм реализации открытого immutable класса, при реально использующемся internal mutable-наследнике без дополнительного прокси.

Опять же, такая фича провоцирует на порождение множества мелких сборок.
Re[20]: const в D, требуется помощь клуба.
От: IT Россия linq2db.com
Дата: 14.07.05 19:16
Оценка:
Здравствуйте, vdimas, Вы писали:

V>кстати, это единственный механизм реализации открытого immutable класса, при реально использующемся internal mutable-наследнике без дополнительного прокси.


Проблемы начинаются когда ты такой класс начинаешь выносить из сборки. Тут сразу же появляются и прокси и другие подпорки
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[18]: const в D, требуется помощь клуба.
От: IT Россия linq2db.com
Дата: 14.07.05 19:24
Оценка:
Здравствуйте, vdimas, Вы писали:

V>А потом подумаешь малость... И придет к тебе еще более "просветленное" решение: "да нахрена это вообще надо, есть же юнит тесты... и их все-равно запускать"...


Вот-вот. Сначала нужно определиться с уровнем доверия к вызывающему коду, а уже потом строить от него всякие защиты.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[19]: const в D, требуется помощь клуба.
От: c-smile Канада http://terrainformatica.com
Дата: 15.07.05 05:45
Оценка: 39 (4) +3 :))) :))) :))
Здравствуйте, IT, Вы писали:

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


V>>А потом подумаешь малость... И придет к тебе еще более "просветленное" решение: "да нахрена это вообще надо, есть же юнит тесты... и их все-равно запускать"...


IT>Вот-вот. Сначала нужно определиться с уровнем доверия к вызывающему коду, а уже потом строить от него всякие защиты.


Уровень доверия... вона как...
Нужно тогда ввести в язык вместе с private, readonly и пр. конструкцию мамой_клянусь
или там в особо ответственных случаях мля_буду ...
Re[19]: const в D, требуется помощь клуба.
От: Павел Кузнецов  
Дата: 15.07.05 14:22
Оценка: +4
Здравствуйте, IT, Вы писали:

V>>А потом подумаешь малость... И придет к тебе еще более "просветленное" решение: "да нахрена это вообще надо, есть же юнит тесты... и их все-равно запускать"...


IT>Вот-вот. Сначала нужно определиться с уровнем доверия к вызывающему коду, а уже потом строить от него всякие защиты.


Это не защита, и уровень доверия здесь ни при чем. Это ближе к более ясному выражению своих намерений, и к переносу информации из комментариев в код, для того чтобы компилятор мог напоминать, например, о расхождениях в намерениях автора класса/функции и их пользователя.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[21]: const в D, требуется помощь клуба.
От: vdimas Россия  
Дата: 15.07.05 17:12
Оценка:
Здравствуйте, IT, Вы писали:

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


V>>кстати, это единственный механизм реализации открытого immutable класса, при реально использующемся internal mutable-наследнике без дополнительного прокси.


IT>Проблемы начинаются когда ты такой класс начинаешь выносить из сборки. Тут сразу же появляются и прокси и другие подпорки


К сожалению, они зачастую "невыносимы", т.е. даже подпорки иногда не помогают. Например, мы не можем подменить Nodes-collection в том же TreeView, да и во многих других аналогичных моментах. Сделать в своем наследнике прокси для Nodes — тоже фигушки, ибо не все события внутри него поддаются перехвату/обнаружению.
Re[17]: const в D, требуется помощь клуба.
От: vdimas Россия  
Дата: 15.07.05 17:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Незнаю, но от readonly для внутренних переменных и содержимого массива я бы не отказался.


Полностью поддерживаю насчет массивов. А то иначе у нас только 2 варианта:

1. Возвращать копию массива

2. Сделать ReadOnly — прокси массива...

Кстати, последний вариант выглядит вполне приемлимым для 2.0...
Re[20]: const в D, требуется помощь клуба.
От: Шахтер Интернет  
Дата: 16.07.05 00:32
Оценка:
Здравствуйте, c-smile, Вы писали:

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


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


V>>>А потом подумаешь малость... И придет к тебе еще более "просветленное" решение: "да нахрена это вообще надо, есть же юнит тесты... и их все-равно запускать"...


IT>>Вот-вот. Сначала нужно определиться с уровнем доверия к вызывающему коду, а уже потом строить от него всякие защиты.


CS>Уровень доверия... вона как...

CS>Нужно тогда ввести в язык вместе с private, readonly и пр. конструкцию мамой_клянусь
CS>или там в особо ответственных случаях мля_буду ...

А ещё -- никому не дам, дам только ему и его друзьям, дам всем и.т.п.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[27]: const в D, требуется помощь клуба.
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.07.05 18:57
Оценка:
Цитируй по меньше, плиз.
... << RSDN@Home 1.2.0 alpha rev. 577>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.