2009-02-11 25 views
7

¿Cuáles son las ventajas de entender CIL?Ventajas del conocimiento de CIL en .NET

¿Tienes que saber ensamblar para entenderlo? El código en estos archivos se ve similar.

¿Cómo puedo obtener más información al respecto? ¿Hay algún libro sobre él como el libro C# de Jon Skeet?

+0

duplicado exacto de http://stackoverflow.com/questions/44940/learning-cil – U62

+0

No, esta pregunta se trata principalmente de las ventajas de aprenderlo. –

+0

casi idéntico a http://stackoverflow.com/questions/203019/reasons-to-learn-msil –

Respuesta

2

Usted no tiene que saber el montaje de aprender - es completamente separado del conjunto nativo. Aunque en tiempo de ejecución, el CLR básicamente lo convertirá en ensamblado nativo.

Un par de posibles ventajas:

1) se puede mirar en el CIL que se emite por el compilador y ver específicamente lo que su código está haciendo

2) para resolver ciertos tipos de problemas, es posible que en algún queremos generar código dinámicamente ... por ejemplo, dado que el marco de inyector de políticas de Microsoft todavía no está preparado y necesitamos ese tipo de comportamiento, escribimos algunas fontanerías de tipo de marco de bajo nivel.

6

Encontré estos libros útiles para aprender IL y sobre el CLR:

Solo leer a través de ellos le dará mucha información.

(También he oído CLR via C# es realmente bueno, pero no lo he leído a mí mismo.)

La comprensión de IL y el CLR le dará una ventaja cuando se ejecuta en un problema. (¿Una abstracción con goteras?) Aunque, en la actualidad, con agradables decompiladores como Reflector, no encuentro que use tanto ildasm.

No es necesario comprender el ensamblaje, pero sería útil. IL es en realidad bastante simple en su mayor parte.

Un ejemplo de dónde IL resultó útil fue determinar exactamente cómo exactamente F # compila ciertas construcciones. Otra es poder usar DynamicMethod y System.Reflection.Emit, que pueden abrir algunas buenas soluciones en ciertas situaciones.

6

El conocimiento de CIL le permite obtener más de .NET Framework en algunas situaciones de borde.

Tenga en cuenta que no tiene que ser capaz de leer opcodes sin procesar para beneficiarse de este conocimiento.conocimiento genérico de LI y ensamblados, junto con Mono.Cecil.dll puede hacer milagros:

PS: para mí la mejor manera de fuente de conseguir algo el conocimiento práctico de IL fue leer el código C# para algunas reglas Gendarme (es un análogo de FxCop que usa Mono. Cecil para hacer el código de introspección). Además, este artículo fue un buen comienzo: Parsing the IL of a Method Body.

3

CIL es mucho más simple que el ensamblador habitual. En gran parte, esto se debe al hecho de que la máquina virtual se basa en la pila, por lo que todo va a la pila y no hay registros de los que hay que estar pendientes.

Además, no hay cálculos de desplazamiento, manipulación directa de la memoria, las llamadas a métodos se enumeran con sus nombres .NET, etc. Supongo que si tienes un poco de experiencia con cualquier otro tipo de lenguaje ensamblador, probablemente puedas recoger la esencia del código CIL con bastante rapidez.

Personalmente, me parece muy útil poder encender ILDasm o Reflector para ver qué IL realmente produce el compilador C# para algún fragmento de código. Para muchas de las características más nuevas, como delegados/lambdas anónimos, variables capturadas, iteradores y similares, inspeccionar el IL puede ser muy útil.

Otros han mencionado buenos libros y simplemente lanzaré mi voto para Experto .NET 2.0 IL ensamblador de Serge Lidin. Tiene todos los detalles sangrientos. Si desea algo un poco más cerca de C# Jeffrey Ricther CLR a través de C# es excelente. El libro de Jon Skeet es genial, pero realmente no cubre CIL.