Domanda

Ho letto innumerevoli blog, post e domande StackOverflow sulle nuove funzionalità di C # 4.0. Anche le nuove funzionalità di WPF 4.0 hanno iniziato a emergere all'aperto. Cosa non ho potuto trovare e mi piacerebbe sapere:

  1. Quali sono le principali modifiche a CLR 4.0 dal punto di vista dello sviluppatore C # / WPF?
  2. Quali sono le principali modifiche a CLR 4.0 nel suo insieme?

Penso che, internamente, la maggior parte dei cambiamenti riguardi i nuovi linguaggi dinamici e la programmazione parallela. Ma ci sono altri importanti miglioramenti? Poiché i miglioramenti del linguaggio sono proprio questo, i miglioramenti del linguaggio. Hai solo bisogno del nuovo compilatore e queste funzionalità possono essere utilizzate con una versione precedente di .Net, oltre alla versione 1.0 / 1.1 (almeno la maggior parte di esse può essere utilizzata).

E se le funzionalità di cui sopra sono le uniche, solo per queste funzionalità la versione viene cambiata in 4.0, che penso sia 4.0 perché basata sulla versione .Net 4.0 (cioè dopo 1.0 / 1.1, 2.0 & amp ; 3,0 / 3,5). L'incremento della versione è giustificato?

Modificato:

Come ha sottolineato Pavel Minaev nei commenti, anche queste due caratteristiche sono indipendenti dal CLR. Ci sono stati velocità e altri miglioramenti anche in 3.0 e 3.5. Quindi perché l'incremento della versione?

È stato utile?

Soluzione

Una nuova cosa di CLR che conosco è una forma di tipizzazione strutturale per interfacce, strutture e delegati per il bene di Supporto NoPIA - in sostanza, consente al runtime di trattare tipi distinti con definizioni equivalenti come se fossero uguali - quindi se due assiemi A e B hanno ciascuno importato COM l'interfaccia IFoo dichiarata in essi, con lo stesso IID e gli stessi membri, il runtime li tratterà come tipi equivalenti; quindi se esiste un'istanza di classe Foo che implementa [A]IFoo, puoi lanciarla su [B]IFoo e il cast funzionerà.

Un'altra cosa è la capacità di ospitare più versioni CLR fianco a fianco in un unico processo. Non è possibile ospitare 1.xe 2.0 in un processo, ad esempio, ma è possibile ospitare 2.0 e 4.0. Il vantaggio principale di ciò è la possibilità di caricare contemporaneamente plug-in scritti per entrambe le versioni CLR.

Un bit minore è che alcune altre eccezioni sono diventate inattaccabili come StackOverflowException era in 2.0 - non puoi più catturare AccessViolationException, per esempio.

Inoltre, qui è una presentazione di PowerPoint su CLR 4.0 dal PDC 2008. Potrebbe essere un po 'datato ora, ma la maggior parte delle cose che è menzionata sembrano essere presenti nei beta.

Altri suggerimenti

Ci sono un numero enorme di modifiche.

Nel CLR stesso, ci sono alcune modifiche. Il Garbage Collector viene modificato per supportare la raccolta simultanea di gen0 / 1 e gen2 in modalità workstation. Inoltre, ci sono alcuni cambiamenti nel modo in cui viene implementata la sicurezza. Il framework parallelo modifica parte dell'implementazione del thread pool del CLR (che non è interamente gestito, ma parte del runtime stesso). Inoltre, ci sono alcune modifiche al sistema di tipi, principalmente legate al nuovo supporto COM PIA.

Le maggiori modifiche sono probabilmente più modifiche alla libreria / al framework, piuttosto che alle modifiche al CLR. come l'integrazione del DLR nel framework e il nuovo tipo dinamico. In termini di framework, hai il framework reattivo, le estensioni della libreria parallela, i contratti di codice, il supporto tupla e molte piccole modifiche (ad esempio: Enum.TryParse, Lazy<T> e tonnellate di altri piccoli ma piacevoli miglioramenti).

Non credo ci siano nuove istruzioni IL. Il nuovo CLR ha migliorato cose come inlining e garbage collection che fanno lo stesso lavoro del 2.0 CLR, ma meglio. Una macchina virtuale (come CLR o JVM) è un concetto astratto con molteplici possibili implementazioni. Credo che CLR 4.0 sia la stessa macchina astratta di CLR 2.0, solo con un'implementazione migliorata.

Anche la nuova roba dinamica è solo un trucco del compilatore con nuove API (a differenza di Java dove viene proposto come nuovo opcode .)

Se mi sbaglio, mi piacerebbe saperlo!

Per ogni versione della documentazione i team creano " Novità " documenti.

Ecco quello per C # 4.0 Beta2: Che cos'è Novità in Visual C # 2010

Ed ecco quello per .NET Framework 4.0 Beta2: Novità di .NET Framework Versione 4

Questi sono gli elenchi più completi di modifiche che puoi trovare.

Molti tipi di interfaccia e delegati principali nel CLR sono stati aggiornati a supporto di covarianza generica e contravarianza . Ad esempio, IEnumerable<T> è stato modificato in IEnumerable<out T>.

Ho provato a guardare alcune delle nuove cose di C # in Reflector, per vedere se c'è qualcosa di nuovo sotto:

    I tipi
  • dinamici vengono tradotti in oggetti , tramite la magia del compilatore, che aggiunge chiamate in libreria per gestire l'associazione runtime.
  • I parametri opzionali vengono gestiti tramite il compilatore. Se chiami Foo (int x = 5), senza specificare un valore per x, vedrai la chiamata come Foo (5) in Reflector.

Quindi immagino che le modifiche non siano nulla che puoi facilmente individuare (come il supporto generico in CLR 2.0).

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