Как BCL относится к CLS? - PullRequest
2 голосов
/ 23 марта 2011

Некоторые вопросы .net Theory: Какие библиотеки на самом деле стандартизированы?Я знаю, что есть Система общего типа, которая определяет такие вещи, как 32-разрядные целые числа и всю эту низкоуровневую информацию, но меня смущает статус / отношение Спецификации общего языка и библиотек базовых классов.

В системе есть несколько основных типов: System.Object, System.ValueType, System.Exception.Но как насчет таких вещей, как System.String и ее методов / свойств, таких как .Length, .StartsWith или string.IsNullOrEmpty?

Являются ли они частью какого-либо стандарта?Достаточно ли ECMA-335 для реализации CLS-совместимой среды .net Runtime?

PS: я знаю, что многие функции, которые люди используют ежедневно, не соответствуют стандартам, а являются частью проприетарной реализации Microsoft .net Framework.Речь идет не о запуске существующих приложений под какой-либо неподдерживаемой операционной системой, я бы посмотрел на Mono для этого.Это действительно теоретический вопрос о том, что составляет ядро ​​.net, что такое стандартная библиотека .net.

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Ознакомьтесь с разделом IV спецификации Ecma. Он определяет «стандартную библиотеку времени выполнения». Однако нет ни одной «стандартной библиотеки». Он определяет 2 профиля: профиль ядра и компактный профиль и 7 библиотек. Компактный профиль - это супер-набор профиля ядра. Некоторые из библиотек, которые он определяет, являются «необязательными» и не связаны ни с одним из профилей. Он также определяет некоторые функции CLR, которые являются «необязательными» и могут не охватываться всеми реализациями.

BCL (библиотека базовых классов), как определено в спецификации Ecma, является лишь одной из 7 библиотек, которые он определяет.

CLS, или спецификация общего языка, представляет собой набор руководящих принципов для разработки API, который обеспечивает максимальную совместимость языка.

Как определено в Разделе 7.2 в разделе I спецификации ecma, существует три представления соответствия CLS:

  1. CLS-совместимая платформа - это библиотека, содержащая CLS-совместимый код
  2. Потребитель CLS - это язык (или другой инструмент), который обеспечивает доступ к любой функции, определенной в любой CLS-совместимой среде.
  3. Расширитель CLS - это язык (или другой инструмент), который позволяет программистам использовать и расширять среды, совместимые с CLS.

Точные требования для каждого из них перечислены в спецификации ECMA.

В любом случае отсутствует понятие «CLS-совместимая среда выполнения .NET». «.NET Runtime» состоит из всего в системе времени выполнения. Однако соответствие CLS касается только интерфейса общедоступных элементов.

1 голос
/ 23 марта 2011

AFAIK ядро ​​- это все, что есть в mscorlib.dll.

Посмотрите на mscorlib.dll с помощью Reflector (пока он еще бесплатен!), Чтобы увидеть, что включено, а что нет. Или посмотрите в документации библиотеки классов MSDN .NET Framework для интересующего вас типа - в документации указано, какая сборка содержит каждый тип.

System.String включена, но, например, System.Uri нет.

Основные базовые коллекции, такие как List<T>, включены, но Queue<T> и Stack<T> - нет.

...