Relations entre les fonctionnalités de langage et les types de bibliothèque
La définition du langage C# nécessite une bibliothèque standard avec certains types et certains membres accessibles sur ces types. Le compilateur génère du code qui a besoin d’utiliser ces types et membres pour de nombreuses fonctionnalités de langage différentes. Pour cette raison, les versions C# sont prises en charge uniquement pour la version .NET correspondante (et les versions ultérieures). Cela garantit le comportement approprié au moment de l’exécution, ainsi que la disponibilité de tous les types et membres requis.
Cette dépendance sur les fonctionnalités de la bibliothèque standard fait partie du langage C# depuis le début. Dans la première version, il y avait les types suivants :
- Exception : utilisé pour toutes les exceptions générées par le compilateur.
- String : synonyme de
string
. - Int32 : synonyme de
int
.
Cette première version était simple : le compilateur et la bibliothèque standard étaient fournis ensemble, et il n’y avait qu’une seule version de chacun.
Dans les versions ultérieures de C#, de nouveaux types ou membres ont parfois été ajoutés aux dépendances. Parmi les exemples, on compte : INotifyCompletion, CallerFilePathAttribute et CallerMemberNameAttribute. C# 7.0 ajoute une dépendance sur ValueTuple pour implémenter la fonctionnalité de langage tuples. C# 8 nécessite System.Index et System.Range pour les plages et index, entre autres fonctionnalités. Chaque nouvelle version peut apporter des exigences supplémentaires.
L’équipe de conception du langage s’efforce de réduire la surface d’exposition des types et des membres requis dans une bibliothèque standard conforme. Cet objectif s’ajoute à la nécessité de conserver une conception épurée à mesure que de nouvelles fonctionnalités de bibliothèque sont incorporées au langage. De nouvelles fonctionnalités seront ajoutées dans les futures versions du langage C# qui nécessiteront de nouveaux types et membres dans une bibliothèque standard. Les outils du compilateur C# sont maintenant dissociés du cycle de mise en production des bibliothèques .NET sur les plateformes prises en charge.