Artículos y noticias del Framework multiplataforma NET
Artículos y noticias del Framework multiplataforma NET

El ecosistema .NET está evolucionando dinámicamente de varias maneras beneficiosas y desde Unity quieren brindarle mejoras tan pronto como pueden.

El grupo técnico interno de .NET trabaja en la mejora continua de la integración de .NET, incluidas las características más nuevas de C# y .NET Standard 2.1.

Pero recientemente se han acelerado las cosas para mejorar la experiencia de los desarrolladores en todos los ámbitos.

Esta publicación de blog presenta los problemas en los que se trabajan y también se discute este tema en la Unity Dev Summit en GDC 2022.

La evolución de .NET y Unity

La historia comienza hace 17 años, cuando nuestro CTO comenzó a aprovechar el tiempo de ejecución de Mono .NET con C#. Unity prefirió C# debido a su simplicidad, combinado con un compilador JIT (justo a tiempo) que traduce su C# en código nativo relativamente eficiente.

Las partes restantes y mucho más grandes del motor de Unity se han desarrollado utilizando C++ para proporcionar un rendimiento equilibrado y controlado.

Durante muchos años, Unity se había estado ejecutando con una bifurcación específica del tiempo de ejecución Mono .NET y el lenguaje C# (2.0).

Durante ese tiempo, se agrego soporte para plataformas adicionales.

También se ha desarrollado un compilador propio de tiempo de ejecución, IL2CPP, para permitir apuntar a iOS y algunas plataformas de consola.

Mientras tanto, el ecosistema general de Microsoft .NET ha evolucionado, con nuevas licencias y soporte para plataformas que no son de Windows. Esta evolución nos ha permitido actualizar Unity .NET Mono Runtime en 2018 y adoptar versiones más modernas del lenguaje C# (7.0+).

El mismo año, también lanzamos la primera versión del compilador Burst, pionero en el código nativo rápido generado para un subconjunto del lenguaje C#.

Este avance permitió a Unity imaginar un mundo en el que podíamos extender el uso de C# en los otros segmentos críticos del motor sin tener que desarrollar estas partes en C++, lo que condujo al desarrollo del tiempo de ejecución DOTS.

Unity 2020 LTS y Unity 2021 LTS trajeron nuevas versiones del lenguaje C# y API de .NET como Span. Paralelamente, hemos visto enormes mejoras de rendimiento en el ecosistema .NET, así como un entorno de desarrollo más amigable con la introducción del estilo SDK csproj y el floreciente ecosistema NuGet.

Qué necesitas hacer

Como resultado de esta larga evolución, la plataforma Unity incluye una base de código C++ muy grande que interactúa directamente con objetos .NET utilizando suposiciones específicas heredadas de Mono .NET Runtime. Estos ya no son válidos ni eficientes para .NET (Core) Runtime.

Además, hay una canalización de compilación personalizada complicada vinculada al Editor de Unity que no depende de MSBuild y, por lo tanto, no puede beneficiarse fácilmente de todas las características estándar.

Cuando se trata de usar la plataforma Unity, nos dijo que quería sacar el máximo partido del hardware de destino con herramientas de prueba, depuración y creación de perfiles de C# de alta calidad y una buena integración entre la API estándar de .NET y la API de Unity.

Como programador de C# Unity, desea herramientas de Unity que funcionen a la perfección con el resto de su caja de herramientas y permitan una iteración rápida para que pueda lograr el mejor rendimiento de tiempo de ejecución de su clase.

Llegar allí nos llevará varios años. Lo mantendremos informado con actualizaciones frecuentes en blogs y foros sobre los desafíos técnicos que encontremos en el camino.

Cómo se va hacer

El primer paso en esta iniciativa fue reunirnos con todas las personas internas apasionadas por C# y .NET en Unity para formar un grupo tecnológico de C#/.NET para impulsar este esfuerzo.

Se quiere construir sobre el ecosistema .NET en lugar de desarrollar soluciones personalizadas. Para permitirle aprovechar las mejoras de rendimiento y productividad que vienen con el último .NET SDK/Runtime y MSBuild, queremos migrar de Mono .NET Runtime a CoreCLR, el moderno .NET (Core) Runtime.

Esta iniciativa también le brinda innovación más allá del universo .NET existente, con el objetivo de brindar ciclos de iteración .NET más rápidos en sus scripts C#.

Se trabaja en la convergencia de las soluciones JIT y AOT (antes de tiempo), IL2CPP y Burst, para ofrecer el mejor equilibrio entre la eficiencia del tiempo de compilación y la calidad de CodeGen.

Externamente, estamos trabajando con socios de la industria como Microsoft y JetBrains para garantizar que los creadores de Unity utilicen la tecnología .NET más reciente.