Visão geral do CLR (Common Language Runtime)

O .NET fornece um ambiente de tempo de execução, chamado Common Language Runtime, que executa o código e fornece serviços que facilitam o processo de desenvolvimento.

Compiladores e ferramentas expõem as funcionalidades do Common Language Runtime e permitem que você grave um código que se beneficia do ambiente de execução gerenciado. O código que você desenvolve com um compilador de linguagem de programação direcionado ao runtime é chamado de código gerenciado. O código gerenciado aproveita recursos como integração em qualquer linguagem, tratamento de exceções em qualquer linguagem, segurança aprimorada, suporte a controle de versão e implantação, um modelo simplificado para interação entre componentes, além de serviços de depuração e criação de perfil.

Observação

Compiladores e ferramentas são capazes de produzir saída que o Common Language Runtime pode consumir porque o sistema de tipos, o formato dos metadados e o ambiente de tempo de execução (o sistema de execução virtual) são todos definidos por um padrão público, a especificação Common Language Infrastructure ECMA. Para obter mais informações, consulte Especificações ECMA C# e Common Language Infrastructure.

Para habilitar o runtime para fornecer serviços de código gerenciado, os compiladores de linguagem devem emitir metadados que descrevam os tipos, os membros e as referências em seu código. Os metadados são armazenados com o código. Todo arquivo PE (Portable Executable) do Common Language Runtime carregável contém metadados. O runtime usa metadados para localizar e carregar classes, dispor instâncias na memória, resolver invocações de método, gerar código nativo, impor segurança e definir limites de contexto do runtime.

O runtime identifica automaticamente o layout de objeto e gerencia referências a objetos, liberando-os quando eles não estão sendo mais usados. Objetos cujos tempos de vida são gerenciados dessa forma são chamados de dados gerenciados. A coleta de lixo elimina perdas de memória, bem como alguns outros erros de programação comuns. Se seu código for gerenciado, você poderá usar dados gerenciados, não gerenciados ou gerenciados e não gerenciados em seu aplicativo .NET. Como os compiladores de linguagem fornecem seus próprios tipos, como tipos primitivos, você talvez sem sempre saiba (ou precise saber) se os dados estão sendo gerenciados.

O Common Language Runtime facilita a criação de componentes e aplicativos cujos objetos interagem entre linguagens. Objetos gravados em linguagens diferentes podem se comunicar entre si e seus comportamentos podem estar totalmente integrados. Por exemplo, você pode definir uma classe e usar uma linguagem diferente para derivar uma classe da classe original ou chamar um método na classe original. Você também pode passar uma instância de uma classe para um método de uma classe gravado em uma linguagem diferente. Essa integração entre idiomas é possível porque os compiladores de linguagem e as ferramentas direcionadas ao runtime usam um Common Type System definido pelo runtime. Eles seguem as regras do runtime para definir novos tipos e para criar, usar, persistir e associar a tipos.

Como parte de seus metadados, todos os componentes gerenciados transportam informações sobre os componentes e os recursos com base nos quais eles foram compilados. O runtime usa essas informações para garantir que o componente ou o aplicativo tenha as versões especificadas de tudo o que precisa, o que torna seu código menos suscetível à interrupção devido a alguma dependência não atendida. As informações de registro e os dados de estado não são mais armazenados no registro onde pode ser difícil estabelecer e mantê-los. Em vez disso, as informações sobre os tipos que você define e suas dependências são armazenadas com o código como metadados. Dessa forma, a tarefa de replicação e remoção de componentes é menos complicada.

Compiladores de linguagens e ferramentas expõem a funcionalidade do runtime da maneira como seriam úteis e intuitivas para desenvolvedores. Alguns recursos do runtime devem ser mais perceptíveis em um ambiente do que em outro. Como você usa o runtime depende de quais compiladores de linguagem ou ferramentas você usa. Por exemplo, se for um desenvolvedor do Visual Basic, você poderá observar que, com o Common Language Runtime, a linguagem do Visual Basic tem mais recursos orientados a objeto do que antes. O runtime oferece os seguintes benefícios:

  • Aprimoramentos no desempenho.

  • A possibilidade de usar facilmente componentes desenvolvidos em outras linguagens.

  • Tipos extensíveis fornecidos por uma biblioteca de classes.

  • Recursos de linguagem como herança, interfaces e sobrecarga para programação orientada ao objeto.

  • Suporte a threading livre explícito que permite a criação de aplicativos multithread e escalonáveis.

  • Suporte ao tratamento de exceções estruturado.

  • Suporte a atributos personalizados.

  • Coleta de lixo.

  • Uso de delegados em vez de ponteiros de função para maior segurança e segurança de tipos. Para saber mais sobre representantes, veja Common Type System.

Versões do CLR

As versões .NET Core e .NET 5+ têm uma única versão de produto, ou seja, não há uma versão CLR separada. Para obter uma lista de versões do .NET Core, consulte Baixar o .NET Core.

No entanto, o número da versão do .NET Framework não corresponde necessariamente ao número da versão do CLR que ele inclui. Para obter uma lista de versões do .NET Framework e suas versões CLR correspondentes, consulte Versões e dependências do .NET Framework.

Título Descrição
Processo de execução gerenciada Descreve as etapas obrigatórias para usufruir o Common Language Runtime.
Gerenciamento Automático de Memória Descreve como o coletor de lixo aloca e libera memória.
Visão geral do .NET Framework Descreve os conceitos-chave do .NET Framework, como Common Type System, interoperabilidade entre linguagens, execução gerenciada, domínios de aplicativos e assemblies.
Common Type System Descreve como os tipos são declarados, usados e gerenciados no runtime para dar suporte à integração entre linguagens.