Что такое CLR и зачем он нужен в .NET?
Постоянно встречаю аббревиатуру CLR, когда читаю про .NET. Что это вообще такое и почему говорят, что код C# выполняется «под управлением»? Можно простыми словами?
2 ответа
CLR (Common Language Runtime) — это виртуальная машина, среда выполнения .NET. Когда вы компилируете C#, на выходе получается не машинный код процессора, а промежуточный байт-код (CIL). Запускает и обслуживает этот байт-код именно CLR.
Что берёт на себя CLR:
- JIT-компиляция — переводит CIL в нативный код прямо во время выполнения, под вашу архитектуру;
- Сборка мусора (GC) — автоматически освобождает память, вам не нужно вручную делать
free; - Управление типами и безопасность — проверяет, что вы не лезете в чужую память;
- Обработка исключений, потоки, загрузка сборок.
Именно поэтому говорят «managed code» (управляемый код): за жизненным циклом памяти и выполнением следит рантайм, а не вы. Аналог в мире Java — это JVM. CLR играет ровно ту же роль для C#, F# и VB.NET.
Если совсем коротко: CLR — это «движок», который превращает ваш скомпилированный C# в то, что реально умеет исполнять процессор, и параллельно убирает за вами мусор в памяти. Без него .dll/.exe из C# — просто набор инструкций, которые сами по себе не запустятся.