Fala galera, blz?
Começa agora a primeira de uma série de publicações sobre o .NET Framework. Com essa leitura você será capaz de ter pelo menos uma ideia de como é composto o Framework .Net e como funciona a compilação das linguagens .Net.
INTRODUÇÃO
O Microsoft .Net Framework ou simplesmente .Net é uma plataforma de desenvolvimento gerenciado que visa a criação e execução de programas e serviços. Seu lançamento foi em 13/02/2002, sua versão atual é a 4.5. Essa poderosa ferramenta de desenvolvimento foi uma iniciativa da Microsoft para tornar o desenvolvimento de aplicações realmente fáceis.
O .Net basicamente é composto por duas partes:
- Common Language Runtime (CLR); e o
- Framework Class Library (FCL)
O CLR é o coração do .Net, ele é quem gerencia a execução das aplicações, dedicarei um post para falar somente do CLR posteriormente.
A FCL é a biblioteca de classes do .Net, nela está contida praticamente tudo o que torna nossa programação mais rápida e fácil, são milhares de classes e métodos
Essas duas grandes partes são a base do Framework. Net. Elas fornecem para os desenvolvedores um modelo de programação consistente e simplificado, os programadores não precisam mais entender de registros e ficar alocando, desalocando memória (puts, programar em C era tenso).
COMPILANDO CÓDIGO
Um conceito muito legal do .net é “Executou uma vez, executará sempre”, isso ocorre porque um programa desenvolvido na plataforma .net é compilado duas vezes! Como assim? É simples, cada linguagem desenvolvida para o .Net (atualmente existem mais de trinta) tem o seu próprio compilador, todos esses compiladores fazem a mesma coisa, que é transformar o código fonte que você digitou em uma linguagem intermediaria chamada Microsoft Intermediate Language (MSIL ou IL). Então, entende-se que todos esses compiladores geram código para o CLR. Além de gerar IL, cada compilador precisa também gerar metadados (resumidamente são tabelas com informações usadas pelo CLR para executar um código IL). Os metadados junto com a IL formam um módulo gerenciado, que nada mais é do que um arquivo portable executável (um exe gerenciado). Veja na ilustração da imagem 1 o processo de compilação de uma linguagem .Net e a geração do módulo gerenciado.
Figura 1 - Compilação de código para IL
Observando a figura 1 fica claro entender como o .Net Framework suporta que uma mesma aplicação utilize código fonte de linguagens diferentes, no final tudo será transformado em IL, pois, é a linguagem que o CLR entende, e é a IL que é usada para a segunda compilação.
Todos nós sabemos que o cpu só entende linguagem de máquina, certo? Certo! O CLR possui um compilador de IL chamado JIT (just-in-time). Fica por conta do JIT o trabalho de converter IL para linguagem de máquina. Como a própria referencia do nome diz, o JIT compila o código em tempo de execução, ou seja, a IL só é compilada quando for usada e isso acontece somente uma vez. Lembram do termo “Executou uma vez, executara sempre”? Então, é aqui que ele se encaixa.
O processo de compilação do JIT tem 6 passos, são eles:
- Procurar nos metadados o método que está sendo chamado.
- A partir dos metadados, trazer a IL referente a esse método.
- Alocar memória.
- Compile a IL para código de máquina e salve na memória alocada.
- Vá nos metadados novamente e troque a informação que me disse aonde estava a IL referente ao método em questão pela informação do endereço de memória alocado no passo3.
- Desvie para o agora código nativo que está salvo na memória.
Simples né? Pra que ficar executando toda vez a mesma coisa sendo que eu posso salvar o que foi feito na primeira vez? Rs
Aqui eu finalizo o primeiro post da serie .Net Framework, já temos uma noção do que é formado o Framework e como funciona a compilação das linguagens .Net. No próximo post eu falarei um pouco mais sobre CLR e FCL, consequentemente os assuntos tratados acarretarão na explicação do Common Type System (CTS) e da Common Language Specification (CLS).
Até o próximo post!
Refrências
Livro Programação Aplicada com MICROSOFT .NET FRAMEWORK - Jeffrey Ritchter
Guia de introdução do .Net - http://msdn.microsoft.com/pt-br/library/zw4w595w(v=vs.110).aspx