¿Cuál es la diferencia entre.NET CoreCLR, CoreRT, Roslyn y LLILC?
(1)
Recientemente comencé a leer sobre los detalles de reorganización de .NET (principalmente a través de las páginas de github de .NET Core ). Parece que crearon proyectos de hermanos para soportar más plataformas. Mientras leo, tengo la impresión de que CoreCLR y CoreRT es una nueva versión OpenSource del compilador Roslyn de propiedad. CoreRT proporciona compilación nativa (AOT). Y LLILC es una implementación alternativa que dirige el marco de trabajo de LLVM.
¿Puede alguien confirmar y describir las diferencias y los objetivos de estos proyectos desde la perspectiva del usuario? ¿Por qué alguien usaría a Roslyn en el futuro en lugar de CoreCLR?
Roslyn es una plataforma de compilación que le permite crear herramientas de análisis estático y dinámico y extensiones y transformaciones de lenguaje personalizadas para los lenguajes de programación C # y VB. También le permite incrustar estos lenguajes en otros idiomas o aplicaciones. Roslyn incluye los compiladores de C # y VB y otras herramientas. Estos compiladores emiten código de lenguaje intermedio común (CIL).
Para ejecutar este código, CIL debe compilarse en un código binario que la arquitectura de la computadora de destino pueda ejecutar. .NET actualmente proporciona tres formas de hacer esto:
- Compile el código CIL en código binario utilizando un compilador JIT mientras la aplicación se está ejecutando. Este modelo es implementado por CoreCLR. CoreCLR comenzó como una copia de CLR. Se ha modificado para soportar diferentes sistemas operativos. Se mantienen separados y en paralelo.
- Compile el código CIL en código binario e integre cualquier componente de .NET framework requerido para producir un archivo ejecutable autónomo de un solo archivo cuyo rendimiento sea más parecido al de los lenguajes nativos escritos en código. Esta tecnología se llama .NET Native . CoreRT es una implementación de código abierto de esta tecnología. La principal diferencia entre .NET Native y CoreRT es que el compilador AOT que el primero usa es el compilador UTC (el backend del compilador MSVC), mientras que el más reciente actualmente usa RyuJIT. UTC es mucho más agresivo en la optimización del código que RyuJIT. También en CoreRT, algunos componentes del tiempo de ejecución se han reimplementado limpiamente en C #. CoreCLR todavía utiliza la implementación de C ++.
- NGEN que es similar a .NET Native, excepto que los ejecutables producidos no son independientes y requieren un tiempo de ejecución instalado externamente.
LLILC es un compilador CIL basado en el marco del compilador portátil LLVM. Se puede utilizar para compilar compiladores JIT (actual) y AOT (futuro). La ventaja de este compilador es que aprovecha las optimizaciones del compilador Clang C ++ y trae el modelo de extensibilidad LLVM (análisis y pases de optimización) a .NET.
CoreRT y LLILC son proyectos nuevos y aún se encuentran en una etapa temprana de desarrollo y requieren mucho más trabajo para respaldar las aplicaciones de producción. Entonces, si usted es un usuario y no un colaborador, CoreCLR y Roslyn son para usted. Nuevamente, CoreCLR es el tiempo de ejecución, mientras que Roslyn es el compilador de C # y VB.