double arrow

Введение и обзор платформы .NET

Обзор платформы.NET

Компьютерная платформа.NET (.NET Framework) была выпущена компанией Microsoft в 2002 году. Всего на момент написания настоящего учебного пособия компанией было официально выпущено одиннадцать версий.

Таблица 2.1. Версии платформы.NET

Версия Дата выхода Visual Studio
1.0 1 мая 2002 года Visual Studio.NET
1.1 1 апреля 2003 года Visual Studio.NET 2003
2.0 11 июля 2005 года Visual Studio 2005
3.0 6 ноября 2006 года Visual Studio 2005 + расширения
3.5 9 ноября 2007 года Visual Studio 2008
4.0 12 апреля 2010 года Visual Studio 2010
4.5 15 августа 2012 года Visual Studio 2012
4.5.1 17 октября 2013 года Visual Studio 2013
4.5.2 5 мая 2014 года  
4.6 20 июля 2015 года Visual Studio 2015
4.6.1 17 ноября 2015 года Visual Studio 2015 Update 1

 

Платформа.NET представляет собой специальную среду, «операционную систему внутри операционной системы», в рамках которой выполняются программы, разработанные под.NET.

Основой платформы является Common Language Runtime (CLR) — «общеязыковая исполняющая среда» — компонент пакета Microsoft.NET Framework, виртуальная машина, исполняющая программы, написанные на.NET-совместимых языках программирования [3].

В некотором смысле среда.NET занимает промежуточное место между компиляторами и интерпретаторами командного типа. Здесь, в отличие от интерпретаторов, перед выполнением программа должна быть преобразована с языка высокого уровня в специальные инструкции. Однако в отличие от классических компиляторов, которые транслируют программу в инструкции, понятные конкретному процессору за один шаг, в среде.NET трансляция осуществляется в несколько этапов. При этом часть этапов выполняется непосредственно во время выполнения программы (рис.2.1).

 

Рисунок 2.1. Общая схема архитектуры.NET

На первом этапе код с языка высокого уровня преобразуется в промежуточное представление - язык Common Intermediate Language (сокращенно CIL или IL), специально разработанный компанией Microsoft. Промежуточное представление содержит всю необходимую информацию о программе, но не привязано к какому-либо определенному языку программирования или к машинному коду какой-либо целевой платформы. Затем, в момент выполнения программы, полученный CIL-код «на лету» преобразовывается в так называемый управляемый или байт-код. И, наконец, на третьем этапе полученный объектный байт-код либо исполняется виртуальной машиной CLR, либо транслируется утилитой NGen.exe в исполняемый код для конкретного целевого процессора.

Таким образом, CLR интерпретирует и исполняет код на языке IL, а также предоставляет MSIL-программам (а следовательно, и программам, написанным на языках высокого уровня, поддерживающих.NET Framework) доступ к библиотекам классов.NET Framework.

Использование платформы.NET обеспечивает ряд преимуществ. Во-первых, платформа.NET является полностью объектно-ориентированной, основанной на единой объектно-ориентированной модели. Использование промежуточного представления позволяет разрабатывать компоненты приложения на различных языках программирования. При этом, в силу того что каждый из модулей основан на единой библиотеке классов и будет скомпилирован в свое CIL-преставление, достигается полная интеграция компонентов приложения между собой. В настоящее время число поддерживаемых языков исчисляется десятками и их количество непрерывно растет. К числу наиболее известных относятся C#, Visual Basic.NET, JScript.NET, C++/CLI, F#, Ada, COBOL, Delphi, FORTRAN, Php и другие.

Следующим существенным преимуществом является платформенная независимость.NET приложений. В настоящее время известны несколько реализаций платформы.NET для операционных систем, отличных от Windows. В качестве примера можно упомянуть Mono – проект по созданию полно­ценного воплощения системы.NET Framework на базе свободного программного обеспечения. Другой проект – Portable.NET является свободным и открытым программным обеспечением, основной задачей которого является предоставление переносимого набора инструментов и системы исполнения для приложений на CIL.

В дополнение к вышеназванным можно отнести следующие преимущества платформы:

· безопасные типы и общее повышение безопасности приложений;

· единую модель обработки ошибок;

