logo

Tempo de execução de linguagem comum (CLR) .NET

.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.

Tempo de execução de linguagem comum líquida

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
Tempo de execução de linguagem comum comum

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.

    Tipo de valor:Um tipo de valor armazena os dados na memória alocada na pilha ou embutida em uma estrutura. Esta categoria de Type contém o diretório de dados. Se o valor de uma variável for copiado para outra, ambas as variáveis ​​armazenam dados de forma independente. Pode ser de tipos integrados, definidos pelo usuário ou tipos de enumerações. Os tipos integrados são tipos de dados primitivos como numérico, booleano, char e data. Os usuários no código-fonte criam tipos definidos pelo usuário. Uma enumeração refere-se a um conjunto de valores enumerados representados por rótulos, mas armazenados como um tipo numérico.
    Tempo de execução de linguagem comum comum Tipo de referência:Um tipo Reference armazena uma referência ao valor de um endereço de memória e é alocado no heap. A memória heap é usada para alocação dinâmica de memória. O Tipo de Referência não contém dados reais diretamente, mas contém o endereço dos dados. Sempre que um objeto do tipo referência é feito, ele copia o endereço e não os dados reais. Portanto, duas variáveis ​​se referirão aos mesmos dados. Se os dados de um objeto Tipo de Referência forem alterados, o mesmo será refletido para o outro objeto. Os tipos de referência podem ser tipos autodescritivos, tipos de ponteiro ou tipos de interferência. Os tipos autodescritivos podem ser string, array e tipos de classe que armazenam metadados sobre si mesmos.

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:

Tempo de execução de linguagem comum líquida

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:

Tempo de execução de linguagem comum líquida

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.

Tempo de execução de linguagem comum líquida

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.