ANALYSIS OF METAPROGRAMMING APPROACHES IN .NET - POZUR, MYKHAYLO; VOITKO, VIKTORIIA (Herald of Khmelnytskyi National University. Technical sciences, 2023)
Modern approaches to metaprogramming used in .NET are reviewed and analyzed. One approach is to use the reflection mechanism of the .NET platform, which allows to work with application metadata at runtime and plug in new modules. This approach allows to generalize certain functionality, which simplifies the development process, but the use of reflection has a negative effect on the application performance. Another approach is to use the functionality of the .NET framework, which allows code generation in runtime. For this, the System.Reflection.Emit namespace classes are used, which allow generating CIL code. However, this approach requires knowledge of CIL and internals of CLR, which complicates the process of software development and maintenance. In .NET, it is also possible to generate code during the execution of the application using a declarative approach by utilizing the expression mechanism. Expressions in .NET are separate blocks, each of which describes an operation on data. Such blocks are combined into expression trees, which allows describing complex operation. Expression tree can be formed during the execution of the application and compiled, resulting in a lambda function that performs the operations described by the expressions. However, this approach does not provide an opportunity to control the code generation process. In addition to CIL generation, .NET has mechanisms for generating source code in various languages. The article deals with the generation of C# programming language code. One approach is to use classes in the System.CodeDom namespace, which allows source code to be generated and compiled at runtime. However, the compilation relies on the use of the .NET Framework compiler, which makes it impossible to fully use this approach in new versions of .NET. The approach using T4 allows the generation of code based on templates before compiling the application, which provides an opportunity to detect syntax errors in the generated code at the compilation stage. However, T4 technology is part of the Visual Studio IDE, which makes it impossible to use it outside of that IDE. An alternative to T4 is the Source Generators, which is part of the .NET Compiler Platform SDK. Since Source Generators are part of the .NET compiler, the code generation process is a component of the application compilation process that provides access to a large amount of metadata. However, using Source Generators is only possible in newer versions of .NET. The correct combination of approaches to metaprogramming will allow creating effective tools for optimizing the development process of .NET applications.