Caros,
Hoje parei para dar uma lida noCIL que o AX 2012 implementa e vou tentar explicar.

CIL é o resultado de uma compilação de mais baixo nível do que a gerada pelo X++ e por consequência ganha-se performance.

Todo código X++ compilado dentro do AX é compilado em um bytecode intermediário e esse formato é então usado pelo runtime do AX, tanto no client como no server. O compilador X++ gera apenas o bytecode para gerar o código CIL, no entanto você precisa gerar manualmente tanto o Incremental CIL como Full o CIL, ambos estão disponíveis na barra de ferramentas.

Como já foi falado, o principal benefício de se usar X++ como CIL é a performance. Geralmente o runtime do .Net é significativamente mais rápido que o X++, e em certos casos o ganho de performance é mais notável ainda, vejam:

  • Situações com muitas chamadas de métodos -> No runtime do X++ qualquer chamada de método acontece através de reflections, no caso do CIL acontece no nível do processador.

  • Situações com muitos objetos de ‘vida curta’ -> O Garbage Collector (GC) do AX irá sempre analisar o objeto que saiu de escopo para verificar se há algum objeto que pode ser desalocado, no caso do CIL o GC ira determinar o melhor momento para desalocar o objeto e liberar memória.

  • Situações com uso extensivo de .Net Interop -> Rodando o X++ como CIL, todas as conversões e enpacotamentos serão evitados.

Um exemplo real onde podemos verificar que o código como .Net CIL faz uma diferença significante é na ferramenta Compare. Mesmo com o algorítimo tendo poucas chamadas de métodos, poucos objetos de vida curta, e sem .Net interop, o uso do CIL faz com que em 10 segundos seja possível se comparar 3500 linhas de texto, enquanto no X++ nativo você só conseguiria comparar 600 linhas.

No geral, apenas os batch jobs e o services rodam como CIL, no entanto, se você quiser forçar códigos X++ rodarem como CIL fora destes casos, você poderá usar os métodos runClassMethodIl e runTableMethodIl que são implementados pela classe Global.

Há outras formas também de fazer, mas discutiremos em outro post.

Referências:
Inside Microsoft Dynamics AX 2012.
Dynamics AX Daily
Common Language Runtime
Common Intermediate Language