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:

  1. Common Language Runtime (CLR); e o
  2. 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.

teste

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:

  1. Procurar nos metadados o método que está sendo chamado.
  2. A partir dos metadados, trazer a IL referente a esse método.
  3. Alocar memória.
  4. Compile a IL para código de máquina e salve na memória alocada.
  5. 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.
  6. 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