Re[15]: понимание ООП Алана Кея
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.03.23 10:43
Оценка:
Здравствуйте, vdimas, Вы писали:
V>Всякий раз забавно видеть, как ты пытаешься примитивщину выдавать за откровения.
V>Лучше бы ты не маялся этой хернёй, а говорил тезисами, которые можно подтвердить или опровергнуть.


S>>IReadOnlySet, IReadOnlyList и прочие никакого отношения к иммутабельности не имеют.


V>Имеют такое же отношение, как и IImutableList и Ко.

V>Это высказывание — вполне себе тезис.
Ну да, совершенно верно. Это — ошибочный тезис.
Иммутабельность означает не просто отсутствие модифицирующих операций, но и наличие операций по построению новых значений на основе существующих.

V>Я на это уже отвечал — там речь лишь о некоторых алгоритмах над некоторыми иммутабельныим структурами данных.

Ткните пальцем хотя бы в один "алгоритм" в этом неймспейсе.

V>Есть несколько конекретных типов, помеченные как sealed, которые согласно дизайну являются иммутабельными.

А то.
V>А система реализованных интерфейсов — нет, это просто "вербальные соглашения".
Всё верно. Причём достаточно внятные вербальные соглашения. В принципе, любой интерфейс, помимо названий методов, оперирует некоторыми вербальным соглашениями. Нарушение которых компилятором не карается, но может привести к неожиданному поведению (в том числе и к багам).

V>Например, интерфейс IImutableDictionary может быть реализован не только на красно-чёрных деревьях.

А то. У нас с одногруппником в качестве курсовой работы была реализация IImmutableList и IImmutableDictionary на другой основе.
V>И может быть реализован не только в иммутабельном виде.
Может, но это всё сломает. А вот в read-only виде его реализовать эффективно очень затруднительно, если вообще возможно.

V>Что, однако, верно только для сценариев, где данные активно изменятся.

V>FrozenXXX были созданы для других сценариев — где данные читаются намного чаще, чем изменяются.
Да, для специального узкого случая.
Вы готовы навскидку сказать, насколько они эффективнее Immutable-аналогов?

V>* мы именно с тобой обсуждали N-арные деревья, т.е. ты должен хорошо понимать, что нет никакого запрета строить иммутабельные деревья из таких структур данных, сбалансированных с точностью от 1 до некоего выбранного max N узлов; т.е., при создании нового корня дерева в общем случае будут создаваться копии меньшего кол-ва узлов, чем для двоичных узлов, но в каждом узле будет больше элементов. До какого-то N это выгодная стратегия на современном оборудовании, потому что деревянная в памяти структура в общем случае обладает худшей локальностью, т.е. синтетические тесты, где в памяти только содаются узлы тестируемого дерева, могут сильно врать насчёт его эффективности.


Мы не просто это обсуждали. Я такую структуру реализовывал самостоятельно.

V>N-арное дерево в этом смысле — это обеспеченный ручками некий фактор локальности данных. В идеале, конечно, было бы удобно иметь ср-ва располагать такие "корзины" по границам кеш-линееек проца, но дотнету такие радости недоступны.

Прекрасно доступны, надо просто уметь их готовить.

V>В любом случае, рассуждать об иммутабельности или нет немспейса Frozen было заведомо глупо — типы данных там точно так же иммутабельны by design, как и в неймспейсе Immutable.

Тогда зачем вы притащили его обсуждение в эту ветку?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Отредактировано 29.03.2023 10:44 Sinclair . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.