Net framework что входит
Исследовательские проекты
Redhawk
И последняя, но не менее важная среда – Redhawk:
кодовое название для экспериментальной, минимальной версии среды выполнения с управляемым кодом, которая превратилась в CoreRT.
Среды выполнения Mono/Xamarin
Для меня неважно, кто был первым, потому что я считаю Mono средством достижения цели: технологией, которая поможет Linux закрепиться на настольных компьютерах.
В этом же посте описано, как всё началось:
Нашлись ещё варианты
Net60
В комментариях bmforce подсказал, что была ещё одна платформа, Net60. Информации о ней не так много, но удалось найти упоминание на форуме + статья на CodeGuru:
Moonlight
Не упоминается Moonlight, который основан на Mono — Opensource версию Silverlight:
Moonlight — это open source реализация Silverlight, сделанная в основном для Linux и других Unix/X11 операционных систем. Последний релиз Moonlight (Moonlight 4 Preview 1) предоставляет поддержку основного набора возможностей Silverlight 3, плюс совместимость с Silverlight 4.
Features of the common language runtime
The common language runtime manages memory, thread execution, code execution, code safety verification, compilation, and other system services. These features are intrinsic to the managed code that runs on the common language runtime.
Regarding security, managed components are awarded varying degrees of trust, depending on a number of factors that include their origin (such as the Internet, enterprise network, or local computer). This means that a managed component might or might not be able to perform file-access operations, registry-access operations, or other sensitive functions, even if it's used in the same active app.
The runtime also enforces code robustness by implementing a strict type-and-code-verification infrastructure called the common type system (CTS). The CTS ensures that all managed code is self-describing. The various Microsoft and third-party language compilers generate managed code that conforms to the CTS. This means that managed code can consume other managed types and instances, while strictly enforcing type fidelity and type safety.
In addition, the managed environment of the runtime eliminates many common software issues. For example, the runtime automatically handles object layout and manages references to objects, releasing them when they are no longer being used. This automatic memory management resolves the two most common app errors, memory leaks and invalid memory references.
While the runtime is designed for the software of the future, it also supports software of today and yesterday. Interoperability between managed and unmanaged code enables developers to continue to use necessary COM components and DLLs.
The runtime is designed to enhance performance. Although the common language runtime provides many standard runtime services, managed code is never interpreted. A feature called just-in-time (JIT) compiling enables all managed code to run in the native machine language of the system on which it's executing. Meanwhile, the memory manager removes the possibilities of fragmented memory and increases memory locality-of-reference to further increase performance.
Finally, the runtime can be hosted by high-performance, server-side apps, such as Microsoft SQL Server and Internet Information Services (IIS). This infrastructure enables you to use managed code to write your business logic, while still enjoying the superior performance of the industry's best enterprise servers that support runtime hosting.
Windows GUI apps (Windows Forms). See Windows Forms.
Windows Presentation Foundation (WPF) apps. See Windows Presentation Foundation.
Service-oriented apps using Windows Communication Foundation (WCF). See Service-Oriented Applications with WCF.
Workflow-enabled apps using Windows Workflow Foundation (WF). See Windows Workflow Foundation.
если исключить тех, кто на зарплате, т.е. инженеров Microsoft/Mono/Xamarin, их очень немного.
Как только список был готов, я залез в Википедию (см. список источников). В результате получилась следующая хронологическая последовательность:
Timeline maker
(Для интерактивной версии пройдите по ссылке)
Если я пропустил какие-то среды выполнения, дайте знать.
Чтобы облегчить восприятие хронологии, я поместил каждую среду в одну из следующих категорий:
Оставшаяся часть поста посвящена детальному описанию разных сред выполнения. Почему они появились, что они могут и зачем их сравнивать.
Shared Source Common Language Infrastructure (SSCLI) (или Rotor)
PageFX
Приложения (программы) можно разрабатывать на разных языках программирования, которые поддерживают эту технологию.
- совместное использование разных языков программирования;
- безопасность и переносимость программ;
- общую модель программирования на базе платформы Windows.
- общеязыковая исполнительная среда CLR ( Common Language Runtime );
- библиотека базовых классов.
Библиотека базовых классов включает в себя определение разнообразных примитивов, которыми могут быть: потоки, графические API-интерфейсы, реализация баз данных, файловый ввод-вывод и прочее.
3. Какой принцип действия общеязыковой среды выполнения CLR ( Common Language Runtime )?
Основное назначение CLR – превратить промежуточный код MSIL в исполнительный код в процессе выполнения программы.
Рис. 1. Процесс преобразования исходного кода в код на языке MSIL ( CIL или IL ) и создание файла сборки ( *.dll или *.exe )
После этого, псевдокод превращается в исполняемый код. Это осуществляет JIT -компилятор. JIT ( Just-in-time ) -компиляция – это компиляция на «лету».
Исполнительная среда CLR отвечает за определение места размещения сборки (assembly).
Запрашиваемый тип, который размещается в сборке (например, класс ArrayList или другой тип), определяется в двоичном файле ( *.dll или *.exe ) с помощью считывания метаданных этого файла.
После этого CLR размещает в памяти считанный из сборки тип.
Затем CLR превращает CIL-код в соответствующие инструкции, которые подстраиваются под конкретную платформу (в зависимости от ПК, операционной системы и т.п.). Кроме того, на этом этапе происходят необходимые проверки на предмет безопасности.
Последним происходит выполнение запрашиваемого программного кода.
4. Что такое промежуточный язык MSIL ( Microsoft Intermediate Language ) или CIL ( Common Intermediate Language )?
MSIL есть псевдокодом. MSIL определяет набор инструкций, которые:
- могут переноситься на разные платформы;
- не зависят от конкретного процессора.
Фактически, MSIL – это язык переносного ассемблера
Сборка предназначена для сохранения пространств имен ( namespaces ). Пространства имен содержат типы. Типами могут быть классы, делегаты, интерфейсы, перечисления, структуры.
Сборка может содержать любое количество пространств имен. Любое пространство имен может содержать любое количество типов (классов, интерфейсов, структур, перечислений, делегатов).
6. Что размещается в сборках?
В сборках размещается CIL -код ( MSIL -код или IL -код) и метаданные.
7. Что такое манифест ( manifest )?
Манифест – это описание самой сборки с помощью метаданных.
В манифесте размещается информация:
- о текущей версии сборки;
- сведения о культуре (локализация строчных и графических ресурсов);
- перечень ссылок на все внешние сборки, которые нужны для правильного функционирования.
Если в исходном коде используются библиотеки базовых классов (например из сборки mscorlib.dll ), то они загружаются с помощью загрузчика классов.
JIT -компилятор осуществляет компиляцию сборки с учетом (привязкой) аппаратных и программных особенностей компьютера, на котором происходит запуск приложения.
После этого приложение выполняется.
9. Какие существуют виды сборок?
Существует два вида сборок:
- однофайловые сборки;
- многофайловые сборки.
Сборка, которая состоит из одного единого модуля ( *.dll или *.exe ) называется однофайловой. В однофайловых сборках все необходимые CIL -инструкции, метаданные и манифесты размещаются в одном, четко определенном пакете.
В многофайловой сборке один из модулей есть главным ( primary ).
10. В каком файле размещается главная сборка библиотеки MS Visual Studio?
Главная сборка размещается в файле “ mscorlib.dll ”.
11. Что такое общая система типов CTS ?
CTS ( Common Type System ) – система типов, которая содержит полное описание всех возможных типов данных и программных конструкций, которые поддерживаются общеязыковой исполнительной средой CLR . Также здесь описывается то, как эти сущности могут взаимодействовать между собою.
Типами могут быть классы, интерфейсы, структуры, перечисления, делегаты.
12. Какое назначение общеязыковой спецификации CLS?
14. Что такое пространство имен ( namespace )?
Пространство имен предназначено для объединения группы типов, которые связаны между собою с семантической точки зрения. Типы размещаются в сборках ( assembly ). Под типами понимаются классы, делегаты, интерфейсы, структуры, перечисления.
Примеры названий пространств имен:
Например, в пространстве имен System.Data размещаются основные типы для работы с базами данных, в пространстве имен System.Collections размещаются основные типы для работы с коллекциями.
15. Как вывести содержимое сборок, пространств имен и типов в MS Visual Studio ?
В системе Microsoft Visual Studio есть утилита Object Browser , которая вызывается с меню View (рисунок 3).
Рис. 3. Вызов утилиты Object Browser
В результате откроется окно Object Browser , в котором будут отображаться сборки, которые используются в определенной технологии.
Рис. 4. Окно Object Browser с выделенной сборкой mscorlib.dll
Если раскрыть содержимое сборки mscorlib (знак “ + ”), то будет отображен список всех пространств имен данной сборки (рисунок 5). Как видно из рисунка, сборка включает пространства имен Microsoft.Win32 , System , System.Collections , System.Collections.Concurrent и много других.
Рис. 5. Сборка mscorlib и список пространств имен, которые входят в нее
Аналогично раскрывается любое из пространств имен. В пространствах имен описываются типы. В типах описываются методы, свойства, константы и т.п.
На рисунке 6 изображен класс BinaryReader из пространства имен System.IO . По всей видимости, в классе реализованы методы с именами BinaryReader() , Close() , Dispose() , FillBuffer() и прочие.
Рис. 6. Содержимое класса BinaryReader
Для подключения пространства имен используется ключевое слово using .
Примеры подключения пространств имен:
После подключения пространства имен можно обращаться к типам, которые в них реализованы.
Другие среды выполнения Microsoft
Silverlight
Несмотря на то что платформа находится в режиме поддержки (или вообще умерла/движется к закату в зависимости от вашей точки зрения), интересно вернуться к первоначальному анонсу и посмотреть, для чего предназначалась Silverlight:
В 2007 г. в Silverlight 1.0 были реализованы следующие возможности (платформа даже работала на Linux):
- поддержка встроенных кодеков для проигрывания видеофайлов VC-1 и WMV, а также аудиофайлов в форматах MP3 и WMA в браузере. ;
- Silverlight поддерживает возможность постепенного скачивания и проигрывания медиаконтента с любого веб-сервера…;
- Silverlight также опционально поддерживает встроенную потоковую передачу медиафайлов…;
- с помощью Silverlight вы можете создавать многофункциональные пользовательские интерфейсы и анимацию, соединять векторную графику и HTML для создания привлекательного контента. ;
- Silverlight облегчает создание насыщенного интерактивного видеоконтента.
Также, как подсказали в комментах, Silverlight был и на Symbian S60
Blazor
Возможности среды CLR
Среда CLR управляет памятью, выполнением потоков, выполнением кода, проверкой безопасности кода, компиляцией и другими системными службами. Эти средства являются внутренними для управляемого кода, который выполняется в среде CLR.
По соображениям безопасности управляемым компонентам присваиваются разные степени доверия, зависящие от ряда факторов, в число которых входит их происхождение (например, Интернет, сеть предприятия или локальный компьютер). Это означает, что управляемый компонент может или не может выполнять операции доступа к файлам, операции доступа к реестру или другие важные функции, даже если он используется в одном и том же активном приложении.
Среда выполнения также обеспечивает надежность кода, реализуя инфраструктуру строгой типизации и проверки кода, которую называют системой общих типов (CTS). Система общих типов обеспечивает самоописание всего управляемого кода. Различные языковые компиляторы корпорации Microsoft и независимых изготовителей создают управляемый код, удовлетворяющий системе общих типов . Это означает, что управляемый код может принимать другие управляемые типы и экземпляры, при этом обеспечивая правильность типов и строгую типизацию.
Кроме того, управляемая среда выполнения исключает многие часто возникающие проблемы с программным обеспечением. Например, среда выполнения автоматически управляет размещением объектов и ссылками на объекты, освобождая их, когда они больше не используются. Автоматическое управление памятью исключает две наиболее часто возникающие ошибки приложений: утечки памяти и недействительные ссылки на память.
Хотя среда выполнения разрабатывалась для будущего программного обеспечения, она также поддерживает сегодняшнее и вчерашнее программное обеспечение. Взаимодействие управляемого и неуправляемого кодов позволяет разработчикам использовать необходимые компоненты COM и библиотеки DLL.
Среда выполнения разработана для повышения производительности. Хотя общеязыковая среда выполнения предоставляет многие стандартные службы времени выполнения, управляемый код никогда не интерпретируется. Средство компиляции по требованию (JIT) позволяет выполнять весь управляемый код на машинном языке компьютера, где он запускается. Между тем диспетчер памяти устраняет возможность фрагментации памяти и увеличивает объем адресуемой памяти для дополнительного повышения производительности.
Наконец, среда выполнения может размещаться в высокопроизводительных серверных приложениях, таких как Microsoft SQL Server и службы IIS (Internet Information Services). Такая инфраструктура позволяет использовать управляемый код для написания собственной логики программ, пользуясь при этом высочайшей производительностью лучших производственных серверов, которые поддерживают размещение среды выполнения.
Приложения с графическим интерфейсом Windows (Windows Forms). См. статью Windows Forms.
Приложения Windows Presentation Foundation (WPF). См. статью Windows Presentation Foundation.
Сервисноориентированные приложения, использующие Windows Communication Foundation (WCF). См. статью Разработка сервисноориентированных приложений с помощью WCF.
Приложения, поддерживающие бизнес-процессы Windows Workflow Foundation (WF). См. Windows Workflow Foundation.
Provide a consistent, object-oriented programming environment whether object code is stored and executed locally, executed locally but web-distributed, or executed remotely.
Provide a code-execution environment that:
Minimizes software deployment and versioning conflicts.
Promotes safe execution of code, including code created by an unknown or semi-trusted third party.
Eliminates the performance problems of scripted or interpreted environments.
Make the developer experience consistent across widely varying types of apps, such as Windows-based apps and Web-based apps.
Internet Explorer is an example of an unmanaged app that hosts the runtime (in the form of a MIME type extension). Using Internet Explorer to host the runtime enables you to embed managed components or Windows Forms controls in HTML documents. Hosting the runtime in this way makes managed mobile code possible, but with significant improvements that only managed code offers, such as semi-trusted execution and isolated file storage.
The following illustration shows the relationship of the common language runtime and the class library to your apps and to the overall system. The illustration also shows how managed code operates within a larger architecture.
Singularity (операционная система) (также Singularity RDK)
Singularity – экспериментальная операционная система, которая разрабатывалась Microsoft Research между 2003 и 2010 гг. Предполагалось, что это будет высоконадёжная операционная система, в которой ядро, драйвера устройств и приложения состоят из управляемого кода. Средства внутренней безопасности используют безопасность типов вместо аппаратной защиты памяти.
Проблемы разработки современных информационных систем
Проблемы интеграции
- Модулей, написанных на различных языках, использующих разный API (или версии API) или разный формат представления данных;
- Программ, разработанных для различных платформ, в рамках единого программного комплекса;
- Систем, использующих разные программные модели.
Особенно часто возникают проблемы интеграции с унаследованным кодом ( legacy ). При решении задач интеграции возникают проблемы несовместимости.
Проблемы переносимости
Все чаще к программам предъявляются требования поддержки нескольких платформ (например, возможность работы с программой на платформе Windows и Mac OS).
Проблемы версий
Windows-разработчики знают о проблеме совместимости версий, известной под названием "ад DLL". Этот "ад" возникает, когда компоненты, устанавливаемые для нового приложения, заменяют компоненты старого приложения. В итоге старое приложение начинает работать неправильно или перестает работать.
Управление ресурсами
Одной из проблем программирования является управление и корректное освобождение ресурсов, файлов, памяти, пространства экрана, сетевых соединений, ресурсов баз данных и т. д. Некорректное управление этими ресурсами может привести к некорректному выполнению программы.
Безопасность типов
Когда упоминают проблему безопасности типов, имеют в виду некорректное обращение с типами данных: попытки обратиться к областям памяти за границей типа, попытки вызвать методы, отсутствующие у типа, или попытки вызвать метод, принимающий в качестве параметра тип А, и передать ему в качестве параметра объект типа В.
Обработка сбоев
При разработке Windows-приложений с использованием Win32 API некоторые функции возвращают исключения, другие — коды состояний, третьи — HRESULT . Таким образом, отсутствует согласованный механизм обработки сбоев и есть возможность игнорировать некоторые исключения, что делает код небезопасным.
Один из способов решения проблемы неоднородности — разработка и поддержка стандартных программных интерфейсов, облегчающих задачу переноса приложений на серверы различных платформ. Однако приложения могут использовать базы данных , коммуникационные и другие сервисы, интерфейсы которых не являются компонентами языка или среды программирования. Другой способ, применяемый производителями для решения проблемы неоднородности, — поддержка стандартных протоколов. Системы, поддерживающие один и тот же протокол, могут взаимодействовать друг с другом, даже если они опираются на различные машинные архитектуры и операционные системы.
. NET Framework — инфраструктура разработки приложений. Ее основные компоненты — общеязыковая исполняющая среда (Common Language Runtime) и библиотека классов . NET Framework Class Library .
Общеязыковая исполняющая среда (Common Language Runtime)
Common Language Runtime (CLR) — общеязыковая исполняющая среда, абстрагирующая сервисы операционной системы и исполняющая управляемые приложения, любое действие которых должно получить разрешение со стороны CLR.
Код для CLR представляет собой команды псевдомашинного языка Common Intermediate Language (CIL). Эти команды компилируются в машинный код соответствующего типа процессора по запросу (just-in-time) в период выполнения. Обычно компиляция метода происходит один раз во время его первого вызова. Затем результат кэшируется в памяти, чтобы избежать задержек при повторных вызовах. JIT-компилятор выполняет оптимизацию кода специально для процессора, на котором исполняется этот код.
Преобразуя команды CIL в команды процессора, JIT-компилятор выполняет верификацию кода на предмет безопасности типов.
Практически невозможно выполнить команду, обращающуюся к области памяти, к которой у этой команды нет разрешения на доступ. В управляемом приложении устраняется проблема ошибочно инициализированных указателей, запрещается преобразовать тип в нечто, чем он не является, так как это нарушение безопасности типов. CLR не позволяет вызывать методы с разрушенным стековым фреймом.
Ресурсы, выделяемые управляемым кодом, освобождаются сборщиком мусора. Иначе говоря, программист только выделяет память, но не освобождает ее — это делает CLR. Сборщик мусора отслеживает все ссылки на объекты, создаваемые программой, и уничтожает эти объекты, когда занимаемая ими память требуется где-то еще. Таким образом в приложениях с управляемым кодом разрешается проблема утечек памяти.
Верификация кода также является основой способности CLR выполнять несколько приложений внутри одного процесса. Процесс разделяется на виртуальные отсеки — домены приложений ( application domain ). Таким образом повышается эффективность использования памяти, выделяемой процессам. Домены приложений не менее безопасны, чем процессы, так как их границы не могут быть нарушены управляемыми приложениями.
В . NET включены сборки библиотеки классов . NET Framework Class library ( FCL ), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Наборы "родственных" типов собраны в отдельные пространства имен. Так, пространство имен System содержит базовый класс Object , из которого в конечном счете порождаются все остальные типы.
Таким образом, всякая сущность в . NET является объектом со своими полями и методами.
Кроме того, System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода/вывода, группу типов для безопасного преобразования одних типов в другие, форматирования данных, генерации случайных чисел и выполнения математических операций. Типами из пространства имен System пользуются все приложения.
Для изменения существующего FCL -типа можно создать свой собственный производный тип . Можно создавать свои собственные пространства имен. Все это будет четко соответствовать принципам, предлагаемым платформой . NET
Приведем некоторые наиболее распространенные пространства имен и краткое описание содержащихся там типов.
Все управляемые приложения используют библиотеку классов FCL . Это упрощает интеграцию приложений и позволяет легче переносить приложения с одного языка на другой.
Итоги
Инфраструктура . NET Framework поддерживает разработку и исполнение различных приложений. . NET Framework ставит своей целью решение следующих задач:
- предоставление объектно-ориентированной среды программирования;
- предоставление среды исполнения, решающей проблемы конфликта версий;
- предоставление среды безопасного исполнения кода (безопасность типов и другие особенности управляемого кода);
- предоставление среды исполнения, улучшающей производительность за счет управления памятью и кэширования результатов компиляции;
- улучшение интеграции и переносимости приложений за счет использования общего промежуточного языка и библиотеки типов.
. NET Framework состоит из двух основных компонент : общеязыковой исполняющей среды ( CLR ) и библиотеки классов . NET Framework.
Обеспечение согласованной объектно-ориентированной среды программирования для локального сохранения и выполнения объектного кода, для локального выполнения кода, распределенного в Интернете, либо для удаленного выполнения.
Предоставление среды выполнения кода, в которой:
сведена к минимуму вероятность конфликтов в процессе развертывания программного обеспечения и управления его версиями;
гарантируется безопасное выполнение кода, включая код, созданный неизвестным или не полностью доверенным сторонним изготовителем;
исключаются проблемы с производительностью сред выполнения скриптов или интерпретируемого кода;
обеспечиваются единые принципы разработки для разных типов приложений, таких как приложения Windows и веб-приложения;
Обозреватель Internet Explorer может служить примером неуправляемого приложения, размещающего среду выполнения (в виде расширений типов MIME). Размещение среды выполнения в обозревателе Internet Explorer позволяет внедрять управляемые компоненты или элементы управления Windows Forms в HTML-документы. Такое размещение среды позволяет выполнять управляемый мобильный код и пользоваться его существенными преимуществами, в частности выполнением в условиях неполного доверия и изолированным хранением файлов.
На следующем рисунке демонстрируется взаимосвязь среды CLR и библиотеки классов с пользовательскими приложениями и всей системой. На рисунке также показано, как управляемый код работает в пределах более широкой архитектуры.
Проблемы разработки современных информационных систем
Проблемы интеграции
- Модулей, написанных на различных языках, использующих разный API (или версии API) или разный формат представления данных;
- Программ, разработанных для различных платформ, в рамках единого программного комплекса;
- Систем, использующих разные программные модели.
Особенно часто возникают проблемы интеграции с унаследованным кодом ( legacy ). При решении задач интеграции возникают проблемы несовместимости.
Проблемы переносимости
Все чаще к программам предъявляются требования поддержки нескольких платформ (например, возможность работы с программой на платформе Windows и Mac OS).
Проблемы версий
Windows-разработчики знают о проблеме совместимости версий, известной под названием "ад DLL". Этот "ад" возникает, когда компоненты, устанавливаемые для нового приложения, заменяют компоненты старого приложения. В итоге старое приложение начинает работать неправильно или перестает работать.
Управление ресурсами
Одной из проблем программирования является управление и корректное освобождение ресурсов, файлов, памяти, пространства экрана, сетевых соединений, ресурсов баз данных и т. д. Некорректное управление этими ресурсами может привести к некорректному выполнению программы.
Безопасность типов
Когда упоминают проблему безопасности типов, имеют в виду некорректное обращение с типами данных: попытки обратиться к областям памяти за границей типа, попытки вызвать методы, отсутствующие у типа, или попытки вызвать метод, принимающий в качестве параметра тип А, и передать ему в качестве параметра объект типа В.
Обработка сбоев
При разработке Windows-приложений с использованием Win32 API некоторые функции возвращают исключения, другие — коды состояний, третьи — HRESULT . Таким образом, отсутствует согласованный механизм обработки сбоев и есть возможность игнорировать некоторые исключения, что делает код небезопасным.
Один из способов решения проблемы неоднородности — разработка и поддержка стандартных программных интерфейсов, облегчающих задачу переноса приложений на серверы различных платформ. Однако приложения могут использовать базы данных , коммуникационные и другие сервисы, интерфейсы которых не являются компонентами языка или среды программирования. Другой способ, применяемый производителями для решения проблемы неоднородности, — поддержка стандартных протоколов. Системы, поддерживающие один и тот же протокол, могут взаимодействовать друг с другом, даже если они опираются на различные машинные архитектуры и операционные системы.
. NET Framework — инфраструктура разработки приложений. Ее основные компоненты — общеязыковая исполняющая среда (Common Language Runtime) и библиотека классов . NET Framework Class Library .
Общеязыковая исполняющая среда (Common Language Runtime)
Common Language Runtime (CLR) — общеязыковая исполняющая среда, абстрагирующая сервисы операционной системы и исполняющая управляемые приложения, любое действие которых должно получить разрешение со стороны CLR.
Код для CLR представляет собой команды псевдомашинного языка Common Intermediate Language (CIL). Эти команды компилируются в машинный код соответствующего типа процессора по запросу (just-in-time) в период выполнения. Обычно компиляция метода происходит один раз во время его первого вызова. Затем результат кэшируется в памяти, чтобы избежать задержек при повторных вызовах. JIT-компилятор выполняет оптимизацию кода специально для процессора, на котором исполняется этот код.
Преобразуя команды CIL в команды процессора, JIT-компилятор выполняет верификацию кода на предмет безопасности типов.
Практически невозможно выполнить команду, обращающуюся к области памяти, к которой у этой команды нет разрешения на доступ. В управляемом приложении устраняется проблема ошибочно инициализированных указателей, запрещается преобразовать тип в нечто, чем он не является, так как это нарушение безопасности типов. CLR не позволяет вызывать методы с разрушенным стековым фреймом.
Ресурсы, выделяемые управляемым кодом, освобождаются сборщиком мусора. Иначе говоря, программист только выделяет память, но не освобождает ее — это делает CLR. Сборщик мусора отслеживает все ссылки на объекты, создаваемые программой, и уничтожает эти объекты, когда занимаемая ими память требуется где-то еще. Таким образом в приложениях с управляемым кодом разрешается проблема утечек памяти.
Верификация кода также является основой способности CLR выполнять несколько приложений внутри одного процесса. Процесс разделяется на виртуальные отсеки — домены приложений ( application domain ). Таким образом повышается эффективность использования памяти, выделяемой процессам. Домены приложений не менее безопасны, чем процессы, так как их границы не могут быть нарушены управляемыми приложениями.
В . NET включены сборки библиотеки классов . NET Framework Class library ( FCL ), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Наборы "родственных" типов собраны в отдельные пространства имен. Так, пространство имен System содержит базовый класс Object , из которого в конечном счете порождаются все остальные типы.
Таким образом, всякая сущность в . NET является объектом со своими полями и методами.
Кроме того, System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода/вывода, группу типов для безопасного преобразования одних типов в другие, форматирования данных, генерации случайных чисел и выполнения математических операций. Типами из пространства имен System пользуются все приложения.
Для изменения существующего FCL -типа можно создать свой собственный производный тип . Можно создавать свои собственные пространства имен. Все это будет четко соответствовать принципам, предлагаемым платформой . NET
Приведем некоторые наиболее распространенные пространства имен и краткое описание содержащихся там типов.
Все управляемые приложения используют библиотеку классов FCL . Это упрощает интеграцию приложений и позволяет легче переносить приложения с одного языка на другой.
Проекты сообществ
Midori
Midori – кодовое имя операционной системы с управляемым кодом, которая разрабатывалась Microsoft совместно с Microsoft Research. Сообщалось, что она может стать коммерческой реализацией операционной системы Singularity, исследовательского проекта, начатого в 2003 г. для создания высоконадёжной операционной системы, в которой ядро, драйвера устройств и приложения состоят из управляемого кода. Она проектировалась для параллельных вычислений и могла запускать программу, распределённую по нескольким узлам одновременно. В ней так же была реализована модель безопасности на основе запуска приложений в изолированной среде. Microsoft предложила несколько возможных путей миграции с Windows на Midori. Работа над операционной системой была прекращена в 2015 году, хотя многие реализованные в ней идеи попали в другие проекты Microsoft.
Ссылки на источники
Ниже приведены статьи Википедии, которые я использовал для создания хронологической шкалы:
Читайте также: