Novedades de Microsoft .NET 5

La segunda versión candidata de Microsoft de .NET 5 llegó el 13 de octubre, lo que acercó un paso más a la fusión de .NET Framework y .NET Core. La nueva plataforma .NET unificada está prevista para su disponibilidad general el 10 de noviembre de 2020. 

Microsoft describe Release Candidate 2 como una versión casi final y la última de dos RC. Se publicó un RC inicial el 13 de septiembre. La versión candidata de .NET 5.0 se puede descargar de dotnet.microsoft.com.

Los objetivos de alto nivel para .NET 5 incluyen proporcionar una experiencia de .NET SDK unificada, con un solo BCL (biblioteca de clase base) en todas las aplicaciones .NET 5 y con soporte para aplicaciones nativas y web en múltiples sistemas operativos. Un solo proyecto de aplicación nativa .NET 5 admitiría objetivos como Windows, Microsoft Duo (Android) y Apple iOS utilizando controles nativos en esas plataformas.

Los objetivos adicionales de .NET 5 incluyen soporte para construir aplicaciones en la nube de alto rendimiento, algoritmos más rápidos en BCL, mejor soporte para contenedores en tiempo de ejecución y soporte para HTTP3. .NET 5.0 incluye soporte para el formato binario WebAssembly, a través del tiempo de ejecución Mono y las bibliotecas .NET. También se incluye un conjunto de anotaciones de tipo de referencia que aceptan valores NULL.

.NET 5 también promete permitir a los desarrolladores encontrar automáticamente errores latentes en el código. Otras características nuevas incluyen el Halftipo, un punto flotante binario que ocupa 16 bits y el recorte de ensamblajes, que recorta los ensamblajes no utilizados para reducir el tamaño de las aplicaciones. También se resalta el recorte personalizado. La nueva coincidencia de patrones en C # 9 cubre patrones de tipo relacionales, lógicos y simples. La opción de implementación ClickOnce ahora es compatible con las aplicaciones .NET 5.0 de Windows y las aplicaciones .NET Core 3.1.

La nueva plataforma .NET también promete mejoras de rendimiento. Un boletín perteneciente a Preview 7, que llegó el 21 de julio, reconoce alrededor de 250 solicitudes de extracción orientadas al rendimiento en .NET 5 y señala que les espera una agradable sorpresa a quienes han seguido el rendimiento de .NET Core. 

Otras adiciones y mejoras señaladas en el boletín .NET 5 Preview 7:

  • La nueva API JSON System.text.json proporciona la capacidad de ignorar los valores predeterminados para las propiedades de tipo de valor al serializar, lo que resulta útil para reducir la serialización y los costos de cableado. Este es un cambio radical. También se agregó para System.text.json la capacidad de lidiar con referencias circulares al serializar, y ahora se espera que la forma API sea definitiva.
  • La recolección de basura ahora expone datos detallados sobre la recolección más reciente, usando el GetGCMemoryInfométodo, que devuelve una GCMemoryInfoestructura. GCMemoryInfoproporciona información sobre la máquina y la memoria del montón y la colección más reciente, o la colección más reciente del tipo de GC especificado: efímero, bloqueo completo o en segundo plano. Los casos de uso más probables para esta API son el registro / monitoreo o para indicarle a un balanceador de carga que una máquina debe estar fuera de rotación para solicitar un GC completo. Mientras tanto, se realizó otro cambio de GC para aplazar la costosa operación de restablecimiento de la memoria a situaciones de poca memoria.
  • Ryujit, el generador de código ensamblador para .NET, obtiene mejoras que van desde permitir la eliminación de algunas comprobaciones de límites hasta la mejora de la duplicación de cola y mejoras para eliminar los cero inits redundantes. También se incluyen en Ryujit los elementos intrínsecos del hardware ARM64 y la optimización de API.

.NET 5 Preview 6, lanzado el 25 de junio, eliminó el soporte integrado para WinRT (Windows Runtime), una colección de API para crear aplicaciones de la Plataforma universal de Windows. Este es un cambio rotundo; Las aplicaciones .NET Core 3.x que usan WinRT deben volver a compilarse. Los equipos de .NET y Windows han estado trabajando para cambiar la forma en que WinRT funciona con Windows, reemplazando el soporte de WinRT con la cadena de herramientas de C # / WinRT en .NET 5. C # / WinRT es un kit de herramientas empaquetado con NuGet que ofrece soporte de proyección de WinRT para C #.

Otros cambios en .NET 5 Preview 6: 

  • El SDK de .NET 5 Preview 6 incluye soporte para Windows Forms en dispositivos Windows ARM64. El trabajo continúa para agregar soporte para Windows Presentation Foundation en Windows ARM64.
  • Las mejoras en la calidad del código RyuJIT cubren el manejo y la optimización de estructuras para eliminar las inicializaciones cero redundantes. Además, se ha avanzado en la optimización intrínseca del hardware ARM64, así como en la mejora del código generado para ARM64, con un tamaño de código reducido.
  • Se actualizaron los planes de soporte de la plataforma.

