.NET CLR é um ambiente de execução que gerencia e executa o código escrito em qualquer linguagem de programação .NET. CLR é o componente de máquina virtual do framework .NET. O compilador dessa linguagem compila o código-fonte de aplicativos desenvolvidos usando linguagens compatíveis com .NET na linguagem intermediária do CLR chamada MSIL, ou seja, código de linguagem intermediária da Microsoft. Este código é independente de plataforma. É comparável ao código de bytes em java. Os metadados também são gerados durante a compilação e o código MSIL e armazenados em um arquivo conhecido como arquivo de manifesto. Esses metadados geralmente tratam de membros e tipos exigidos pelo CLR para executar código MSIL. Um componente compilador just-in-time do CLR converte o código MSIL em código nativo da máquina. Este código depende da plataforma. CLR gerencia memória, threads, exceções, execução de código, segurança de código, verificação e compilação.
como gerar número aleatório em java
A figura a seguir mostra a conversão do código-fonte em código nativo.
A figura acima converte o código em código nativo, que a CPU pode executar.
Os principais componentes do CLR são:
- Sistema de tipo comum
- Especiação de linguagem comum
- Coletor de lixo
- Compilador Just in Time
- Metadados e Assemblies
1. Sistema de tipo comum:
O CTS fornece diretrizes para declarar, usar e gerenciar tipos de dados em tempo de execução. Oferece comunicação entre idiomas. Por exemplo, VB.NET possui um tipo de dados inteiro e C# possui um tipo de dados int para gerenciar números inteiros. Após a compilação, Int32 é usado por ambos os tipos de dados. Portanto, o CTS fornece os tipos de dados usando código gerenciado. Um sistema de tipos comum ajuda a escrever código independente de linguagem.
Ele fornece duas categorias de tipos.
2. Especificação de linguagem comum (CLS):
Common Language Specification (CLS) contém um conjunto de regras a serem seguidas por todas as linguagens suportadas pela NET. As regras comuns facilitam a implementação da integração de linguagens e ajudam na herança e depuração entre linguagens. Cada linguagem suportada pelo NET Framework possui suas próprias regras de sintaxe. Mas o CLS garante a interoperabilidade entre aplicações desenvolvidas em linguagens NET.
3. Coleta de lixo:
Garbage Collector é um componente do CLR que funciona como um gerenciador automático de memória. Ajuda a gerenciar a memória alocando memória automaticamente de acordo com a necessidade. Ele aloca memória heap para objetos. Quando os objetos não estão em uso, ele recupera a memória alocada a eles para uso futuro. Também garante a segurança dos objetos ao não permitir que um objeto utilize o conteúdo de outro objeto.
4. Compilador Just in Time (JIT):
O compilador JIT é um componente importante do CLR. Ele converte o código MSIL em código nativo (ou seja, código específico da máquina). O programa .NET é compilado explícita ou implicitamente. O desenvolvedor ou programador chama um compilador específico para compilar o programa na compilação explícita. Na compilação implícita, o programa é compilado duas vezes. O código-fonte é compilado em Microsoft Intermediate Language (MSIL) durante o primeiro processo de compilação. O código MSIL é convertido em código nativo no segundo processo de compilação. Este processo é chamado de compilação JIT. Existem três tipos de compiladores JIT – Pré, Econo e Normal. O Pre JIT Compiler compila todo o código MSIL em código nativo antes da execução. O Econo JIT Compiler compila apenas as partes do código MSIL necessárias durante a execução e remove as partes que não são mais necessárias. O Compilador JIT normal também compila apenas as partes do código MSIL necessárias durante a execução, mas as coloca no cache para uso futuro. Não requer recompilações de peças já utilizadas, pois elas foram colocadas na memória cache.
5. Metadados:
Metadados são informações binárias sobre o programa, armazenadas em um arquivo CLR Portable Executable (PE) junto com o código MSIL ou na memória. Durante a execução do MSIL, os metadados também são carregados na memória para interpretação adequada das classes e afins. Informações usadas no código. Portanto, os metadados ajudam a implementar o código de maneira neutra em termos de linguagem ou a obter interoperabilidade de linguagem.
6. Montagens:
Um assembly é uma unidade fundamental de agrupamento de código físico. Consiste no manifesto do assembly, metadados, código MSIL e um conjunto de recursos como arquivos de imagem. Também é considerada uma unidade básica de implantação, controle de versão, reutilização, permissões de segurança, etc.
Funções CLR do .NET
A seguir estão as funções do CLR.
- Ele converte o programa em código nativo.
- Lida com exceções
- Fornece segurança de tipo
- Gerenciamento de memória
- Fornece segurança
- Performance melhorada
- Independente de idioma
- Plataforma independente
- Coleta de lixo
- Fornece recursos de linguagem como herança, interfaces e sobrecarga para programas orientados a objetos.
O código executado com CLR é chamado de código gerenciado, enquanto o código fora do CLR é chamado de código não gerenciado. O CLR também fornece uma camada de interoperabilidade, que permite a interoperabilidade de códigos gerenciados e não gerenciados.
1. Código gerenciado:
Qualquer linguagem escrita na estrutura .NET é código gerenciado. O código gerenciado usa CLR, que cuida de seus aplicativos gerenciando memória, lidando com segurança, permitindo depuração entre linguagens, etc. O processo de código gerenciado é mostrado na figura:
2. Código não gerenciado:
O código desenvolvido fora da estrutura .NET é conhecido como código não gerenciado. Os aplicativos que não são executados sob o controle do CLR são considerados não gerenciados. Certas linguagens como C++ podem ser usadas para escrever tais aplicações, como funções de acesso de baixo nível do sistema operacional. A compatibilidade em segundo plano com VB, ASP e COM são exemplos de código não gerenciado. Este código é executado com a ajuda de classes wrapper. O processo de código não gerenciado é mostrado abaixo:
Versões do .NET CLR
O CLR se atualiza periodicamente para fornecer melhor desempenho.
Versão .NET | Versão CLR |
---|---|
1,0 | 1,0 |
1.1 | 1.1 |
2,0 | 2,0 |
3,0 | 2,0 |
3.5 | 2,0 |
4 | 4 |
4,5 | 4 |
4.6 | 4 |
4.6 | 4 |
Estrutura CLR do .NET
A seguir está a estrutura dos componentes do Common Language Runtime.
Suporte à Biblioteca de Classes Base
É uma biblioteca de classes que oferece suporte a classes para o aplicativo .NET.
Suporte a tópicos
Ele gerencia a execução paralela do aplicativo multithread.
Marechal COM
Ele fornece comunicação entre os objetos COM e o aplicativo.
Mecanismo de segurança
Ele impõe restrições de segurança.
Mecanismo de depuração
Ele permite depurar diferentes tipos de aplicativos.
Verificador de tipo
Ele verifica os tipos utilizados na aplicação e verifica se eles atendem aos padrões fornecidos pelo CLR.
Gerenciador de código
Ele gerencia o código em tempo de execução.
Coletor de lixo
Ele libera a memória não utilizada e a aloca para um novo aplicativo.
Manipulador de Exceções
Ele trata a exceção em tempo de execução para evitar falhas no aplicativo.
Carregador de classe
É usado para carregar todas as classes em tempo de execução.