Будет ли System.Numerics.BigInteger неизменным? Должно ли это быть? - PullRequest
1 голос
/ 26 апреля 2009

.NET Framework 4, очевидно, будет включать в себя класс BigInteger. Тем не менее, я не могу выяснить, будет ли оно неизменным. Я также не могу решить, будет ли это хорошо.

Неизменность имеет массу преимуществ, особенно для чего-то такого же «ценностного», как big-int. С другой стороны, основные операции должны быть эффективными, чтобы сделать такие дорогостоящие операции, как PowerMod, максимально быстрыми. Добавление на месте будет быстрее, чем неизменное дополнение. В настоящее время я склоняюсь к неизменности как к лучшему выбору для библиотечного класса (думаю, String).

Кто-нибудь знает, будет ли он неизменным? Как вы думаете, это должно быть неизменным?

Ответы [ 4 ]

7 голосов
/ 26 апреля 2009

Я верю, что это будет неизменным (насколько я понимаю, они в основном вносят реализацию DLR, которая является неизменной, в ядро).

Да, оно должно быть неизменным. Он должен вести себя как другие типы числовых значений, такие как Int32 и Double. Наличие изменяемого числового класса было бы очень запутанным.

4 голосов
/ 26 апреля 2009

Я думаю, что это будет неизменным, и я думаю, что это единственный разумный выбор дизайна для типа «значение». (Как и DLR, F # BigInt также является неизменяемым. Хорошо, что мы наконец-то получили этот тип в рамках для совместного использования между языками.)

1 голос
/ 23 мая 2009

Посмотрите (предварительные, но официальные) документы по адресу msdn.microsoft.com/en-us/library/system.numerics.biginteger(VS.100).aspx

.

Тип BigInteger - это неизменный тип, представляющий произвольно большое целое число, значение которого в теории не имеет верхних или нижних границ. [...] Поскольку тип BigInteger является неизменным [...] и поскольку он не имеет верхних или нижних границ, исключение OutOfMemoryException может быть выдано для любой операции, в результате которой значение BigInteger становится слишком большим.

1 голос
/ 01 мая 2009

Это будет неизменным. Да, так и должно быть - в противном случае он не будет вести себя как другие числовые типы, и вы увидите очень странное поведение, если перейдете от целочисленного кода к большому целому коду.

Возможно, в будущем выпуске должен быть дополнительный изменяемый тип (например, StringBuilder для String)

...