Difference between CLR,CTS and CLS in .Net
CLR....
The Common Language Runtime
(CLR) is the virtual machine component of Microsoft's .NET initiative.
It is Microsoft's implementation of the Common Language Infrastructure
(CLI) standard, which defines an execution environment for program code.
The CLR runs a form of bytecode called the Common Intermediate Language
(CIL, previously known as MSIL -- Microsoft Intermediate Language).
Developers
using the CLR write code in a language such as C# or VB.Net. At compile
time, a .NET compiler converts such code into CIL code. At runtime, the
CLR's just-in-time compiler converts the CIL code into code native to
the operating system. Alternatively, the CIL code can be compiled to
native code in a separate step prior to runtime. This speeds up all
later runs of the software as the CIL-to-native compilation is no longer
necessary.
Although some other implementations of the Common
Language Infrastructure run on non-Windows operating systems,
Microsoft's implementation runs only on Microsoft Windows operating
systems.
The virtual machine aspect of the CLR allows programmers
to ignore many details of the specific CPU that will execute the
program. The CLR also provides other important services, including the
following:
* Memory management
* Thread management
* Exception handling
* Garbage collection
* Security
CLS...
To fully interact with other
objects regardless of the language they were implemented in, objects
must expose to callers only those features that are common to all the
languages they must interoperate with. For this reason, the Common
Language Specification (CLS), which is a set of basic language features
needed by many applications, has been defined. The CLS rules define a
subset of the common type system; that is, all the rules that apply to
the common type system apply to the CLS, except where stricter rules are
defined in the CLS. The CLS helps enhance and ensure language
interoperability by defining a set of features that developers can rely
on to be available in a wide variety of languages. The CLS also
establishes requirements for CLS compliance; these help you determine
whether your managed code conforms to the CLS and to what extent a given
tool supports the development of managed code that uses CLS features.
If your component uses only CLS features in the API that it exposes to other code (including derived classes), the component is guaranteed to be accessible from any programming language that supports the CLS. Components that adhere to the CLS rules and use only the features included in the CLS are said to be CLS-compliant components.
Most of the members defined by types in the .NET Framework class library are CLS-compliant. However, some types in the class library have one or more members that are not CLS-compliant. These members enable support for language features that are not in the CLS. The types and members that are not CLS-compliant are identified as such in the reference documentation, and in all cases a CLS-compliant alternative is available. For more information about the types in the .NET Framework class library, see the .NET Framework Reference.
The CLS was designed to be large enough to include the language constructs that are commonly needed by developers, yet small enough that most languages are able to support it. In addition, any language construct that makes it impossible to rapidly verify the type safety of code was excluded from the CLS so that all CLS-compliant languages can produce verifiable code if they choose to do so. For more information about verification of type safety, see JIT Compilation.
The following table summarizes the features that are in the CLS and indicates whether the feature applies to both developers and compilers (All) or only compilers. It is intended to be informative, but not comprehensive. For details, see the specification for the Common Language Infrastructure, Partition I, which is located in the Tool Developers Guide directory installed with the Microsoft .NET Framework SDK.
If your component uses only CLS features in the API that it exposes to other code (including derived classes), the component is guaranteed to be accessible from any programming language that supports the CLS. Components that adhere to the CLS rules and use only the features included in the CLS are said to be CLS-compliant components.
Most of the members defined by types in the .NET Framework class library are CLS-compliant. However, some types in the class library have one or more members that are not CLS-compliant. These members enable support for language features that are not in the CLS. The types and members that are not CLS-compliant are identified as such in the reference documentation, and in all cases a CLS-compliant alternative is available. For more information about the types in the .NET Framework class library, see the .NET Framework Reference.
The CLS was designed to be large enough to include the language constructs that are commonly needed by developers, yet small enough that most languages are able to support it. In addition, any language construct that makes it impossible to rapidly verify the type safety of code was excluded from the CLS so that all CLS-compliant languages can produce verifiable code if they choose to do so. For more information about verification of type safety, see JIT Compilation.
The following table summarizes the features that are in the CLS and indicates whether the feature applies to both developers and compilers (All) or only compilers. It is intended to be informative, but not comprehensive. For details, see the specification for the Common Language Infrastructure, Partition I, which is located in the Tool Developers Guide directory installed with the Microsoft .NET Framework SDK.
CTS.....
The Common Type System
(CTS) is a standard that specifies how Type definitions and specific
values of Types are represented in computer memory. It is intended to
allow programs written in different programming languages to easily
share information. As used in programming languages, a Type can be
described as a definition of a set of values (for example, "all integers
between 0 and 10"), and the allowable operations on those values (for
example, addition and subtraction).
The specification for the CTS is contained in Ecma standard 335, "Common Language Infrastructure (CLI) Partitions I to VI." The CLI and the CTS were created by Microsoft, and the Microsoft .NET framework is an implementation of the standard.
The specification for the CTS is contained in Ecma standard 335, "Common Language Infrastructure (CLI) Partitions I to VI." The CLI and the CTS were created by Microsoft, and the Microsoft .NET framework is an implementation of the standard.