Visão geral do Common Language Runtime

Compiladores e ferramentas expõem as funcionalidades do runtime e permitem que você escreva código que se beneficia desse ambiente de execução gerenciado.Código que você desenvolve com um compilador de linguagem que visa o runtime é chamado código gerenciado; ele se beneficia de recursos como integração entre linguagens, tratamento de exceção entre linguagens, segurança aprimorada, suporte a versionamento e implantação, um modelo simplificado para interação entre componentes, depuração e serviços de perfil.

Para ativar o runtime para fornecer serviços de código gerenciado, compiladores de linguagens 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 executável portável (PE) carregável do common language runtime contém metadados.O runtime usa metadados para localizar e carregar classes, organizar instâncias na memória, resolver invocações método, gerar código nativo, reforçar a segurança, e definir limites de contexto em tempo de execução.

O runtime automaticamente trata de objetos de layout e gerencia referências a objetos, liberando-os quando eles não estão 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 seu código é gerenciado, você pode usar dados gerenciados, dados não gerenciados ou ambos no seu aplicativo .NET Framework.Devido ao fato de compiladores de linguagens fornecerem seus próprios tipos, como tipos primitivos, você não pode sempre saber (ou precisa saber) se seus dados estão sendo gerenciados.

O Common Language Runtime torna fácil a criação de componentes e aplicativos cujos objetos interagem entre linguagens.Objetos escritos em diferentes linguagens podem se comunicar entre si, e seus comportamentos podem ser totalmente integrados.Por exemplo, você pode definir uma classe e, em seguida, usar uma linguagem 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 escrito em uma linguagem diferente.Essa integração entre linguagens é possível porque os compiladores de linguagens e ferramentas que miram o runtime usam um CTS (Common Type System) definido pelo runtime, e eles seguem as regras do runtime para definir novos tipos, como também para criação, uso, persistência e ligação de tipos.

Como parte de seus metadados, todos os componentes gerenciados transportam informações sobre os componentes e recursos dos quais eles foram construídos.O runtime usa essas informações para garantir que o componente ou aplicativo tenha as versões especificadas de tudo o que precisa, o que torna seu código menos suscetível a quebra devido a alguma dependência não encontrada.Informações de registro e dados do estado não são mais armazenadas no registro onde eles podem ser difíceis para estabelecer e manter.Em vez disso, as informações sobre os tipos que você definir (e suas dependências) são armazenados com o código como metadados, fazendo com que as tarefas de replicação de componentes e remoção sejam muito menos complicadas.

Compiladores de linguagens e ferramentas expõem as funcionalidades do runtime de maneira a serem úteis e intuitivas para desenvolvedores.Isso significa que alguns recursos do runtime devem ser mais notáveis em um ambiente que em outro.Como você experimenta o runtime depende de qual compiladores de linguagem ou ferramentas você usa.Por exemplo, se você for um desenvolvedor Visual Basic, você pode notar que com o Common Language Runtime, a linguagem Visual Basic tem mais recursos orientados a objetos do que antes.A seguir estão alguns benefícios do runtime:

  • Melhorias de desempenho.

  • Capacidade de facilmente usar componentes desenvolvidos em outras linguagens.

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

  • Novos recursos da linguagem como herança, interfaces e sobrecarga para programação orientada a objetos; suporte a segmentação livre explícita que permite criação de aplicativos de vários segmentos, escalonáveis; suporte a tratamento de exceção estruturada e atributos personalizados.

Se você usar o Microsoft® Visual C++® .NET, você pode escrever um código gerenciado usando Visual C++, que fornece os benefícios de um ambiente de execução gerenciado assim como acesso a recursos poderosos e tipos de dados expressivos com os quais você está familiarizado.Recursos de runtime adicionais incluem:

  • Integração entre linguagens, especialmente herança entre linguagens.

  • Coleta de lixo que gerencia o tempo de vida de objeto sendo a contagem de referência desnecessária.

  • Objetos autodescritivos, que fazem uso da Interface Definition Language (IDL) desnecessariamente.

  • A capacidade de compilar uma vez e executar em qualquer CPU e sistema operacional que dê suporte ao runtime.

Você também pode escrever código gerenciado usando a linguagem C#, que fornece os seguintes benefícios:

  • Design completamente orientado a objetos.

  • Segurança de tipos muito forte.

  • Boa combinação da simplicidade do Visual Basic e poder do C++.

  • Coleta de lixo.

  • Sintaxe e palavras-chave semelhante as do C e C++.

  • Uso do delegates em vez de ponteiros de função para aumento da segurança de tipos e segurança.Ponteiros de função estão disponíveis através do uso da palavra-chave unsafe do C# e a opção /unsafe do compilador C# (CSC.exe) para código não gerenciado e dados.

Consulte também

Conceitos

Processo de Execução Gerenciada

Outros recursos

Visão geral sobre o .NET Framework