logo

.NET Common Language Runtime (CLR)

.NET CLR е среда за изпълнение, която управлява и изпълнява кода, написан на всеки език за програмиране .NET. CLR е компонентът на виртуалната машина на .NET framework. Компилаторът на този език компилира изходния код на приложения, разработени с помощта на съвместими с .NET езици, в междинния език на CLR, наречен MSIL, т.е. код на междинния език на Microsoft. Този код е независим от платформата. Той е сравним с байт кода в java. Метаданните също се генерират по време на компилация и MSIL код и се съхраняват във файл, известен като манифестен файл. Тези метаданни обикновено са за членове и типове, изисквани от CLR за изпълнение на MSIL код. Компонентът за компилатор точно навреме на CLR преобразува MSIL кода в собствен код на машината. Този код зависи от платформата. CLR управлява памет, нишки, изключения, изпълнение на код, безопасност на кода, проверка и компилация.

java точка

Следващата фигура показва преобразуването на изходния код в собствен код.

Net Common Language Runtime

Горната фигура преобразува кода в собствен код, който процесорът може да изпълни.

Основните компоненти на CLR са:

  • Система от общ тип
  • Спецификация на общия език
  • Събирач на боклук
  • Просто в Time Compiler
  • Метаданни и сборки
Net Common Language Runtime

1. Система от общ тип:

CTS предоставя насоки за деклариране, използване и управление на типове данни по време на изпълнение. Предлага междуезична комуникация. Например VB.NET има тип данни integer, а C# има тип данни int за управление на цели числа. След компилация Int32 се използва и от двата типа данни. И така, CTS предоставя типовете данни, използвайки управляван код. Системата с общ тип помага при писането на независим от езика код.

Той предоставя две категории типове.

    Тип стойност:Тип стойност съхранява данните в паметта, разпределена в стека или вградена в структура. Тази категория тип съдържа директорията с данни. Ако стойността на една променлива се копира в друга, и двете променливи съхраняват данни независимо. Може да бъде от вградени типове, дефинирани от потребителя или типове изброяване. Вградените типове са примитивни типове данни като числови, булеви, char и дата. Потребителите в изходния код създават дефинирани от потребителя типове. Изброяването се отнася до набор от изброени стойности, представени от етикети, но съхранени като числов тип.
    Net Common Language Runtime Референтен тип:Типът Reference съхранява препратка към стойността на адрес на паметта и се разпределя в купчината. Динамичната памет се използва за динамично разпределение на паметта. Референтният тип не съдържа директно действителни данни, но съдържа адреса на данните. Всеки път, когато се прави обект от референтен тип, той копира адреса, а не действителните данни. Следователно две променливи ще се отнасят до едни и същи данни. Ако данните на един обект на Reference Type се променят, същото се отразява и на другия обект. Референтните типове могат да бъдат самоописващи се типове, типове указатели или типове смущения. Самоописващите се типове могат да бъдат типове низове, масиви и класове, които съхраняват метаданни за себе си.

2. Обща езикова спецификация (CLS):

Общата езикова спецификация (CLS) съдържа набор от правила, които трябва да се следват от всички поддържани от NET езици. Общите правила улесняват внедряването на езикова интеграция и помагат при междуезичното наследяване и отстраняване на грешки. Всеки език, поддържан от NET Framework, има свои собствени правила за синтаксис. Но CLS гарантира оперативна съвместимост между приложения, разработени с помощта на NET езици.

3. Събиране на боклука:

Garbage Collector е компонент на CLR, който работи като автоматичен мениджър на паметта. Той помага за управление на паметта чрез автоматично разпределяне на паметта според изискванията. Той разпределя памет на купчина за обекти. Когато обектите не се използват, той възстановява разпределената за тях памет за бъдеща употреба. Той също така гарантира безопасността на обектите, като не позволява на един обект да използва съдържанието на друг обект.

4. Компилатор Just in Time (JIT):

