Skip to content

Commit 0013cf5

Browse files
svickmairaw
authored andcommitted
Mention that IL is also called CIL or MSIL (dotnet#1058)
1 parent dd32f1d commit 0013cf5

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

docs/standard/managed-code.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ Contrast this to the way you would run a C/C++ program, also called “unmanaged
2222

2323
Managed code is written in one of the high-level languages that can be run on top of the .NET platform, such as C#, Visual Basic, F# and others. When you compile code written in those languages with their respective compiler, you don’t get machine code. You get **Intermediate Language** code which the runtime then compiles and executes. C++ is the one exception to this rule, as it can also produce native, unmanaged binaries that run on Windows.
2424

25-
## Intermediate Language & Execution
25+
## Intermediate Language & execution
2626

2727
What is “Intermediate Language” (or IL for short)? It is a product of compilation of code written in high-level .NET languages. Once you compile your code written in one of these languages, you will get a binary that is made out of IL. It is important to note that the IL is independent from any specific language that runs on top of the runtime; there is even a separate specification for it that you can read if you’re so inclined.
2828

2929
Once you produce IL from your high-level code, you will most likely want to run it. This is where the CLR takes over and starts the process of **Just-In-Time** compiling, or **JIT-ing** your code from IL to machine code that can actually be run on a CPU. In this way, the CLR knows exactly what your code is doing and can effectivelly _manage_ it.
3030

31+
Intermediate Language is sometimes also called Common Intermediate Language (CIL) or Microsoft Intermediate Language (MSIL).
32+
3133
## Unmanaged code interoperability
3234

3335
Of course, the CLR allows passing the boundaries between managed and unmanaged world, and there is a lot of code that does that, even in the [Base Class Libraries](framework-libraries.md). This is called **interoperability** or just **interop** for short. These provisions would allow you to, for example, wrap up an unmanaged library and call into it. However, it is important to note that once you do this, when the code passes the boundaries of the runtime, the actual management of the execution is again in the hand of unmanged code, and thus falls under the same restrictions.

0 commit comments

Comments
 (0)