noviembre 18, 2020

En 2002 apareció la primera versión de .NET, han pasado casi 20 años y el escenario de desarrollo de aplicaciones monolíticas ha ido diversificándose: microservicios distribuidos, aplicaciones multiplataforma, dispositivos IoT, inteligencia artificial, virtualización, contenedores… El contexto y requerimientos ha cambiado, como todo en informática, ¿Quién se imaginaría a comienzos de siglo que Microsoft sería miembro de Linux Foundation y .NET pasaría a ser Open Source?

Desde hace unos años la tendencia a unificar plataformas y desarrollos es clara por parte de Microsoft. Con la aparición del nuevo .NET 5 no quedan dudas, se salta de la versión .NET Core 3.0 a .NET 5 unificando con .NET Framework, Xamarin y Mono.

Desde el comienzo de la plataforma se utiliza compilación en tiempo de ejecución (Just In Time, JIT) lo que ha permitido obtener un código de máquina optimizado a un lenguaje intermedio (ahora Common Intermediate Language, CIL; antes llamado Microsoft Intermediate Language, MSIL) , con dos salvedades para IoS y Blazor (cliente web) que seguirán siendo mediante compilación anticipada (ahead-of-time compilation, AOT)

Si bien para IoS y algunas consolas de juegos se requiere código precompilado (100% AOT), para Blazor / web se utiliza un entorno mixto, donde el código no compatible con AOT se utiliza JIT, esto permite unificar herramientas de diagnóstico, rendimiento, optimizaciones… a futuro todo se ejecutará sobre CoreFX

Por intentar aclarar de forma básica:

  • CoreCLR: motor de ejecución (Runtime) JIT para .NET 5, garbaje colector (GC) y clases de bajo nivel.
  • CoreFX: biblioteca de clases básica, BCL (Framework)

Cuando hablamos de CoreFX como Framework, englobamos las herramientas para facilitar el desarrollo de software: bibliotecas (el conjunto de funciones, clases, tipos, constantes…) y su API (Application Programming Interface) siendo esta desde donde accedemos de forma estandarizada, independientemente de cómo este implementada internamente.

Por ejemplo, para utilizar el Trazado de Rayos (Ray Tracing) en una secuencia de video, accedo al conjunto de APIs DirectX que a su vez incluye la API DXR lo que permite añadir esta función a juegos desarrollados para plataformas diferentes PC y Xbox, pero no en PS5 (por lo menos por ahora) aunque ambas consolas tengan procesadores y gráficas AMD. De este modo un juego se puede adaptar más fácilmente entre plataformas diferentes.

Los mismo sucede si necesito enviar un email, puedo utilizar una API existente como MailKit, en lugar de diseñar tu mismo la apertura de sockets, comunicación, mensajes de error…

El inicio de .NET Core 1.0 se centró la creación de microservicios, en la siguiente versión .NET Core 2.0 se agregó soporte para Razor pages y SignalR facilitando portar aplicaciones web, .NET Core 3.0 añadió WinForms, WPF y Entity Framework 6 permitiendo hacer lo mismo con las aplicaciones de escritorio y ahora .NET 5 inicia la unificación. Las aplicaciones ya existentes en .NET Framework podrán mantenerse en la última versión 4.8 y seguirá habiendo soporte por parte de Microsoft pero los nuevos desarrollos deben iniciarse en .NET 5 (core)

Enlaces de interés: