
порно 2013 / Мулаточки 18+ / Вопрос 2 - Архитектура .NET
.docКогда вы пишете исходный код С#, вы создаете инструкции для программы. Инструкции определяются с помощью языка программирования С#, который удобен для вас, но не для компьютера. Компьютер не понимает текста; он понимает только нули и единицы. Чтобы передать инструкции компьютеру, разработчики создали вы-сокоуровневый механизм, который преобразует ваши инструкции в нечто понятное компьютеру. Вы, вероятно, уже знаете, что эта утилита преобразования называется компилятор (compiler).
Платформа .NET отличается от традиционных языков программирования, таких как С++ и С, тем, что его компилятор создает бинарный промежуточный код на языке, называемом общим промежуточным языком (Common Intermediate Language - CIL). Затем среда .NET Framework преобразует код CIL в бинарные инструкции, необходимые для процессора компьютера.
Вы могли бы подумать, что преобразование исходного кода в промежуточный неэффективно, но по правде говоря, это хороший подход. Давайте используем аналогию. Немецкие овчарки обычно обучаются быстро и не требуют многократного повторения уроков. Бульмастифы, напротив, нуждаются в большем терпении, поскольку обычно они очень упрямы. Теперь представьте, что вы инструктор-кинолог и должны написать инструкцию по обучению именно бульмастифов. Если те же инструкции применить к немецкой овчарке, то для нее это, вероятно, закончится расстройством психики, и необходимого результата в обучении не даст.
Проблема с инструкциями в том, что они специализированы для одной собаки. Если вы хотите обучать двух собак, необходимо два набора инструкций. Чтобы решить эту проблему, инструкции должны быть общими, с примечаниями вроде "если собака упря-мая, повторите".
Переведя это на компьютерный язык, можно сказать, что это два набора инструкций для двух разных процессоров или процессоров, используемых в определенных ситуациях. Например, существуют компьютеры-серверы и компьютеры-клиенты. К компьютеру каждого типа предъявляются разные требования. Сервер должен по возможности быстро обрабатывать данные, а компьютер клиента должен как можно быстрее отображать их на экране. Для каждого случая имеются свои компиляторы, но если разработчик будет создавать по несколько версий с помощью разных компиляторов или параметров, то это будет неэффективно. Решение заключается в том, чтобы создать набор инструкций, которые будут общими, но с примечаниями, которые можно интерпретировать. Впоследствии среда .NET Framework применит эти инструкции и интерпретирует примечания.
Среда .NET Framework компилирует инструкции CIL, используя встроенные приме-чания, и преобразует их в инструкции для конкретного процессора. Архитектура .NET приведена на рисунке.
Архитектура .NET
На рисунке среда Visual С# Express осуществляет преобразование исходного кода С# в пакет CIL. Преобразованный пакет CIL - это двоичный файл, для выполнения которого требуется среда исполнения общего языка (Common Language Runtime - CLR). Без установки среды CLR на компьютере вы не сможете запустить пакет CIL. Когда вы установите среду разработки Visual С# Express, вы заодно установите и CLR как отдельный пакет. Visual С# Express является приложением, которое позволяет вам разрабаты-вать код для CLR, но оно, конечно же, позволяет вам и использовать его.
Среда CLR способна преобразовать ваши инструкции пакета CIL в нечто понятное операционной системе и процессору. Если вы рассмотрите синтаксис языков, совме-стимых с .NET, вроде Visual Basic, С# или Eiffel.NET, то заметите, что они не одинаковы. Но среда CLR может обработать пакет CIL, созданный любым из этих языков, поскольку компилятор .NET независим от языка программирования, он создает набор общих инструкций для CLR.
При использовании среды .NET Framework вы пишете для CLR, и все, что вы делаете, должно быть понятно среде CLR. По правде говоря, это не проблема, если вы пишете код на языке С#. Ниже приведены некоторые преимущества написания кода для CLR.
Память и сбор мусора. Программы используют ресурсы, такие как память, фай¬лы и т.д. В традиционных языках программирования, С и С++, вы открываете и закрываете файлы, резервируете и освобождаете память. В .NET вы не должны волноваться о закрывании файлов и освобождении памяти. CLR известно, когда файл или область памяти больше не используется, и автоматически закрывает файл или освобождает память.
На заметку. Некоторые программисты могут подумать, что CLR поощряет неряшливый стиль программирования, поскольку мы не обязаны прибирать сами за собой. Однако практика показала, что в любом сложном приложении вы будете тратить время и ресурсы впустую, выясняя, где не была освобождена память.
Специальная оптимизация. Некоторые программы должны обработать большие объемы данных, взятых, например, из базы данных, или отображать сложный пользовательский интерфейс. Для каждого из них важна эффективность разных участков кода. Среда CLR способна оптимизировать пакет CIL и решить, как выполнять его быстро и наиболее эффективно.
Общая система типов (Common Туре System - CTS). Тип string в Visual Basic точно такой же, как и в С#. Это гарантирует, что пакет CIL, созданный на языке С#, сможет общаться с пакетом CIL, созданным на языке Visual Basic, без искажения данных.
Безопасный код. Когда вы пишете программы, взаимодействующие с файлами или памятью, существует вероятность того, что ошибка в программе может вызывать проблемы общей защиты. Хакеры могут использовать любую ошибку защиты для запуска собственных программ, что потенциально приводит к финансовой катастрофе. Среда CLR не может предотвратить ошибок приложения, но она может остановить и прервать программу, которая приводит к ошибке в связи с некорректным обращением к памяти или файлу.
Преимущество CLR в его способности позволять разработчикам сосредотачиваться на проблемах, связанных с приложением, и не волноваться о проблемах инфраструктуры. С CLR вы сосредотачиваетесь на коде приложения, который читает и обрабатывает содержимое файла. Без CLR вы должны также придумывать код, который использует содержимое файла, и код, который несет ответственность за открытие, чтение и закрытие файла.