Immutable data structures are the way of the future in C#
От: nikov США http://www.linkedin.com/in/nikov
Дата: 08.10.07 10:29
Оценка: 34 (2) +1
Eric Lippert, один из разработчиков C#, пишет в своем блоге.

Immutable data structures are the way of the future in C#.

Re: Immutable data structures are the way of the future in C
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 08.10.07 11:04
Оценка: 6 (1) +2
Здравствуйте, nikov, Вы писали:

ASIDE: Immutable data structures are the way of the future in C#. It is much easier to reason about a data structure if you know that it will never change. Since they cannot be modified, they are automatically threadsafe. Since they cannot be modified, you can maintain a stack of past “snapshots” of the structure, and suddenly undo-redo implementations become trivial. On the down side, they do tend to chew up memory, but hey, that’s what garbage collection was invented for, so don’t sweat it. I’ll be talking more about programming using immutable data structures in this space over the next few months.

Чего, собственно, хотелось бы и в Java. И что, в принципе, тоже обосновано. Давно уже читал статью, но насколько помню, там та же аргументация: Теория и практика Java: Изменять или не изменять? Неизменяемые объекты могут значительно облегчить вашу жизнь. Уже сейчас в Eclipse чистильщик исходного кода по умолчанию автоматически расставляет атрибут неизменяемости переменной или поля класса (модификатор final) везде, где встречает сущность по факту используемую как неизменяемую; в итоге смотришь, количество immutable-переменных значительно превышает количество mutable. Встает законный вопрос: почему по умолчанию все изменяемо, может сделать наоборот: по умолчанию сущности неизменяемые, а если очень уж нужно, указывай специальным модификатором — как, к примеру, сделано в Nemerle/Scala.
Re: Immutable data structures are the way of the future in C
От: Константин Л. Франция  
Дата: 08.10.07 20:06
Оценка:
Здравствуйте, nikov, Вы писали:

[]

давно пора
Re: Immutable data structures are the way of the future in C
От: minorlogic Украина  
Дата: 09.10.07 05:39
Оценка: +1 -5 :)))
Здравствуйте, nikov, Вы писали:

N>Eric Lippert, один из разработчиков C#, пишет в своем блоге.


N>

N>Immutable data structures are the way of the future in C#.


Господа открыли const?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: Immutable data structures are the way of the future in C
От: CreatorCray  
Дата: 09.10.07 07:11
Оценка:
Здравствуйте, nikov, Вы писали:

N>Eric Lippert, один из разработчиков C#, пишет в своем блоге.


N>

N>Immutable data structures are the way of the future in C#.


Я туплю или это аналог const из С++?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Immutable data structures are the way of the future i
От: Курилка Россия http://kirya.narod.ru/
Дата: 09.10.07 07:23
Оценка: +2
Здравствуйте, CreatorCray, Вы писали:

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


N>>

N>>Immutable data structures are the way of the future in C#.


CC>Я туплю или это аналог const из С++?


Нет, т.к. конст в плюсах обходится (слабая там типизация, увы), да и это модификатор данных, в плюсах же и кода тоже. Т.е. смысл хоть и похожий, но несколько разный.
Re[3]: Immutable data structures are the way of the future i
От: CreatorCray  
Дата: 09.10.07 08:12
Оценка:
Здравствуйте, Курилка, Вы писали:

CC>>Я туплю или это аналог const из С++?

К>Нет, т.к. конст в плюсах обходится (слабая там типизация, увы), да и это модификатор данных, в плюсах же и кода тоже. Т.е. смысл хоть и похожий, но несколько разный.
Т.е. immutable это неснимаемый const для данных? так?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Immutable data structures are the way of the future i
От: Курилка Россия http://kirya.narod.ru/
Дата: 09.10.07 08:23
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Т.е. immutable это неснимаемый const для данных? так?


Ну по сути да, где-то так. Правда ещё гарантии побольше, чем в случае плюсов.
Re[5]: Immutable data structures are the way of the future i
От: Курилка Россия http://kirya.narod.ru/
Дата: 09.10.07 08:24
Оценка:
Здравствуйте, Курилка, Вы писали:

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


CC>>Т.е. immutable это неснимаемый const для данных? так?


К>Ну по сути да, где-то так. Правда ещё гарантии побольше, чем в случае плюсов.

Хотя блин, масло маслянное получилось, если он неснимаемый, то это и есть жёсткая гарантия
Re[4]: Immutable data structures are the way of the future i
От: deniok Россия  
Дата: 09.10.07 08:41
Оценка: +2
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Курилка, Вы писали:


CC>>>Я туплю или это аналог const из С++?

К>>Нет, т.к. конст в плюсах обходится (слабая там типизация, увы), да и это модификатор данных, в плюсах же и кода тоже. Т.е. смысл хоть и похожий, но несколько разный.
CC>Т.е. immutable это неснимаемый const для данных? так?

Типа того. Имеется ввиду, что компилятор может полагаться на неизменяемость, что открывает простор для оптимизаций.
Re[5]: Immutable data structures are the way of the future i
От: CreatorCray  
Дата: 09.10.07 09:02
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Ну по сути да, где-то так. Правда ещё гарантии побольше, чем в случае плюсов.

