Relazioni tra funzionalità del linguaggio e tipi di libreria

La definizione del linguaggio C# richiede che una libreria standard includa determinati tipi e specifici membri accessibili per tali tipi. Il compilatore genera codice che usa questi tipi e membri richiesti per numerose funzionalità del linguaggio diverse. Per questo motivo, le versioni C# sono supportate solo per la versione .NET corrispondente e versioni successive. Ciò garantisce il comportamento di runtime corretto e la disponibilità di tutti i tipi e i membri necessari.

Questa dipendenza dalla funzionalità della libreria standard fa parte del linguaggio C# fin dalla prima versione. Alcuni esempi in quella versione sono i seguenti:

  • Exception - usato per tutte le eccezioni generate dal compilatore.
  • String - sinonimo di string.
  • Int32 - sinonimo di int.

La prima versione era semplice: il compilatore e la libreria standard erano forniti assieme ed esisteva una sola versione di ognuno.

Nelle versioni successive del linguaggio C# sono stati aggiunti occasionalmente nuovi tipi o membri alle dipendenze. Alcuni esempi sono INotifyCompletion, CallerFilePathAttribute o CallerMemberNameAttribute. C# 7.0 ha aggiunto una dipendenza relativamente a ValueTuple per implementare la funzionalità del linguaggio tuple. C# 8 richiede System.Index e System.Range per intervalli e indici, tra le altre funzionalità. Ogni nuova versione potrebbe aggiungere requisiti aggiuntivi.

Il team di progettazione del linguaggio si impegna per ridurre al minimo la superficie di tipi e membri richiesti in una libreria standard conforme. Tale obiettivo deve convivere con l'esigenza di realizzare una progettazione lineare che consenta il facile incorporamento delle nuove funzionalità della libreria nel linguaggio. Le versioni future di C# includeranno nuove funzionalità che richiedono nuovi tipi e membri in una libreria standard. Gli strumenti del compilatore C# sono ora separati dal ciclo di rilascio delle librerie .NET nelle piattaforme supportate.