Главная » C# » Как работает .NET Framework?

0

Когда вы пишете исходный код на С#, то создаете инструкции для исполнения прраммой. Инструкции определяются с помощью языка программирования С#, который, в общем, понятен людям, но совсем непонятен компьютерам. Компьюты не понимают информацию в виде текста, они понимают единицы и нули. Чтобы вводить инструкции в компьютер в понятной для него форме, был разработан вокоуровневый механизм, который преобразовывает текстовые инструкции в фоат, понимаемый компьютером. Этот преобразовывающий инструмент называется компилятором.

Но особенность .NET, в отличие от традиционных языков  программирования, тих как С++ и С, состоит в том, что компилятор генерирует двоичный промежочный код на языке CIL (Common Intermediate Language). .NET Framework потом преобразовывает инструкции из формата CIL в двоичные инструкции, требуемые для процессора.

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

Проблема здесь заключается в том, что инструкции были настроены для дрессовки конкретной породы собак.  Для дрессировки  двух  разных  пород требуются две разные инструкции.  Но  можно также применить и  одни,  общие,  инструкции, но с  примечаниями  для  конкретной  породы,  например:  "Если  собака упрямится, то повторите упражнение".

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

Исходный код компилируется в инструкции на языке CIL, которые потом преобруются в специфичные для конкретного процессора инструкции с помощью этих интерпретационных примечаний. Архитектура .NET показана на рис. 1.11.

Рис. 1.11. Архитектура  NET

На рис. 1.11 показано, что среда Visual С# Express является ответственной за прбразование исходного кода на языке С# в пакет CIL.  Пакет  CIL  представляет собой двоичный файл, для исполнения которого требуется среда CLR (common language runtime, общеязыковая среда исполнения). Если на компьютере не устовлена среда CLR, то пакет C1L исполняться на нем не будет. Среда CLR устанаивается в фоне как отдельный компонент при инсталляции Visual С#  Express. Кроме того, что Visual С# Express позволяет разрабатывать приложения для среды, CLR и сама использует эту среду.

Среда CLR позволяет преобразовывать инструкции в пакете C1L в формат, понаемый процессором и операционной системой. Если вы сравните синтаксисы раых языков .NET, таких как Visual Basic, С# или Eiffel.NET, то увидите, что они отличаются друг от друга.  Но среда CLR может работать с пакетами CIL,  создаыми на любом из этих языков, т. к. независимо от языка программирования, коилятор .NET генерирует набор инструкций, общих для среды CLR.

Программы, разрабатываемые с помощью .NET Framework, создаются для среды CLR,  поэтому  все  в  них должно  быть  понятным  для  этой  среды.  В  общем,  это

требование не является проблемой при создании кода на языке С#. Далее привится  список  некоторых  преимуществ  кода,  предназначенного  для  исполнения в среде CLR.

•   Управление памятью и сборка мусора.  Программы  используют  ресурсы,  такие как память, файлы и т. п. В традиционных языках программирования, таких как С и С++, задачи открытия и закрытия файлов, выделения и освобождения пами являются ответственностью программиста. В .NET программисту нет надоости беспокоиться о закрытии файлов или освобождении памяти. Среда CLR знает, когда файл  или память больше не используется, и автоматически закрает файл или освобождает память.

ПРИМЕЧАНИЕ

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

•   Оптимизация под специфические требования. Одним программам нужно обрабатывать большие объемы данных, например, записи в базе данных, а другим — предоставлять сложный пользовательский  интерфейс.  В  каждом случае производительность фокусируется на разный тип кода. Среда CLR может оптимизировать пакет CIL и решить, какой способ исполнения будет для него наиболее быстрым и эффективным.

•   Система общих типов (common type  system,  CTS).  Строка  в  Visual  Basic  такая же, как и строка в С#. Таким образом, обеспечивается правильное взаимодейсие   пакета  CIL,   сгенерированного   в   С#,   с   пакетом   CIL,   сгенерированным в Visual Basic, и избежание неправильного представления типов данных.

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

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

Советы разработчику

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

•    В С# имеются три основные типа программ: приложения Windows, консольные приложения и библиотеки классов.

•    Приложение Windows имеет пользовательский интерфейс и работает, как любое другое приложение Windows (например, Блокнот или  Калькулятор). Основным свойством приложений Windows является ассоциирование событий с действиями.

•    Консольное приложение проще, чем приложение Windows, и в нем не исполуются события. Эти приложения применяются для обработки данных. Коольные приложения принимают данные из командной строки  и  выводят даые в окно командной строки.

•    Для управления кодирования, отладки и исполнения приложения следует половаться интегрированной средой разработки.

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

•    В ней также можно применять комбинации клавиш для упрощения выполнения повторяющихся операций. Например, в Visual С# Express изменения в проекте можно сохранить с помощью комбинации клавиш <Ctrl>+<S>, а с помощью комбинации клавиш <Ctrl>+<F5> приложение  можно запустить на исполнение без отладки.

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

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии