Neste artigo os fundamentos da Microsoft Intermediate Language (MSIL) são apresentados. Trata-se da linguagem utilizada pela plataforma .NET para representar o código intermediário, gerado pelos compiladores das diversas linguagens, antes que eles sejam convertidos em código binário pelo compilador JIT.
Para que serve
Conhecendo os fundamentos da Intermediate Language, é possível entender melhor como as coisas funcionam nos bastidores da plataforma .NET. Ver como o código que é escrito em uma linguagem de alto-nível funcionará.
Em que situação o tema é útil
Permite explorar melhor o conceito de emissão dinâmica de código executável através da biblioteca de Emitting, extrapolando os limites da aplicação através da utilização da biblioteca para criar novos blocos executáveis de código em tempo de execução. Entre outras coisas, é possível utilizar o recurso para gerar objetos mock dinamicamente para interfaces ou classes abstratas, ou ainda, proxys.
Resumo do DevMan
Para conseguir independência de linguagem, o framework .NET criou a chamada Intermediate Language. Sendo assim, todo compilador .NET não gera código nativo, mas sim um código escrito nessa linguagem intermediária. Entender essa linguagem auxilia na compreensão do próprio funcionamento do framework. Neste artigo 4 exemplos são criados, todos utilizando a IL como código fonte para garantir o aprendizado do trabalho interno do .NET Framework.
Você sabe o que acontece quando compila seus programas? Antes do advento do .NET, compilar um programa significava converter nossos códigos para linguagem de máquina (assembly), que era entendida pelo processador. No .NET temos uma etapa a mais: todos os nossos programas quando compilados são convertidos para uma linguagem intermediária, chamada Intermediate Language, que só mais tarde, em tempo de execução, é convertida para código de máquina (ou código nativo, como preferir).
A IL – Intermediate Language (também conhecida comoCommon Intermediate Language (CIL), ou aindaMicrosoft Intermediate Language (MSIL)) é conceito central do .NET framework. Independente da linguagem de programação que você utilize, quando compila, seu código-fonte é convertido para IL. Então, se você deseja entender melhor como .NET funciona, recomendo que aprenda, pelo menos um pouco, de IL. Entendendo IL você conseguirá:
• Entender melhor como o código gerenciado que você escreve realmente funciona;
• Examinar o código gerado pelo compilador (independente da linguagem);
• Escrever algum código diretamente em IL.
IL – uma linguagem com dois formatos
Em sua forma mais comum, Intermediate Language é uma linguagem binária. Como ocorre com a linguagem assembly nativa, uma instrução IL é armazenada em um container assembly (geralmente arquivos .exe ou .dll) em uma representação numérica binária (também conhecida como opcode).
Entretanto, como também ocorre com um código executável nativo, uma linguagem textual foi definida para representar a IL. Essa linguagem é constituída por códigos mnemônicos que, por sua vez, representam os comandos IL binários. Essa linguagem é conhecida como IL assembly. Entretanto, como IL Assembly é um nome muito longo, existe uma convenção em encurtar esse nome para ILAsm ou, simplesmente, código-fonte IL.
Recapitulando, todo arquivo executável (EXE) ou biblioteca (DLL) que seu compilador gera para você contém um código executável. Em .NET, esse código está escrito em uma especificação conhecida como Intermediate Language, que é binária. Além disso, existe uma forma textual de representar esse conteúdo executável.
Você pode ver a representação IL de seu código quando quiser
A Microsoft disponibiliza um utilitário que acompanha o SDK do .NET Framework, chamado ILDasm. Ao executá-lo, através do Command Prompt do Visual Studio, é possível escolher um arquivo binário, um programa feito em .NET qualquer, e seu IL será exibido como mostra a Figura 1.
Figura 1. Interface do ILDasm
Além de exibir a estrutura do programa, o ILDasm ainda permite que se navegue nos métodos do mesmo. Basta dar dois cliques em um método para que o código IL correspondente seja apresentado (Figura 2).
Figura 2. Código IL apresentado pelo ILDasm
Intermediate Language, dados e sua “máquina virtual”
A IL funciona sob o conceito de máquina virtual. Em palavras simples, a linguagem é baseada em uma arquitetura de computador imaginária (não fiel a como as coisas de fato acontecem no computador). A máquina virtual do .NET é conhecida como CLR (Common Language Runtime).
A CLR do .NET foi projetada para garantir consistência de tipos (type-safe) e isso é um dos fatores que torna o JIT tão eficiente na hora de converter o código IL para código nativo da máquina.
NA CLR temos, em alto-nível, variáveis locais, atributos de instância, atributos estáticos, variáveis globais, além de dados que foram passados como argumentos para os métodos. Embora o hábito seja pensar nesses dados de maneiras diferentes, como espécies de dados diferentes de memória, por “baixo do capô” (gosto da expressão), estas formas de dados são tratadas como da mesma espécie em posições diferentes de memória.
Os designers da CLR foram extremamente felizes ao levar a abstração das espécies de dados das linguagens de nível mais alto para o nível mais baixo. A IL mantém essa abstração. Sendo que aqui começa um distanciamento da IL, enquanto linguagem de montagem, da linguagem de montagem para código nativo, sobretudo do 8086.
...Confira outros conteúdos:
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.