Информация об изменениях

Сообщение Re[15]: понимание ООП Алана Кея от 29.03.2023 10:43

Изменено 29.03.2023 10:44 Sinclair

Re[15]: понимание ООП Алана Кея
Здравствуйте, 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.

    Тогда зачем вы притащили его обсуждение в эту ветку?
  • Re[15]: понимание ООП Алана Кея
    Здравствуйте, 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.

    Тогда зачем вы притащили его обсуждение в эту ветку?