Implementing traits in C# using Roslyn Source Generators
Author
Pozur, М.
Voitko, V.
Bevz, S.
Burbelo, S.
Kosaruk, О.
Позур, М.
Войтко, В.
Бевз, С.
Бурбело, С.
Косарук, О.
Date
2025Metadata
Show full item recordCollections
- Наукові роботи каф. ММЕ [376]
Abstract
Artykuł przedstawia podejście do implementacji funkcjonalności cech w języku programowania C# poprzez wykorzystanie Roslyn Source
Generators, narzędzia do metaprogramowania w czasie kompilacji wprowadzonego w .NET5. Traity, które są komponowalnymi jednostkami
drobnoziarnistego ponownego użycia, mogą przynieść korzyści językowi C# poprzez wprowadzenie mechanizmu ponownego użycia zachowania
w kontekście pojedynczego dziedziczenia. W artykule opisano projekt i implementację generatora źródłowego, który umożliwia dodawanie adnotacji
do klas za pomocą atrybutów metadanych, automatycznie wstrzykując odpowiednie definicje elementów członkowskich w czasie kompilacji. Aby osiągnąć
lepszą wydajność generowania kodu w czasie projektowania, zastosowano przyrostowe generatory źródeł. Szczegółowo opisano skład członków cech,
koncentrując się na rozwiązywaniu konfliktów nazw i bezpieczeństwie typów poprzez wykorzystanie interfejsów i mechanizmu zastępowania. Omówiono
i zaimplementowano również definiowanie niepublicznych członków w kontekście cechy, co pozwala na lepsze ponowne wykorzystanie kodu. Artykuł
podsumowuje, że funkcje na poziomie języka, takie jak cechy, można zaimplementować w języku C# za pomocą Roslyn Source Generators, demonstrując
w ten sposób potencjał takiego narzędzia i ogólnie metaprogramowania. The paper presents an approach to implementing traits functionality in the C# programming language through the use of Roslyn Source
Generators, a compile-time metaprogramming tool introduced in .NET5. Traits, which are composable units of fine-grained reuse, can benefit the C#
language by bringing a mechanism for behavior reuse in the context of single inheritance. The article describes the design and implementation of a source
generator that allows to annotate classes with metadata attributes, automatically injecting the corresponding member definitions at compile time.
To achieve better code generation performance at design time, Incremental Source Generators were used. The composition of trait members is described
in detail, focusing on name conflict resolution and type safety by utilizing interfaces and the override mechanism. Defining non-public members
in a context of a trait is also discussed and implemented, thus allowing for better code reusability. The article concludes that language-level features such
as traits can be implemented in the C# language by using Roslyn Source Generators, thus demonstrating the potential of such an instrument
and metaprogramming in general.
URI:
https://ir.lib.vntu.edu.ua//handle/123456789/50337

