Compartilhar via


Visão geral do CLR (Common Language Runtime)

O .NET fornece um ambiente em 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 a funcionalidade do Common Language Runtime e permitem que você escreva um código que se beneficie do ambiente de execução gerenciada. O código que você desenvolve com um compilador de idiomas direcionado ao runtime é chamado de código gerenciado. O código gerenciado se beneficia de recursos como integração entre idiomas, tratamento de exceções entre idiomas, segurança aprimorada, controle de versão e suporte à implantação, um modelo simplificado para interação de componentes e serviços de depuração e criação de perfil.

Observação

Compiladores e ferramentas podem produzir uma 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 definidos por um padrão público, a especificação de Infraestrutura de Linguagem Comum do ECMA. Para obter mais informações, consulte ECMA C# e Common Language Infrastructure Specifications.

Para habilitar o runtime para fornecer serviços ao código gerenciado, os compiladores de linguagem devem emitir metadados que descrevem os tipos, membros e 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, definir instâncias na memória, resolver invocações de método, gerar código nativo, impor segurança e definir limites de contexto em tempo de execução.

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

O common language runtime facilita o design de componentes e aplicativos cujos objetos interagem entre idiomas. Objetos escritos em idiomas diferentes podem se comunicar entre si e seus comportamentos podem ser fortemente integrados. Por exemplo, você pode definir uma classe e, em seguida, usar um idioma diferente para derivar uma classe de sua 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 escrita em um idioma diferente. Essa integração entre idiomas é possível porque compiladores de linguagem e ferramentas direcionadas ao runtime usam um sistema de tipo comum 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 carregam informações sobre os componentes e recursos contra os quais foram construídos. O runtime usa essas informações para garantir que seu componente ou aplicativo tenha as versões especificadas de tudo o que precisa, o que torna seu código menos provável de quebrar 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 podem ser difíceis de estabelecer e manter. Em vez disso, 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 linguagem e ferramentas expõem a funcionalidade do runtime de maneiras que se destinam a serem úteis e intuitivas para os desenvolvedores. Alguns recursos do runtime podem ser mais perceptíveis em um ambiente do que em outro. A forma como você experimenta o runtime depende de quais compiladores de idiomas ou ferramentas você usa. Por exemplo, se você for um desenvolvedor do Visual Basic, poderá observar que, com o common language runtime, a linguagem do Visual Basic tem mais recursos orientados a objetos do que antes. O runtime fornece os seguintes benefícios:

  • Aprimoramentos no desempenho.

  • A capacidade 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 a objetos.

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

  • Suporte para tratamento estruturado de exceções.

  • Suporte para 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 obter mais informações sobre delegados, consulte Common Type System.

Versões do CLR

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

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

Título Descrição
Processo de execução gerenciada Descreve as etapas necessárias para aproveitar 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 principais conceitos do .NET Framework, como o sistema de tipos comuns, interoperabilidade entre idiomas, execução gerenciada, domínios de aplicativo e assemblies.
Sistema de Tipo Comum Descreve como os tipos são declarados, usados e gerenciados no runtime em suporte à integração entre idiomas.