DOTNET Framework: CLR, CTS and CLS

DOTNET Framework

Languages supported by DOT NET:

DOT NET supports more than 50 languages. Some of them are listed below:
C++, C#, Visual Basic, Dr. Scheme, Pascal, Java, Javascript, J#, JScript, Cobol, PHP, Prolog, Ruby, Scala, Fortran,  Flash, Basic, Assembly, ADA, APL, Curriculum, Eiffel, Forth, Haskel, Mercury, Mondrian, Oberon, Oz, Perl, Python, RPG, SmallTalk, Standard ML, Lexico, LISP, SML, Spry, Synergy, Zoon, Processing, Pan, Nemerle, Modula -2, Lua, Logo, Cobra, Clarion, CAT, Caml, ASML, BETA, BF, Boo.......

How does DOT NET support/manage so many languages?

We will have to understand the DOTNET Framework for answer of the above query.

CLR: Common Language Runtime:

It is the programming environment which manages the execution of programs written in any of several supported languages by dotnet. It allows them to share common object-oriented classes written in any of the languages. The Common Language Runtime is somewhat comparable to the Java Virtual Machine that Sun Microsystems furnishes for running programs compiled from the Java language. Microsoft refers to its Common Language Runtime as a "managed execution environment." Some other tasks performed by CLR:

Garbage Collector
Permission and policy-based security
Exceptions
Threading
Diagnostics and profiling


How is CLR able to run so many languages?
We will have to understand CLR Execution Model for answer of the above query.

Common Type System (CTS) describes how types are declared, used and managed in the runtime and facilitates cross-language integration, type safety, and high performance code execution. Following are some of the functions performed by CTS:

1. Common Types are mapped to types across all languages. For example: Byte, Sbyte, Single, Double, String, Int16, etc. are mapped to the common type system.

Example: In some of the languages, we declare integer as int, integer. But CTS converts it into Integer32.

2. Value Types are stored in Stack and Reference Types are store in Heap.

3. Boxing (Value Type to Reference Type) \ UnBoxing (Reference Type to Value Type).

Common Language Specification (CLS) is an agreement among language designers and class library designers to use a common subset of basic language features that all languages have to follow. In simple words, we can define this term as 'Set of Rules' which a language must follow to run on DOTNET framework

When we write our code in any of the supported languages by DOTNET, The CTS examines the code against CLS and then converts it into an intermediate language called MSIL (Microsoft Intermediate Language). Now JIT(Just In Compiler) takes that MSIL code and converts it into Machine code.