Отношение между C# (Csharp) и .NET
C# - это относительно новый язык программирования, который характеризируется следующими преимуществами:
- Он спроектирован специально для применения с Microsoft .NET Framework (развитой платформой разработки, развертывания и исполнения распределенных приложений).
- Это язык, основанный на современной обьектно-ориентированной методологии проектирования, при разработке которого специалисты Microsoft опирались на опыт создания подобных языков, построенных в соответствии с обьектно-ориентированными принципами, которые были впервые предложены около 20 лет назад.
С# - это независимый язык программирования. Хотя он и предназначен для генерации кода, исполняемого в среде .NET, сам по себе он не является частью .NET. Однако поскольку язык C# предназначен для применения на платформе .NET, Вам, как разработчику, важно иметь представление о .NET Framework, если Вы хотите эффективно разрабатывать приложения на С#.
Общеязыковая исполняющая среда CLR (Common Language Runtime)
Центральной частью каркаса .NET является его Общеязыковая исполняющая среда - Common Language Runtime (CLR), или .NET runtime.
Код, исполняемый под управлением CLR, часто называют управляемым кодом.
Однако перед тем как код сможет исполниться CLR, любой исходный текст (на C# или другом языке) должен быть скомпилирован. Компиляция в .NET состоит из двух шагов:
- Компиляция исходного кода в IL.
- Компиляция IL в специфический для платформы код с помощью CLR.
Этот двухшаговый процесс компиляции очень важен, потому что наличие IL(управляемого кода) - это ключ ко многим преимуществам .NET.
Преимущества управляемого кода
Промежуточный язык Microsoft (MSIL) разделяет с байт-кодом Java идею низкоуровневого языка с простым синтаксисом (базируюшегося на числовых кодах вместо текста), который может быть очень быстро транслирован в родной машинний код. Наличие этого кода с четко определенным универсальным синтаксисом дает ряд существенных преимуществ.
Это значит, что файл, содержащий инструкции бакт-кода, может быть размещен на любой платформе; во время исполнения финальная стадия компиляции может быть легко осуществлена, что позволит выполнить код на конкретной платформе. Другими словами, компилируя в IL, вы получаете платформенную независимость .NET.
Повышение производительности
IL всегда компилируется оперативно (Just-In-Time, известно также, как JIT-компиляция). Вместо компиляции всего приложения за один проход (что может привести к задержкам при запуске), JIT-компилятор просто компилирует каждую порцию кода при ее вызове(just-in-time - оперативно). Если промежуточный код однажды скомпилирован, то результирующий машинный исполняемый код сохраняется до момента завершения работы приложения, поэтому его перекомпиляция при повторных вызовах не требуется.Microsofr аргументирует, что такой процесс более эффективен, чем копиляция всего приложения при запуске, поскольку высока вероятность того, что большие куски кода приложения на самом деле не будут выполняться при каждом запуске. При использовании JIT-компилятора такой код никогда не будет скомпилирован.
Это обьясняет, почему можно рассчитывать на то, что выполнение родного управляемого кода IL будет почти настолько же быстрым, как и выполнение родного машинного кода.
Финальная стадия компиляции проходит во время выполнения, JIT-компилятор на этот момент уже знает, на каком типе процессора будет запущена программа.
А это значит, что он может оптимизировать финальный исполняемый ко, используя инструкции конкретного машинного кода, предназначенные для конкретного процессора.
Традиционные компиляторы оптимизируют код, но они могут выполнить лишь ту оптимизацию, которая не зависит от конкретного процессора, на котором код будет выполняться. Это происходит потому, что традиционные компиляторы генерируют исполняемые программы до того, как они поставляются пользователям.
Языковая способность к взаимодействию
Применение IL не только обеспечивает независимость от платформы; оно также обеспечивает способность к взаимодействию. Только представьте, что вы можете скомпилировать программу на одном языке в код IL, и этот скомпилированный код сможет свободно взаимодействовать с IL-кодом, скомпилированным из другого языка.
Возможно, вас удивит, что другие языки, помимо C# совместимы с .NET, такие как: Visual Basic 2005, Visual C++ 2005, Visual J# 2005.