What is Common Language Runtime (CLR)

Common Language Runtime (CLR) is one of the key components of .NET. Learn what is CLR in .NET and C#.

Today in this article, I will explain what .NET CLR is and what role the CLR plays in C# applications execution.

The heart of .NET Framework is a run-time environment called the common language runtime (CLR). The CLR manages the life cycle and executes .NET applications (code). It also provides services that make the development process easier. 
 

Key attributes of .NET CLR

  • As part of the Microsoft  .NET Framework, the Common Language Runtime (CLR) is the programming (Virtual Machine component) that manages the execution of programs written in any language that uses the .NET Framework, for example C#, VB.Net, F# and so on.
  • Programmers write code in any language, including VB.Net, C# and F# yhen they compile their programs into an intermediate form of code called CLI in a portable execution file (PE) that can be managed and used by the CLR and then the CLR converts  it into machine code to be will executed by the processor.
  • The information about the environment, programming language, its version and what class libraries will be used for this code are stored in the form of metadata with the compiler that tells the CLR how to handle this code.
  • The CLR allows an instance of a class written in one language to call a method of the class written in another language.

Got it? Let's try to look at the process of a C# application in this below diagram.

CLR Diagram
 
As you can see from the above diagram, the CLR provides several services. 

Functions of .NET CLR

  • Convert code into CLI
  • Exception handling
  • Type safety
  • Memory management (using the Garbage Collector)
  • Security
  • Improved performance
  • Language independency
  • Platform independency
  • Architecture independency 

Components of .NET CLR 

The key components of CLR includes the following: 
  • Class Loader - Used to load all classes at run time.
  • MSIL to Native code - The Just In Time (JTI) compiler will convert MSIL code into native code. 
  • Code Manager - It manages the code at run time. 
  • Garbage Collector - It manages the memory. Collect all unused objects and deallocate them to reduce memory. 
  • Thread Support - It supports multithreading of our application. 
  • Exception Handler - It handles exceptions at run time.

Benefits of .NET CLR


The runtime provides the following benefits: 
  • Performance improvements.
  • The ability to easily use components developed in other languages.
  • Extensible types provided by a class library.
  • Language features such as inheritance, interfaces, and overloading for object-oriented programming.
  • Support for explicit free threading that allows creation of multithreaded, scalable applications.
  • Support for structured exception handling.
  • Support for custom attributes.
  • Garbage collection.
  • Use of delegates instead of function pointers for increased type safety and security. 

Summary

 
In this article, I discussed basics of .NET CLR, its components, work, and benefits. While this article was written based on earlier versions of .NET, the current CLR version is 5. Going forward, the .NET Framework and .NET Core will become one as .NET 5. I highly recommend reading this article: Future of .NET