2010-10-07 8 views
17

This page explica sobre los cuatro compiladores mono diferentes - mcs/gmcs/smcs/dmcs.¿Por qué hay cuatro compiladores mono C#?

Para mí, es un poco raro tener cuatro compiladores de C#. Como normalmente, la versión más nueva del compilador mantiene la compatibilidad con versiones anteriores.

Supongo que es debido a problemas de soporte de tiempo de ejecución, pero C# de Microsoft tiene un csc.exe que admite todas las versiones de tiempo de ejecución.

Respuesta

18

Es porque el compilador de Mono está escrito en C# y usa System.Reflection, lo que significa que solo puede acceder a mscorlib desde el tiempo de ejecución en el que se está ejecutando. Por lo tanto, por ejemplo, las SMC no solo se dirigen a 2.1, en realidad se utiliza 2.1 corlib, etc.

Ha habido plan para un tiempo para tener mcs * utilizar cualquiera Mono.Cecil o Ikvm.Reflection en lugar de Sistema .Reflexión, lo que significaría que podría haber un único compilador de mcs con argumentos para apuntar diferentes tiempos de ejecución.

El compilador de Microsoft no tiene esta limitación porque no usa .NET Reflection (está escrito en código nativo).

+8

Parece que la reescritura para usar IKVM.Reflection finalmente ha tenido lugar. Mono 2.10 ya no tiene este problema. – Justin

13

Por la misma razón, todavía puede hacer desarrollo en .NET 2.0 con Visual Studio 2005. Claro, podría usar VS2010 e iniciar un proyecto .NET 4.0 con solo el código .NET 2.0, pero algunas compañías temen actualizar los marcos/compilador si ya tienen algo funcionando correctamente.

El hecho de que la nueva versión del compilador sea retrocompatible no significa que los equipos deseen actualizar.

Tener las diferentes versiones del compilador asegura que todos los usuarios de Mono pueden seguir usando la versión del compilador que elijan y con la que se sientan cómodos.

  • mcs: compilador para orientar 1.1 tiempo de ejecución (a ser obsoleta con Mono 2.8).
  • gmcs: compilador para apuntar al tiempo de ejecución 2.0.
  • smcs: compilador para apuntar al tiempo de ejecución 2.1, para construir aplicaciones Moonlight.
  • dmcs: Comenzando con Mono 2.6 este comando es el compilador C# 4.0 y hace referencia al tiempo de ejecución 4.0.

Personalmente, me gusta la actualización cada vez que puedo, pero algunas empresas y equipos no son capaces de hacerlo por alguna razón u otra.

+6

La versión más reciente se llama mcs. Es universal y puede compilarse para cualquier marco objetivo. –

Cuestiones relacionadas