Novedades de .NET

Durante la Build 2014 se anunció la nueva generación de .NET. Nos encontramos novedades que van desde mejoras en tiempo de ejecución hasta nuevas funcionalidades para crear nuevas herramientas para desarrolladores.

netinnovation

Durante la Build, se anunciaron:

.NET Fundation

Se ha creado la fundación .NET, una organización independiente creada para fomentar el desarrollo abierto y la colaboración. Recientemente ha habido un incremento de proyectos Open Source en el desarrollo .NET que han despertado la iniciativa .NET Foundation, tanto proyectos de Microsoft como de otros desarrolladores .NET.

Los objetivos de .NET Foundation son:

  • Abrir el proceso de desarrollo de .NET

La fundación trae bajo el mismo paraguas proyectos Open Source, tanto nuevos proyectos como existentes tales como ASP.NET, Entity Framework o Roslyn. La fundación ayudará a establecer esto como una norma y cada vez más y más componentes de .NET se irán uniendo.

  • Animar a clientes, partners y a la comunidad a participar

La fundación fomentará la participación y las contribuciones de código de la comunidad, haciendo un modelo abierto y transparente que fortalezca el futuro de .NET.

  • Promover la innovación con un ecosistema de partners activos y comunidad Open Source

La fundación animará a partners y al resto de la comunidad a desarrollar proyectos que mantengan la plataforma abierta, añadiendo más innovación para los desarrolladores .NET. Incluyendo extender .NET al resto de plataformas, añadir nuevas funcionalidades a Visual Studio, nuevas librerías…

Mejoras de rendimiento

Tanto .NET Native como RyuJIT tienen como objetivo mejorar el rendimiento de nuestras aplicaciones, con lo cual conseguiremos una mejor experiencia de usuario en nuestras aplicaciones. Esto se consigue centrándose en obtener el máximo rendimiento del hardware y de las características específicas de cada CPU.

.NET Native

.NET Native, también conocido como Project N se trata de un nuevo compilador que nos genera binarios específicos para la plataforma. Con .NET Native podremos desarrollar nuestras aplicaciones con la productividad de C# y .NET pero con el rendimiento que nos ofrece C++, ya que tendremos disponible lo mejor de ambos mundos.

Este nuevo compilador nos proporciona un incremento de velocidad de arranque en nuestras aplicaciones de un 60% y se consigue una reducción del 15-20% en el consumo de memoria. Esto es posible porque por dentro .NET Native utiliza las mismas herramientas o similares a C++.

Actualmente .NET Native Preview lo podemos utilizar para compilar nuestras aplicaciones de la Windows Store, para las arquitecturas x64 y ARM. En cuanto a la arquitectura x86 todavía tendremos que esperar un poco. Pero .NET Native no solo se quedará en las aplicaciones de Windows Store sino que poco a poco irá creciendo y soportando las diferentes ramas de aplicaciones .NET.

RyuJIT CPT3

Para los que no conozcáis RyuJIT se trata de un nuevo compilador just-in-time para x64. Este nuevo JIT es doble de rápido, consiguiendo que las aplicaciones que se compilan mediante RyuJIT arranquen hasta un 30% más rápido (hay que recordar que el arranque de la aplicación no solamente es la compilación JIT, sino que hay más componentes).

Aunque solamente está disponible para x64 actualmente, este nuevo compilador de JIT establecerá las bases para el resto de compiladores JIT de las demás plataformas: ARM, x86, MDIL o nuevas que aparezcan. Además teniendo la misma base todos los compiladores obtenemos algunas ventajas como una mayor consistencia de las aplicaciones .NET entre plataformas y una mayor rapidez a la hora de incluir nuevas funcionalidades en la plataforma .NET.

Con esta nueva versión de RyuJIT se ha incluido soporte para producir instrucciones SIMD a nivel de CPU, las más conocidas son las SSE2. Las instrucciones SIMD, que ya encontramos en la mayoría de procesadores modernos, consiguen un incremento de rendimiento sobretodo en aplicaciones de cálculo numérico, juegos y procesado de imágenes. Las librerías para poder utilizar SIMD en nuestras aplicaciones .NET las podemos instalar a través de Nuget.

Un ejemplo muy popular para ver la ganancia que nos ofrecen las instrucciones SIMD es dibujar el fractal Maldelbrot ya que hay que realizar muchos cálculos matemáticos. Se puede ver como mejora en un factor de 2-3 para instrucciones SSE2 y hasta 4-5 usando AVX.

clip_image003

clip_image004

Roslyn

Tradicionalmente los compiladores han sido cajas negras donde enviamos nuestro código fuente y él nos genera los ensamblados y los ejecutables. En cambio Roslyn es un nuevo compilador de C# y Visual Basic .NET que permite personalizar todo el pipeline de compilación.

A continuación podemos ver el pipeline tradicional de un compilador:

clip_image006

Con Roslyn, ahora cada fase del pipeline es un componente totalmente separado, lo cual nos permite proporcionar una API de cada una de las fases, lo que es conocido como compiler as a service. De esta manera podemos conseguir mejores herramientas que nos ayuden durante el desarrollo. Para asegurar que estas APIs del compilador son suficientes para construir las funcionalidades necesarias de un IDE, en la siguiente versión de Visual Studio todos los servicios del lenguaje que se utilizan para C# y VB se están reconstruyendo usando estas APIs.

En la siguiente imagen, podemos ver qué servicios de lenguaje corresponden a que APIs junto con qué componente del pipeline del compilador corresponde.

clip_image008

Además de haber publicado el SDK para Visual Studio, el código fuente de Roslyn está disponible en codeplex.

Resumen

Como vemos el Framework de .NET nos trae novedades a todos los niveles, y ya tenemos disponible muchas previews para poder ir testeando y aprovechando todas estas nuevas funcionalidades.

Un Saludo

Carlos Carrillo Boj (3lcarry)