How does C# code get compiled and executed?
When you write C# code and execute the program within the .NET framework, how does the computer interpret the plain text code and produce the desired output?? In this article, we are going to learn about this whole process.
Compiler vs Interpreter
First, I have a question for you. Can computers know our language? We all write code with characters, numbers, etc. that we understand. But do computers know it like us? The answer is … NO! Computers can only understand the 0 and 1 language and return results based on them. So if we want to tell computers to do something, we have to use 0 and 1 to order them. However, it is too difficult for us to write some “meaningless” numbers, our languages are based on characters, not numbers. So how can we deal with the problems?
The answer is that we have to translate our known languages into machine code, so computers can fully understand what they are told to do. Now in the computer science world, there are commonly 2 ways to do this:
What is a Compiler?
The Compiler is a translator that takes input i.e., High-Level Language, and produces an output of low-level language i.e. machine or assembly language. The work of a Compiler is to transform the codes written in the programming language into machine code (format of 0s and 1s) so that computers can understand.
Role of a Compiler
For Converting the code written in a high-level language into machine-level language so that computers can easily understand, we use a compiler. Converts basically convert high-level language to intermediate assembly language by a compiler and then assembled into machine code by an assembler.
Advantages of Compiler
Disadvantages of Compiler
What is an Interpreter?
An Interpreter is a program that translates a programming language into a comprehensible language. The interpreter converts high-level language to an intermediate language. It contains pre-compiled code, source code, etc.
Role of an Interpreter
The simple role of an interpreter is to translate the material into a target language. An Interpreter works line by line on a code. It also converts high-level language to machine language.
Advantages of Interpreter
领英推荐
Disadvantages of Interpreter
However, There is another way to execute code, but we’ll learn about this in the next section.
C# and How does it work?
So what is C#? For those who do not know yet, C# is a modern, object-oriented programming language created by Microsoft as a component of the .NET framework. And .NET is a development platform that offers various tools and libraries for creating applications compatible with Windows, macOS, and Linux. Known for its simplicity, robustness, and type safety, C# is commonly used to develop desktop applications, web applications, and games.
When we think about C#, people just think that is the next-gen of C++ (like C++ is the next-gen of C ). However, Unlike C++, C# does not compile code directly into Machine Language using a compiler. Instead, it uses Just-In-Time Compiler a.k.a JIT.
What is JIT?
JIT is a hybrid approach that combines aspects of both compilers and interpreters. It translates code into machine code at runtime, rather than before execution (like a traditional compiler) or interpreting line-by-line (like an interpreter).
Step-by-step process of C# code compilation
Step 1: Write a C# code.
Step 2: Compile the code using a C# compiler.
Step 3: Now compiler checks if the code contains an error or not. If no error is found then the compiler moves to the next step. Or if the compiler finds errors, then it will immediately tell the developer that an error is found in the given line, so that the developer can correct them. After correcting the error when you again run the code the compiler again checks for the errors, if no error is found then it will move to the next step or if an error is found then the compiler gives a message to the developer. In C# there are two types of errors:
Compiler error: Errors that occur when the developer violates the rules of writing syntax are known as Compile-Time errors. This compiler error indicates something that must be fixed before the code can be compiled. All these errors are generally detected by the compiler and thus are known as compile-time errors. For example, missing semicolon, missing parenthesis, etc.
Runtime error: Errors that occur during program execution(run-time) after successful compilation are called run-time errors. One of the most common run-time errors is division by zero also known as Division error. These types of errors are hard to find as the compiler doesn’t point to the line at which the error occurs.
Step 4: Languages such as Java or C# are not directly converted or compiled into machine-level language or machine instructions. These languages need to be converted to an intermediate code first, which is a partially half-compiled code. For C#, the source code is converted to an intermediate code which is known as Common Intermediate Language (CIL) or Intermediate Language Code (ILC or IL code). This CIL or IL Code can run on any operating system because C# is a Platform Independent Language.
Step 5: After converting the C# source code to Common Intermediate Language (CIL) or Intermediate Language Code (ILC or IL code, the intermediate code needs to be converted to machine understandable code. C# uses the .NET Framework and as part of this .NET Framework, the Virtual Machine component manages the execution of programs written in any language that uses the . NET Framework. This virtual machine component is known as Common Language Runtime (CLR) which translates the CIL or IL code to native code or machine understandable code or machine instructions. This process is called the Just-In-Time (JIT) Compilation or Dynamic Compilation which is the way of compiling code during the execution of a program at run time only.
Step 6: Once the C# programs are compiled, they’re physically packaged into Assemblies. An assembly is a file that contains one or more namespaces and classes. As the number of classes and namespaces in the program grows, it is physically separated by related namespaces into separate assemblies. Assemblies typically have the file extension .exe or .dll, depending on whether they implement applications or libraries respectively, where EXE stands for Executable and DLL stands for Dynamic Link Library. An EXE (Executable) file represents a program that can be executed and a DLL (Dynamic Link Library) file includes code (Eg: Library) that can be reused across different programs.
Step 7: Now, the C# compiler returns the output of the given c# code.
So, this is how the whole process of compilation and execution of a C# code takes place.
References:
That is all for today, thanks for reading!