· единую среду разработки, позволяющую проводить межъязыковую отладку;

· расширенные возможности повторного использования кода;

· код, сгенерированный для.NET, может быть проверен на безопасность. Это расширяет рамки использования кода - например, путем встраивания его в Web-приложения таким образом, что часть кода будет выполняться на клиентском компьютере. Контроль за доступом к ресурсам гарантирует, что приложение не навредит пользователю и не нарушит функционирование операционной системы.

К наиболее существенным недостаткам среды следует отнести заметное снижение скорости выполнения.NET-приложений по сравнению с их аналогами, скомпилированными в команды процессора. В то же время проблема с производительностью.NET приложений не так остра, как может показаться. Причина этого в том, что наряду со средой выполнения программ.NET Framework предоставляет разработчику огромную библиотеку классов с поддержкой целого семейства программных технологий, обеспечивающих эффективное решение типовых задач, стоящих перед разработчиками. Сюда входят работа с базами данных, обработка графики, взаимодействие с устройствами ввода-вывода и многое другое.

Таким образом, быстродействие приложений в большинстве ситуаций можно значительно повысить, если эффективно использовать уже существующие решения из стандартной библиотеки  классов платформы.

Основные черты CIL

CIL можно рассматривать как ассемблер некоторой виртуальной машины. Это нетипичный ассемблер, так как он обладает многими конструкциями, характерными для языков более высокого уровня: например, в нем есть инструкции для описания пространств имен, классов, вызовов методов, свойств, событий и исключительных ситуаций. Кроме того, CIL является стековой машиной со статической проверкой типов; это позволяет отслеживать некоторые типичные ошибки.

CIL представляет собой дополнительный уровень абстракции, позволяющий легко справляться с переносом кода с одной платформы на другую, в том числе и с изменением разрядности платформы. В данный момент наряду со стандартной 32-разрядной версией существуют версии CIL для мобильных 16-разрядных устройств (.NET Compact Framework) и для работы с 64-разрядными устройствами.

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

Пример кода на CIL:

.class auto ansi Point extends ['mscorlib']System.Object

{

.field private int32 m_x

.field private int32 m_y

.method public specialname rtspecialname

 instance void.ctor() il managed

{

// Code size 21 (0x15)

.maxstack 2

IL_0000: ldarg.0

IL_0001: call instance void ['mscorlib']System.Object::.ctor()

IL_0006: ldarg.0

IL_0007: ldc.i4.0

IL_0008: stfld int32 Point::m_y

IL_000d: ldarg.0

IL_000e: ldc.i4.0

IL_000f: stfld int32 Point::m_x

IL_0014: ret

} // end of method 'Point::.ctor'

Выше приведен фрагмент CIL-кода, сгенерированный по следующему классу на С#:

 

 

class Point

{

private int m_x, m_y;

public Point() { m_x = m_y = 0; }

}

В сгенерированном коде можно найти описание класса Point и тот факт, что он унаследован от System.Object, описание закрытых переменных типа Int32 m_x и m_y (отметим, что их имена сохраняются при обратном ассемблировании) и, наконец, конструктор класса Point.

Понятие сборки

В платформе.NET появилось новое понятие - сборка (assembly). В первом приближении сборку можно воспринимать как аналог загрузочного модуля EXE или DLL, получаемого как итог компиляции проекта, например в Delphi. Несмотря на это сходство, сборка содержит существенно больше информации о приложении, чем традиционные исполняемые файлы.

Причиной появления понятия сборки можно считать трудности установки Windows-приложений. Обычное Windows-приложение состоит из множества файлов - запускаемые модули, библиотеки, дополнительные файлы и т.п. Помимо этого, при установке некоторых приложений (особенно COM-компонент) необходимо записывать в реестр Windows сведения о нахождении и способе вызова. Наконец, многие приложения использовали разделяемые DLL, что зачастую приводило к проблемам при установке более новых версий этой DLL.

Понятие сборки было введено для того, чтобы решить эти проблемы. Сборка представляет собой набор файлов, модулей и дополнительной информации, которые должны обеспечить простую установку приложения и последующую работу. Таким образом, можно говорить и о том, что повторное использование приложений может быть реализовано с помощью интеграции различных сборок.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: