Поделиться через


Связи между функциями языка и типами библиотек

Определение языка 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 на поддерживаемых платформах.