Ну про гарантии мне не надо рассказывать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Immutable data structures are the way of the future i
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.07 09:04
Оценка: 12 (2) +1
Здравствуйте, CreatorCray, Вы писали:
CC>Т.е. immutable это неснимаемый const для данных? так?
Я не помню семантику const для нестатических полей. Она проинициализировать поле в конструкторе позволяет?
Если да — то всё более-менее в порядке, это оно.
Более-менее потому, что без GC эта штука практически бесполезна.
Я имею в виду экономию памяти за счет раздельного владения. В статье речь идет о структуре ImmutableStack, которая ведет себя достаточно забавным образом: у нее Push и Pop делаются за время O(1), и при этом обладают неразрушающей семантикой.
На первый взгляд, такую же структуру реализовать на С++ легко. Увы — если место размещения оператора new совершенно очевидно, то оператор delete совершенно неясно когда вызывать.
Если мы породили из одного стека несколько различных стеков, то их общий "хвост" должен жить до тех пор, пока жив хоть кто-то из них.
На С++ это достижимо только путем подсчета ссылок, но для него нужно заводить счетчик, и структура сразу же перестанет быть иммутабельной.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Immutable data structures are the way of the future i
От: CreatorCray  
Дата: 09.10.07 09:25
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>На С++ это достижимо только путем подсчета ссылок, но для него нужно заводить счетчик, и структура сразу же перестанет быть иммутабельной.

mutable int m_refCount;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Immutable data structures are the way of the future i
От: Курилка Россия http://kirya.narod.ru/
Дата: 09.10.07 09:27
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

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


S>>На С++ это достижимо только путем подсчета ссылок, но для него нужно заводить счетчик, и структура сразу же перестанет быть иммутабельной.

CC>
CC>mutable int m_refCount;
CC>


Напомнило про "рыбу второй свежести"
Re[6]: Immutable data structures are the way of the future i
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.07 09:55
Оценка: 6 (1) +3
Здравствуйте, CreatorCray, Вы писали:
И что? Счастье-то где?
Поясняю: иммутабельность ценна не сама по себе, а множеством классных последствий, которые она обеспечивает. В частности, потокобезопасностью по низкой цене.
А здесь мы что имеем? Нельзя одновременно делать Push в двух разных потоках, потому что оба должны потрогать счетчик сцылок. Это очень плохо отразится на NUMA.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Immutable data structures are the way of the future i
От: WolfHound  
Дата: 09.10.07 14:46
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Господа открыли const?

Это разные вещи.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Immutable data structures are the way of the future in C
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.10.07 07:23
Оценка: :)
Здравствуйте, nikov, Вы писали:

N>Eric Lippert, один из разработчиков C#, пишет в своем блоге.


N>

N>Immutable data structures are the way of the future in C#.


Интересно, когда я говорил о том же саом, то тут меня чуть ли не закевали.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Immutable data structures are the way of the future i
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 10.10.07 08:40
Оценка: +1 :))) :))
Здравствуйте, VladD2, Вы писали:

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


N>>Eric Lippert, один из разработчиков C#, пишет в своем блоге.


N>>

N>>Immutable data structures are the way of the future in C#.


VD>Интересно, когда я говорил о том же саом, то тут меня чуть ли не закевали.


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

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[2]: Immutable data structures are the way of the future i
От: _d_m_  
Дата: 10.10.07 09:17
Оценка:
Здравствуйте, VladD2, Вы писали:

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


N>>Eric Lippert, один из разработчиков C#, пишет в своем блоге.


N>>

N>>Immutable data structures are the way of the future in C#.


VD>Интересно, когда я говорил о том же саом, то тут меня чуть ли не закевали.


Нет пророка в своем отечестве.

Если гений не понят и не признан, значит, он ещё жив

Re[5]: Immutable data structures are the way of the future i
От: Gaperton http://gaperton.livejournal.com
Дата: 11.10.07 14:09
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

CC>>Т.е. immutable это неснимаемый const для данных? так?
S>Я не помню семантику const для нестатических полей. Она проинициализировать поле в конструкторе позволяет?
S>Если да — то всё более-менее в порядке, это оно.
S>Более-менее потому, что без GC эта штука практически бесполезна.
S>Я имею в виду экономию памяти за счет раздельного владения. В статье речь идет о структуре ImmutableStack, которая ведет себя достаточно забавным образом: у нее Push и Pop делаются за время O(1), и при этом обладают неразрушающей семантикой.

Это полная фигня. Попробуй лучше сделать ImmutableQueue. И чтобы push и pop было за О(1). Хорошее управжнение для мозга, ну, и изобретешь заново Okasaki Queue — тоже дело. .

S>На первый взгляд, такую же структуру реализовать на С++ легко. Увы — если место размещения оператора new совершенно очевидно, то оператор delete совершенно неясно когда вызывать.


На второй взгляд, такую же структуру на С++ так же легко, как и на первый. Эта структура делается однонаправленным списком. Хвост которого может указывать на начало или середину другого списка. В узлах делаешь счетчик ссылок. И все. Можно делать хитрее — для экономии памяти применять однобитныесчетчики ссылок — техника оптимизации, которая применялась еще в древних лисп-машинах.

S>Если мы породили из одного стека несколько различных стеков, то их общий "хвост" должен жить до тех пор, пока жив хоть кто-то из них.

S>На С++ это достижимо только путем подсчета ссылок, но для него нужно заводить счетчик, и структура сразу же перестанет быть иммутабельной.
Ага. И что интересно — циклов нет, обрати внимание. Ну, и это можно делать, конечно же, не только подсчетом ссылок. Можно тупо аллокатор перекрыть, и вообще сделать для них честный GC. Это раз.

Как раз на С++ структура и не перестанет быть иммутабельной, если завести mutable счетчик ссылок. mutable как раз для таких ситуаций и предназначен, и никакого вреда кроме пользы от него не будет. Это, собственно, два.

Ну и три. Функциональное программирование, я вижу, идет в массы семимильными шагами. Скоро, глядишь — через годик, заговорят об Окасаки, ленивых конструкторах, и бесконечных структурах данных. Любопытно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.