Treffer: Python-like function Decorators in C Sharp using Attributes and Roslyn API ; Decoradores tipo Python para funciones en C Sharp utilizando atributos y la API de Roslyn
Weitere Informationen
Python has become in the past years one of the most popular programming languages. When Python capability to intercept function calls is combined with the functional features then through decorators we can have a seamless way to inject additional functionality to existing code. Implementing decorators in dynamic typed languages like Python is pretty straightforward, but under the compiled model of static typed language like C Sharp or Java, this kind of substitution would be impossible at runtime. Previous works on providing these languages of a decorator feature were based on using a bytecode weaving approach. This paper proposes instead to use a source-code weaving approach in C Sharp by using its current compiler (Roslyn) API. Following this approach, an algorithm is presented to bring Python-like function decoration effect to C Sharp. Experiments were conducted to compare the proposal efficiency with an state art library achieving good results. ; Python se ha convertido en los últimos años en uno de los lenguajes de programación más populares. Cuando la capacidad de Python para interceptar llamadas a función se combina con su declaratividad, a través de los decoradores podemos tener una manera perfecta de inyectar funcionalidad adicional a código existente. Implementar decoradores en lenguajes de tipado dinámico como Python es sencillo, pero para los lenguajes con tipado estático como C Sharp o Java, este tipo de sustitución sería imposible en tiempo de ejecución. Los trabajos anteriores para proporcionar a estos lenguajes de esta funcionalidad se basaron en el uso de un enfoque de byte-code weaving. Este trabajo propone en su lugar utilizar un enfoque de source-code weaving en C Sharp utilizando la API de su compilador actual (Roslyn). Siguiendo este enfoque, se presenta un algoritmo para tener el efecto de decoración tipo Python para funciones en C Sharp. Se realizaron experimentos para comparar la eficiencia de la propuesta con respecto a una herramienta comercial obteniéndose buenos resultados.