.NET 5 Preview 5, lanzado el 10 de junio, contiene las siguientes características nuevas:

  • El compilador RyuJIT JIT tiene una implementación portátil más rápida de ayudantes de llamada final. El JIT solicita ayuda al motor de ejecución cada vez que se da cuenta de que necesitará un ayudante para realizar un tailcall. También para RyuJIT, ha habido un progreso continuo en la implementación de intrínsecos de hardware ARM64. Otras mejoras en RyuJIT implican una mayor velocidad en un caso que estaba afectando la compilación de expresiones regulares y un mejor rendimiento de la arquitectura Intel.
  • Se han habilitado las exportaciones de binarios nativos con llamadas a código .NET. El componente básico de esta capacidad es el soporte de API de alojamiento para UnManagedCallersOnlyAttribute. El proyecto de exportaciones nativas permite exponer exportaciones nativas personalizadas. No requiere una tecnología de interoperabilidad de nivel superior como COM y es multiplataforma.
  • DirectoryServices.Protocols el soporte se está ampliando a Linux y MacOS.
  • La distribución de Linux Alpine 3.12 ahora es compatible.

La versión candidata de .NET 5.0 se puede descargar de dot.net.microsoft.com.

.NET 5 Preview 4, lanzado el 19 de mayo, introdujo las siguientes capacidades nuevas:

  • Compatibilidad con los idiomas C # 9 y F # 5.
  • Rendimiento mejorado de las llamadas finales utilizadas por F #.
  • Mejora del rendimiento de ToUpperInvariant, string.ToLowerInvarianty patrones relacionados.
  • Rendimiento mejorado de HTTP 1.1 y HTTP 2.
  • Un mecanismo de recuento de llamadas mejorado.
  • Expansión dinámica del diccionario genérico interno para eliminar los obstáculos de rendimiento a los que afecta el código genérico.
  • Un montón de objetos fijados para reducir la fragmentación del montón.
  • Aplicaciones de un solo archivo basadas en un nuevo tipo de publicación de un solo archivo que ejecuta una aplicación desde un solo binario.

Las mejoras en la versión preliminar 3 de .NET 5, presentada el 23 de abril, incluyen lo siguiente: 

  • La clase BitArray para administrar una matriz de valores de bits se actualizó para incluir una implementación acelerada por hardware para ARM64 usando intrínsecos ARM64. Las mejoras de rendimiento de BitArray son significativas, dijo Microsoft. Además, el reemplazo On Stack (OSR) en CLR se implementó para permitir que el código ejecutado por los métodos que se estén ejecutando actualmente se cambie en medio de la ejecución del método, mientras que esos métodos están activos "en la pila". Esta capacidad, para mejorar las características de rendimiento de la compilación por niveles, es ahora una función experimental y opcional en x64. Otra mejora para RyuJIT mejora la calidad del código para estructuras como argumentos en llamadas de posición de "cola de llamada". También se espera que RyuJIT ofrezca un mejor rendimiento de los genéricos. 
  • La adición de soporte para preservar referencias se agregó a System.Txt.Json, lo que permite el manejo de bucle de referencia para la serialización JSON. Además, las clases y estructuras inmutables ahora son compatibles con JsonSerializer. También se admite ahora el manejo de valores nulos.
  • El SDK de .NET ahora hará referencia automática al paquete NETFramework.ReferenceAssemblies NuGet dado un marco de destino de .NET Framework en un archivo de proyecto. Este cambio permite la creación de proyectos de .NET Framework en una máquina sin un paquete de destino de .NET Framework instalado. Esta mejora es específica de los paquetes de orientación y no tiene en cuenta otras posibles dependencias del proyecto.

Las mejoras específicas en .NET 5 Preview 2, lanzadas el 2 de abril, incluyeron: 

  • Se han realizado varios cambios en RyuJIT para mejorar la calidad del código de máquina generado, incluidas las inicializaciones cero duplicadas que se eliminan de manera más agresiva y las optimizaciones de caja que aceptan valores NULL se invocan antes.
  • La recolección de basura del servidor en diferentes subprocesos ahora puede robar el trabajo mientras marca los objetos gen0 / 1 mantenidos en vivo por objetos de generaciones anteriores. El robo de trabajo a través de subprocesos acorta las pausas de GC efímeras para escenarios en los que algunos subprocesos de GC tardaron mucho más en marcar que otros. Además, se ha implementado parte de la función Montón de objetos anclados (POH), la parte interna a la recolección de basura, para permitir que el recolector administre los objetos anclados por separado. Esto evita los efectos negativos de los objetos anclados en los montones generacionales.

La versión preliminar 1, publicada el 16 de marzo, incluyó mejoras en el rendimiento de las expresiones regulares, así como mejoras en la calidad del código en RyuJIT.

Como lanzamiento de producción en noviembre de 2020, .NET 5 incluirá:

  • ASP.NET Core, un marco de código abierto para aplicaciones web.
  • Tecnología de acceso a datos Entity Framework Core.
  • WinForms.
  • WPF (Windows Presentation Foundation).
  • Modelo de dispositivo de aplicación móvil de Xamarin.
  • ML.NET.

Microsoft dijo que .NET 5 proporcionará una plataforma única y unificada para crear cualquier tipo de aplicación. La empresa dirige la mitad del tráfico a su sitio web .NET a una versión .NET 5 como caso de prueba, utilizando el equilibrio de carga de Azure. 

Microsoft recomienda que los desarrolladores creen nuevas aplicaciones con .NET Core 3.1 y luego las migren a .NET 5. La compañía señaló que las aplicaciones de .NET Framework se pueden dejar en .NET Framework, que seguirá siendo compatible mientras Windows sea compatible.