JIT компилаторът е важен компонент на CLR. Той преобразува MSIL кода в собствен код (т.е. специфичен за машината код). Програмата .NET се компилира изрично или неявно. Разработчикът или програмистът извиква определен компилатор, за да компилира програмата в изричната компилация. При неявна компилация програмата се компилира два пъти. Изходният код се компилира в Microsoft Intermediate Language (MSIL) по време на първия процес на компилиране. MSIL кодът се преобразува в естествен код във втория процес на компилиране. Този процес се нарича JIT компилация. Има три вида JIT компилатори - Pre, Econo и Normal. Pre JIT Compiler компилира целия MSIL код в естествен код преди изпълнение. Econo JIT Compiler компилира само тези части от MSIL кода, необходими по време на изпълнение, и премахва тези части, които вече не са необходими. Нормалният JIT компилатор също компилира само онези части от MSIL кода, необходими по време на изпълнение, но ги поставя в кеша за бъдеща употреба. Не изисква повторно компилиране на вече използвани части, тъй като те са били поставени в кеш паметта.

5. Метаданни:

Метаданните са двоична информация за програмата, съхранена в CLR Portable Executable File (PE) заедно с MSIL код или в паметта. По време на изпълнението на MSIL метаданните също се зареждат в паметта за правилно тълкуване на класове и свързаните с тях. Информация, използвана в кода. Така че метаданните помагат за внедряването на код по езиково неутрален начин или за постигане на езикова оперативна съвместимост.

6. Сглобки:

Сглобката е основна единица на групиране на физически код. Състои се от манифест на асемблиране, метаданни, MSIL код и набор от ресурси като файлове с изображения. Също така се счита за основна единица за внедряване, контрол на версиите, повторно използване, разрешения за сигурност и т.н.

.NET CLR функции

Следват функциите на CLR.

  • Той преобразува програмата в естествен код.
  • Обработва изключения
  • Осигурява типова безопасност
  • Управление на паметта
  • Осигурява сигурност
  • Подобрена производителност
  • Езиково независим
  • Независимо от платформата
  • Събиране на боклук
  • Осигурява езикови функции като наследяване, интерфейси и претоварване за обектно-ориентирани програми.

Кодът, който работи с CLR, се нарича управляван код, докато кодът извън CLR се нарича неуправляван код. CLR също така предоставя слой за оперативна съвместимост, който позволява на управляваните и неуправляваните кодове да си взаимодействат.

1. Управляван код:

Всеки език, който е написан в .NET framework, е управляван код. Управляваният код използва CLR, който се грижи за вашите приложения чрез управление на паметта, обработка на сигурността, разрешаване на междуезично отстраняване на грешки и т.н. Процесът на управляван код е показан на фигурата:

Net Common Language Runtime

2. Неуправляван код:

Кодът, разработен извън .NET framework, е известен като неуправляем код. Приложенията, които не работят под контрола на CLR, се наричат ​​неуправляеми. Някои езици като C++ могат да се използват за писане на такива приложения, като например функции за достъп на ниско ниво на операционната система. Съвместимостта на заден план с VB, ASP и COM са примери за неуправляем код. Този код се изпълнява с помощта на обвиващи класове. Процесът на неуправляван код е показан по-долу:

Net Common Language Runtime

.NET CLR версии

CLR се актуализира от време на време, за да осигури по-добра производителност.

.NET версия CLR версия
1.0 1.0
1.1 1.1
2.0 2.0
3.0 2.0
3.5 2.0
4 4
4.5 4
4.6 4
4.6 4

.NET CLR структура

Следва структурата на компонентите на Common Language Runtime.

Net Common Language Runtime

Поддръжка на библиотека от базови класове

Това е библиотека с класове, която поддържа класове за приложението .NET.

Поддръжка на нишки

Той управлява паралелното изпълнение на многопоточното приложение.

COM Marshaler

Той осигурява комуникация между COM обектите и приложението.

Двигател за сигурност

Той налага ограничения за сигурност.

Машина за отстраняване на грешки

Позволява ви да дебъгвате различни видове приложения.

Проверка на типа

Той проверява типовете, използвани в приложението, и проверява дали отговарят на стандартите, предоставени от CLR.

Мениджър на кодове

Той управлява кода по време на изпълнение.

Събирач на боклук

Той освобождава неизползваната памет и я разпределя за ново приложение.

Обработчик на изключения

Той обработва изключението по време на изпълнение, за да избегне повреда на приложението.

ClassLoader

Използва се за зареждане на всички класове по време на изпълнение.