Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект лекцій розробка.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
24 Мб
Скачать
☆

1.3. Третій факт: в asp.Net підтримується безліч мов програмування. Четвертий факт: asp.Net обслуговується середовищем clr

Третий факт: в ASP.NET поддерживается множество языков программирования

Хотя при разработке приложения предпочтение, скорее всего, будет отдано какому- то одному языку, выбор языка никак не влияет на то, какие задачи с помощью приложения можно будет решать. Причина в том, что какой бы язык не использовался, код всегда будет компилироваться в IL.

Язык IL является своего рода “трамплином” для любого управляемого приложения. (Под управляемым (managed) приложением понимается любое приложение, которое пишется для .NET и выполняется внутри управляемой среды CLR.) В некотором смысле IL даже можно назвать языком .NET, потому что он является единственный языком, который распознает исполняющая среда CLR.

Чтобы лучше понять, что собой представляет IL, не помешает рассмотреть простой пример. Поэтому давайте возьмем следующий код на языке С#:

using System; namespace HelloWorld {

public class TestClass {

private static void Main(string [ ] args)

{

Console.WriteLine ("Hello World");

}

Этот код показывает, как может выглядеть самое простое из всех возможных в .NET приложений, а именно — простая утилита командной строки, которая отображает в окне консоли предсказуемое сообщение.

Теперь посмотрим на него с другой стороны. Ниже приведен код IL для его метода Main():

.method private hidebysig static void Main(string [ ] args) cil managed {

.entrypoint

// Размер кода 13 (Oxd)

.maxstack 8 IL_0000: nop

IL_0001: ldstr "HelloWorld"

IL_0006: call void [mscorlib]System.Console::WriteLine(string)

IL_000b: nop

IL_000c: ret

} // конец метода TestClass::Main

Просмотреть IL-код для любого скомпилированного приложения .NET довольно легко. Для этого нужно запустить программу дизассемблера IL под названием ildasm.exe, которая устанавливается вместе с Visual Studio и .NET SDK (Software Development Kit — набор инструментальных средств разработки программного обеспечения). Найдите файл ildasm.exe. в каталоге вроде c:\Program Files\Microsoft SDKs\Windows\v7.0A\ bin и запустите его. В окне утилиты выберите в меню File (Файл) пункт Open (Открыть) и укажите необходимый DLL- или EXE-файл, который был создан с помощью .NET.

Совет. Для получения еще больших возможностей дизассемблирования можно воспользоваться другим замечательным (и бесплатным) инструментом — Reflector, который доступен для загрузки по адресу http://www.red-gate.com/products/reflector. Благодаря созданным членами сообщества подключаемым модулям, Reflector позволяет составлять диаграммы, анализировать и декомпилировать IL-код любой сборки.

За счет терпения и небольших логических рассуждений можно разобраться в коде IL и вычислить, что в нем происходит. Тот факт, что IL настолько просто дизассемблируется, чреват проблемами с конфиденциальностью и управлением кодом, но разработчики приложений ASP.NET беспокоиться об этом не должны, потому что весь код ASP.NET сохраняется и выполняется на сервере. Поскольку клиент никогда не получает скомпилированного файла кода, никакой возможности декомпилировать его не будет. Если же подобные проблемы все-таки беспокоят, рассмотрите вариант применения маскировщика для запутывания кода и превращения его в более трудный для понимания. (Маскировщик, например, может переименовать все переменные и назначить им имена вроде f__а__234.) В состав Visual Studio входит ограниченная версия популярного маскировщика Dotfuscator.

Ниже приведен код того же самого консольного приложения на языке Visual Basic:

Imports System

Namespace HelloWorld

Public Class TestClass

Private Shared Sub Main(args() As String)

Console.WriteLine("Hello World")

End Sub End Class End Namespace

Скомпилировав это приложение и просмотрев код IL, можно обнаружить, что он практически идентичен сгенерированному коду IL для версии на языке С#. Хотя разные компиляторы иногда проводить собственную оптимизацию, как правило, результаты одного языка .NET не будут лучше результатов любого другого языка .NET, т.к. все языки используют одну и ту же инфраструктуру. Эта инфраструктура определена в спецификации CLS, которая более подробно описана во врезке “Общая спецификация для языков программирования”.

Важно отметить, что IL был недавно признан стандартом Есmа и ISO. Это может послужить толчком к скорому признанию таковым и других общеязыковых платформ, предназначенных для использования на других платформах. Наилучшим примером является проект Mono, доступный по следующему адресу: http://www.mono-project.com.

Общая спецификация для языков программирования

В среде CLR ожидается, что все объекты будут отвечать определенному ряду правил. Этот ряд правил детально изложен в общей спецификации для языков программирования (Common Language Specification — CLS).

В спецификации CLS описаны многие законы, которые должны обязательно соблюдаться во всех языках, такие как примитивные типы, перегрузка методов и т.д. Любой компилятор, который генерирует код IL для выполнения в среде CLR, должен обязательно следовать всем перечисленным в CLS правилам. Спецификация CLS предоставляет разработчикам, поставщикам и производителям программного обеспечения возможность работать в рамках одинаковых правил в отношении языков, компиляторов и типов данных. Список многих отвечающих требованиям CLS языков доступен по адресу http://dotnetpowered.com/languages.aspx.

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

Четвертый факт: ASP.NET обслуживается средой CLR

Пожалуй, наиболее важным аспектом механизма ASP.NET является то, что функционирует он внутри исполняющей среды CLR. Все части .NET Framework — т.е. все пространства имен, приложения и классы — называются управляемым кодом.

Автоматическое управление памятью и сборкой мусора. При каждом создании в приложении экземпляра объекта ссылочного типа CLR выделяет для него в памяти соответствующее пространство в управляемой куче. Вручную очищать это пространство в памяти никогда не потребуется. При выходе ссылки на объект за пределы области видимости (или завершении работы приложения) объект сразу же становится доступным для сборщика мусора. Сборщик мусора периодически запускается внутри CLR и автоматически восстанавливает неиспользуемую память, которую занимают более недоступные объекты. Подобная модель избавляет от необходимости иметь дело с низкоуровневыми деталями манипулирования памятью в C++ и запутанного подсчета ссылок в СОМ.

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

Расширяемые метаданные. Информация о классах и членах является только одним из типов метаданных, которые .NET может сохранять в скомпилированной сборке. Метаданные описывают код и позволяют предоставлять дополнительную информацию исполняющей среде и другим службам. Например, эти метаданные могут указывать отладчику, как следует выполнять трассировку кода, или же сообщать Visual Studio о том, как во время проектирования должен отображаться какой-то специальный элемент управления. Они также могут использоваться для активизации других служб во время выполнения, например, запуска транзакций или пула объектов.

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

Многопоточность. Среда CLR предоставляет пул потоков, которые различные классы могут использовать. Например, можно вызывать методы, считывать файлы и взаимодействовать с веб-службами асинхронным образом, не создавая явно никаких новых потоков. На рис. 1.2 показано высокоуровневое представление CLR и .NET Framework.

Р ис. 1.2. CLR и .NET Framework