Почему в C# нет декларативной неизменности?

Почему разработчики C# не допустили чего-то подобного?

public readonly class ImmutableThing
{
    ...
}

Одним из наиболее важных способов безопасной многопоточности является использование неизменяемых объектов/классов, однако нет способа объявить класс неизменяемым. Я знаю, что могу сделать его неизменным с помощью правильной реализации, но если бы это применялось с помощью объявления класса, это сделало бы его намного проще и безопаснее. Комментирование класса как неизменяемого в лучшем случае является решением «дверной опоры».

Достаточно одного взгляда на объявление класса, и вы сразу поймете, что оно неизменяемое. Если бы вам пришлось модифицировать чужой код, вы бы знали, что класс не допускает изменений намеренно. Я вижу здесь только преимущества, но не могу поверить, что никто не подумал об этом раньше. Так почему не поддерживается?

РЕДАКТИРОВАТЬ

Некоторые говорят, что это не очень важная функция, но это меня не убеждает. Многоядерные процессоры появились потому, что повышение производительности за счет частоты упиралось в стену. Суперкомпьютеры — это многопроцессорные машины. Параллельная обработка становится все более важной и является одним из основных способов повышения производительности. Поддержка многопоточности и параллельной обработки в .NET имеет большое значение (различные типы блокировок, пул потоков, задачи, асинхронные вызовы, параллельные коллекции, блокирующие коллекции, параллельный foreach, PLINQ и т. д.), и мне кажется, что все, что помогает вам легче писать параллельный код, дает преимущество. Даже если это нетривиально реализовать.

9
задан Maciej 1 June 2012 в 21:00
поделиться