Pergunta

O framework .NET 4 é, aparentemente, vai incluir uma classe BigInteger. No entanto, eu não consigo descobrir se ele irá ou não ser imutável. Eu também não consigo decidir se quer ou não que seria uma coisa boa.

A imutabilidade tem uma tonelada de benefícios, especialmente para algo como "valor-like" como um grande-int. Por outro lado, as operações básicas têm que ser eficiente, a fim de fazer operações de alto custo como PowerMod tão rápida quanto possível. Uma adição inplace vai ser mais rápido do que uma adição imutável. Atualmente estou inclinado para imutabilidade como a melhor escolha para uma classe biblioteca (acho String).

Alguém sabe se ele vai ser imutável? Você acha que deve ser imutável?

Foi útil?

Solução

Eu acredito que vai ser imutável (deduzo que eles estão trazendo basicamente a implementação DLR, que é imutável, no núcleo).

Sim, deve ser imutável. Ele deve se comportar como outros tipos de valor numérico, como Int32 e Double. Ter uma classe numérica mutável seria muito confuso.

Outras dicas

Eu acho que vai ser imutável, e eu acho que esta é a escolha de design razoável para um tipo de 'valor'. (Como o DLR, a F # BigInt também é imutável. É ótimo que estamos finalmente ter esse tipo no âmbito de participação em todos os idiomas.)

Será imutável. Sim, deve ser - caso contrário, ele não vai se comportar como outros tipos numéricos e você vai ver algum comportamento muito estranho se você se mover a partir do código base inteiro para BigInteger código baseado.

Possivelmente deve haver um tipo mutável adicional em alguma versão futura (como StringBuilder é para String)

Tenha um olhar para os docs (preliminares, mas oficiais) na msdn.microsoft.com/en-us/library/system.numerics.biginteger (VS.100) aspx

O tipo BigInteger é um tipo imutável que representa um arbitrariamente grande número inteiro cujo valor, em teoria, não tem limites superiores ou inferiores. [...] Porque o tipo BigInteger é imutável [...] e porque tem limites não superiores ou inferiores, um OutOfMemoryException pode ser jogado por qualquer operação que faz um BigInteger valor a crescer muito grande.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top