2009-12-18 21 views
7

El primer código .NET se compila en MSIL y luego JIT lo convierte en código dependiente de la máquina. ¿Alguien me puede decir lo que todos los beneficios obtienen debido a la compilación de 2 pasos. Gracias¿Por qué el código .NET se compila en MSIL?

+2

Bueno, Java lo hizo hace años antes de que naciera .NET. Así que simplemente creo que .NET copió esa idea. :) –

+1

Bueno, UCSD Pascal hizo eso en la década de 1970 y Java (y muchos otros) "lo copió". ¡Venga! :-) – CesarGon

Respuesta

20

Hay algunas razones. Lo primero y más probable es que sea multiplataforma. Si C# u otros lenguajes .NET se compilaran directamente en el código nativo, tendrían que recompilarse para cada plataforma en la que se ejecutan. Con una VM, todo el código puede mantenerse en un formato intermedio, y solo necesita escribir una implementación de VM para cada plataforma.

Además, al tener un lenguaje intermediario independiente del idioma, puede tener muchos idiomas de alto nivel (C#, VB.NET, Python, etc.) haciendo referencia a ensamblajes escritos en otros idiomas. Como todos compilan en la misma cosa, pueden trabajar sin problemas entre ellos.

También hay beneficios de rendimiento. El compilador JIT puede realizar optimizaciones agresivas específicamente para la máquina en la que se está ejecutando el código en ese momento. No sé cuánta optimización hace el compilador .NET JIT en este sentido, pero hay beneficios teóricos muy grandes que se podrían tener.

+2

La plataforma cruzada realmente no se aplica mucho al framework .NET ya que solo se ejecutó en Windows, pero sigue siendo un punto válido. +1 –

+8

¿De verdad? Entonces explica Mono. :) –

+0

@Matt ¿me puede explicar amablemente cómo puedo hacer que mi código .net se ejecute en otra plataforma? Significa si quiero ejecutar mi aplicación .net en Linux? ¿Es posible? – Siddiqui

1
  • un ejecutable no está vinculado a la plataforma. Por ejemplo, XNA se dirige a procesadores PPC (Xbox360) y x86. Algunos programas se ejecutarán en Mono on Linux o OSX.

  • Se le permite optimizar mejor para el equipo de destino o reemplazar las funciones que faltan:

    • Por ejemplo OSX> = 10,5 compila en falta las instrucciones de la GPU en tiempo de ejecución con OpenCL.
    • Digamos que está trabajando en una CPU sin soporte de punto flotante, entonces puede emularla con el JIT sin necesidad de una reescritura de código completa.
    • En algún punto en el futuro podría ser posible descargar el procesamiento en la GPU u otros objetivos de forma dinámica (sospecho que los lenguajes funcionales son algo más adecuados para esto).
+0

Tiene razón sobre la afirmación de idiomas funcionales. Las GPU son realmente potentes para * ciertas * situaciones. Los lenguajes funcionales hacen que sea mucho más fácil para la infraestructura decidir cuándo llegan esas situaciones. –

+0

Creo que el futuro será más una mezcla de ambos, FP + código paralelo de hilos masivos (GPGPU). – Stringer

1

primera conversión del lenguaje de alto nivel y luego a nivel de máquina, esta es la forma en la plataforma .NET está diseñado. La primera capa se ocupa del lenguaje de alto nivel para MSIL y el segundo nivel puede concentrarse en el enganche & falla de la plataforma para convertir de MSIL a código de nivel de máquina. Principalmente es compatible con la interoperabilidad de idiomas y es posible que en un futuro cercano también brinde soporte de Cross Platform cuando Project como Mono gane más terreno.

Cuestiones relacionadas