Связи между языковыми компонентами и типами библиотек
Определение языка C# требует, чтобы стандартная библиотека имела определенные типы, а также определенные доступные члены этих типов. Компилятор создает код, использующий эти необходимые типы и члены для многих разных языковых компонентов. По этой причине версии C# поддерживаются только для соответствующей версии .NET и более новой. Это гарантирует правильное поведение во время выполнения и доступность всех необходимых типов и членов.
Эта зависимость от функциональности стандартной библиотеки входила в состав языка C# с самой первой версии. В эту версию были включены следующие примеры:
- Exception — используется для всех исключений, созданных компилятором.
- String — синоним
string
. - Int32 — синоним
int
.
Эта первая версия была простой: компилятор и стандартная библиотека поставлялись вместе, и для каждого из них была только одна версия.
В последующих версиях C# в число зависимостей иногда добавлялись новые типы или члены. Примеры: INotifyCompletion, CallerFilePathAttributeи CallerMemberNameAttribute. C# 7.0 добавил зависимость для ValueTuple реализации функции языка кортежей . Для C# 8 требуются System.IndexSystem.Rangeдиапазоны и индексы, среди прочего. Каждая новая версия может добавить дополнительные требования.
Группа разработчиков языка стремится минимизировать контактную зону типов и членов, необходимых в совместимой стандартной библиотеке. Эта задача уравновешивается потребностью в простой структуре, когда новые функции библиотек легко внедряются в язык. В будущих версиях C# появятся функции, требующие новых типов и членов в стандартной библиотеке. Средства компилятора C# теперь отделены от цикла выпуска библиотек .NET на поддерживаемых платформах.