LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

Проблема в том, что на самом деле любая подобная изменяемая ссылка

Ссылка не изменяемая. Ссылка должна быть на немутабельный объект. Представьте, что у вас многопоточное приложение, взаимодействие между нитями в котором идет на объеме сообщениями. И вы рассылаете сообщение о том, что с этого момента должен использоваться вот такой вот логгер.

Или в этом приложении обработка данных построена на стадиях, каждая стадия — это отдельная нить. На первой стадии создается некий объект (например, описание заказа), ссылка на этот объект передается следующей стадии, которая вычисляет комиссию по заказу и модифицирует объект заказа, после чего передает ссылку на него дальше. Следующая стадия вычисляет бонус для заказа и так же модифицирует объект. И т.д. и т.п. Т.е. объект в конкретный момент времени находится в распоряжении всего одной нити. Но он не константный. А ссылку на него нужно передавать в иммутабельном объекте-сообщении.

В C++ такое делается запросто. А в D, с его специально предназначенной для многопоточности «вирусной» иммутабельностью, не получается.

Исходная версия eao197, :

Проблема в том, что на самом деле любая подобная изменяемая ссылка

Ссылка не изменяемая. Ссылка должна быть на немутабельный объект. Представьте, что у вас многопоточное приложение, взаимодействие между которыми идет на объеме сообщениями. И вы рассылаете сообщение о том, что с этого момента должен использоваться вот такой вот логгер.

Или в этом приложении обработка данных построена на стадиях, каждая стадия — это отдельная нить. На первой стадии создается некий объект (например, описание заказа), ссылка на этот объект передается следующей стадии, которая вычисляет комиссию по заказу и модифицирует объект заказа, после чего передает ссылку на него дальше. Следующая стадия вычисляет бонус для заказа и так же модифицирует объект. И т.д. и т.п. Т.е. объект в конкретный момент времени находится в распоряжении всего одной нити. Но он не константный. А ссылку на него нужно передавать в иммутабельном объекте-сообщении.

В C++ такое делается запросто. А в D, с его специально предназначенной для многопоточности «вирусной» иммутабельностью, не получается.