Почему readonly в CLR не настоящий?
От: varenikAA  
Дата: 21.10.20 03:43
Оценка:
После прочтения The D Programming
Language
Andrei Alexandrescu:

В главе 8 объясняется, почему квалификаторы const и
immutable должны быть транзитивными (свойство, также
известное как глубина или рекурсивность): каким бы
косвенным путем вы ни следовали, рассматривая
«внутренности » неизменяемого объекта, сами данные
должны оставаться неизменяемыми. В противном случае
гарантии, предоставляемые квалификатором immutable,
имели бы силу комментария в коде. Нельзя сказать, что
нечто «до определенного момента » неизменяемо
(immutable), а дальше меняется. Зато можно говорить,
что данные изменяемы до определенного момента, а затем
становятся совершенно неизменяемыми, вплоть до самых
глубоко вложенных элементов. Применив квалификатор
immutable, вы сворачиваете на улицу с односторонним
движением. Мы уже видели, что присутствие квалификатора
immutable облегчает реализацию многих оправдавших себя
идиом, не претендующих на свободу программиста, включая
функциональный стиль и разделение данных между
потоками. Если бы неизменяемость применялась «до
определенного момента », то же самое относилось бы и к
корректности программы.
Точно такой же ход рассуждений
применим и для квалификатора shared. На самом деле, в
случае с shared необходимость транзитивности абсолютно
очевидна.


Думаю об этом постоянно, вот бы в clr было бы также.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Почему readonly в CLR не настоящий?
От: Kolesiki  
Дата: 21.10.20 11:46
Оценка: +1 -1 :)
Здравствуйте, varenikAA, Вы писали:

AA>В главе 8 объясняется, почему квалификаторы const и immutable должны быть транзитивными

AA>Думаю об этом постоянно, вот бы в clr было бы также.

Зачем мечтать о том, чего никогда не будет?? D писался умным прогером для умных юзеров. C# писался посредственностями для посредственностей. D развивается в сторону полезных фич, C# — в сторону "популярных плюшек", причём последний ещё и сдавлен грузом совместимости.
Re[2]: Почему readonly в CLR не настоящий?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.10.20 11:49
Оценка: :))
Здравствуйте, Kolesiki, Вы писали:

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


AA>>В главе 8 объясняется, почему квалификаторы const и immutable должны быть транзитивными

AA>>Думаю об этом постоянно, вот бы в clr было бы также.

K>Зачем мечтать о том, чего никогда не будет?? D писался умным прогером для умных юзеров. C# писался посредственностями для посредственностей. D развивается в сторону полезных фич, C# — в сторону "популярных плюшек", причём последний ещё и сдавлен грузом совместимости.


Ты пишешь на D?
и солнце б утром не вставало, когда бы не было меня
Re: Почему readonly в CLR не настоящий?
От: varenikAA  
Дата: 23.10.20 05:21
Оценка: -1 :)
Здравствуйте, varenikAA, Вы писали:
AA>Думаю об этом постоянно, вот бы в clr было бы также.

Подумал. допустим даже "только чтение" не означает "неизменяемость". ну, ок!
Тогда зачем в новую версию завезли init only???!!!!

Усложняют ЯП только чтобы продлить его жизнь.
Но уже давно для clr есть F# в котором by default родные структуры иммутабельны.
А без них нет будущего на многоядерных системах.
Так оставьте уже труп в покое(!)
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Почему readonly в CLR не настоящий?
От: Mystic Artifact  
Дата: 24.10.20 14:20
Оценка: +1 :)
Здравствуйте, varenikAA, Вы писали:

AA>>Думаю об этом постоянно, вот бы в clr было бы также.

Наоборот, в mutable-мире — нужно больше пространства для маневра. Эти констрейны обычно имеют смысл в какой-то области видимости. Например десериализатор конструирует объект, а потребителю, мы хотим его выставить как рид-онли, при этом мы не хотим иметь 1001-у обертку и рантайм проверок. Хэндл файла в классе — ридонли для всех его членов, кроме конструктора и, возможно деструктора (нигде такого нет, спорно).

AA>Подумал. допустим даже "только чтение" не означает "неизменяемость". ну, ок!

AA>Тогда зачем в новую версию завезли init only???!!!!
Подумай ещё. Применений и так хватает, все же есть в документации.

Например, static readonly поле позволяет JIT-у трактовать его как константу, в рантайме, выбрасывая все бранчи которые никогда не могут случиться. При чем эта константа может быть инициализирована в статическом конструкторе.


AA>Но уже давно для clr есть F# в котором by default родные структуры иммутабельны.

Применение настоящей иммутабельности обосновано, там где это подходит. А в практических областях — очень больно сопрягается с реальной жизнью, и даже при всем желании авторов, не всегда ее удается достичь с приемлимыми характеристиками потребления памяти или временем выполнения. Иначе говоря, очень хорошо, когда оно подходит, и плохо когда оно не подходит. Поэтому, представлять весь мир в виде гвоздей и предлагать один молоток — то это как раз тот подход, когда, заранее известно, что он не работает. Нужно и то и другое.


AA>А без них нет будущего на многоядерных системах.

Это вообще пофигу, есть задачи которые не распараллеливаются, или подходы для этого неизвестны. Возьми стальной шар и 4-х слесарей с 4-мя ножовками. Увидишь, что один справится быстрее и почти без матов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.