Domanda

Perché gli interi senza segno non sono conformi a CLS?

Sto iniziando a pensare che la specifica del tipo sia solo per le prestazioni e non per la correttezza.

È stato utile?

Soluzione

Non tutte le lingue hanno il concetto di interi senza segno.Ad esempio VB 6 non aveva il concetto di unsigned int, cosa che sospetto abbia spinto i progettisti di VB7/7.1 a non implementare altrettanto bene (è ora implementato in VB8).

Per citare:

http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

Il CLS è stato progettato per essere abbastanza grande da includere i costrutti linguistici che sono comunemente necessari dagli sviluppatori, eppure abbastanza piccoli da essere in grado di supportarlo.Inoltre, qualsiasi costrutto linguistico che rende impossibile verificare rapidamente il tipo di sicurezza del codice è stato escluso dal CLS in modo che tutti i linguaggi conformi a CLS possano produrre un codice verificabile se scelgono di farlo.

Aggiornamento:Me lo sono chiesto alcuni anni fa, e anche se non riesco a capire perché un UInt non dovrebbe essere verificabile con la sicurezza del tipo, immagino che i ragazzi di CLS dovessero avere un punto limite da qualche parte su quale sarebbe il numero minimo di base di tipi di valore supportati.Inoltre, quando si pensa al lungo termine in cui sempre più lingue vengono trasferite nel CLR, perché costringerli a implementare int non firmati per ottenere la conformità CLS se non esiste assolutamente alcun concetto, mai?

Altri suggerimenti

Parte del problema, sospetto, ruota attorno al fatto che i tipi interi senza segno in C devono comportarsi come membri di un anello algebrico astratto piuttosto che come numeri [il che significa, ad esempio, che se una variabile intera senza segno a 16 bit è uguale a zero , decrementandolo è necessario per produrre 65.535, e se è uguale a 65.535 allora è necessario incrementarlo per ottenere zero.] Ci sono momenti in cui tale comportamento è estremamente utile, ma i tipi numerici mostrano che tale comportamento potrebbe essere andato contro lo spirito di alcune lingue.Suppongo che la decisione di omettere i tipi senza segno probabilmente sia anteriore alla decisione di supportare sia i contesti numerici controllati che quelli non controllati.Personalmente, vorrei che ci fossero stati tipi interi separati per i numeri senza segno e gli anelli algebrici;applicare un operatore meno unario a un numero a 32 bit senza segno dovrebbe produrre un risultato con segno a 64 bit [negare qualsiasi cosa diversa da zero produrrebbe un numero negativo] ma applicare un meno unario a un tipo di anello dovrebbe produrre l'inverso additivo all'interno di quell'anello.

In ogni caso, il motivo per cui gli interi senza segno non sono conformi a CLS è che Microsoft ha deciso che i linguaggi non dovevano supportare interi senza segno per essere considerati "compatibili con CLS".

Gli int senza segno non ti fanno guadagnare molto nella vita reale, tuttavia avere più di 1 tipo di int ti dà fastidio, quindi molte lingue hanno solo int cantati.

La conformità CLS ha lo scopo di consentire l'utilizzo di una classe da molte lingue...

Ricorda che nessuno ti impone di essere conforme a CLS.

Puoi comunque utilizzare gli interi senza segno entro un metodo, o come parms a a privato metodo, poiché la conformità CLS limita solo l'API pubblica.

Gli interi senza segno non sono conformi a CLS perché non sono interoperabili tra determinati linguaggi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top