Visão geral do CLR (Common Language Runtime)Common Language Runtime (CLR) overview

O .NET Framework 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.The .NET Framework provides a run-time environment called the common language runtime, which runs the code and provides services that make the development process easier.

Compiladores e ferramentas expõem as funcionalidades do Common Language Runtime e permitem que você grave um código que se beneficia desse ambiente de execução gerenciado.Compilers and tools expose the common language runtime's functionality and enable you to write code that benefits from this managed execution environment. O código que você desenvolve com um compilador de linguagem que visa o tempo de execução é chamado de código gerenciado. Ele aproveita recursos como integração em qualquer idioma, tratamento de exceções em qualquer idioma, 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.Code that you develop with a language compiler that targets the runtime is called managed code; it benefits from features such as cross-language integration, cross-language exception handling, enhanced security, versioning and deployment support, a simplified model for component interaction, and debugging and profiling services.

Observação

Compiladores e ferramentas podem 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 virtual de execução) são todos definidos por um padrão público, a especificação Common Language Infrastructure ECMA.Compilers and tools are able to produce output that the common language runtime can consume because the type system, the format of metadata, and the runtime environment (the virtual execution system) are all defined by a public standard, the ECMA Common Language Infrastructure specification. Para obter mais informações, consulte Especificações ECMA C# e Common Language Infrastructure.For more information, see ECMA C# and Common Language Infrastructure Specifications.

Para habilitar o tempo de execução 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.To enable the runtime to provide services to managed code, language compilers must emit metadata that describes the types, members, and references in your code. Os metadados são armazenados com o código. Todo arquivo PE (Portable Executable) do Common Language Runtime carregável contém metadados.Metadata is stored with the code; every loadable common language runtime portable executable (PE) file contains metadata. O tempo de execução 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 tempo de execução.The runtime uses metadata to locate and load classes, lay out instances in memory, resolve method invocations, generate native code, enforce security, and set run-time context boundaries.

O tempo de execução identifica automaticamente o layout de objeto e gerencia referências a objetos, liberando-os quando eles não estão sendo mais usados.The runtime automatically handles object layout and manages references to objects, releasing them when they are no longer being used. Objetos cujos tempos de vida são gerenciados dessa forma são chamados de dados gerenciados.Objects whose lifetimes are managed in this way are called managed data. A coleta de lixo elimina perdas de memória, bem como alguns outros erros de programação comuns.Garbage collection eliminates memory leaks as well as some other common programming errors. Se o código for gerenciado, você poderá usar dados gerenciados, dados não gerenciados ou ambos no seu aplicativo do .NET Framework.If your code is managed, you can use managed data, unmanaged data, or both managed and unmanaged data in your .NET Framework application. 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.Because language compilers supply their own types, such as primitive types, you might not always know (or need to know) whether your data is being managed.

O Common Language Runtime facilita a criação de componentes e aplicativos cujos objetos interagem entre linguagens.The common language runtime makes it easy to design components and applications whose objects interact across languages. Objetos gravados em linguagens diferentes podem se comunicar entre si e seus comportamentos podem estar totalmente integrados.Objects written in different languages can communicate with each other, and their behaviors can be tightly integrated. 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.For example, you can define a class and then use a different language to derive a class from your original class or call a method on the original class. Você também pode passar uma instância de uma classe para um método de uma classe gravado em uma linguagem diferente.You can also pass an instance of a class to a method of a class written in a different language. Essa integração em qualquer idioma é possível porque os compiladores de linguagens e ferramentas que segmentam o tempo de execução usam um Common Type System definido pelo tempo de execução e seguem as regras do tempo de execução para definir novos tipos, bem como para criar, usar, manter e associar a tipos.This cross-language integration is possible because language compilers and tools that target the runtime use a common type system defined by the runtime, and they follow the runtime's rules for defining new types, as well as for creating, using, persisting, and binding to types.

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.As part of their metadata, all managed components carry information about the components and resources they were built against. O tempo de execução 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.The runtime uses this information to ensure that your component or application has the specified versions of everything it needs, which makes your code less likely to break because of some unmet dependency. 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.Registration information and state data are no longer stored in the registry where they can be difficult to establish and maintain. Em vez de isso, as informações sobre os tipos que você define (e suas dependências) são armazenadas com o código como metadados, fazendo com que as tarefas de replicação do componente e remoção sejam muito menos complicadas.Instead, information about the types you define (and their dependencies) is stored with the code as metadata, making the tasks of component replication and removal much less complicated.

Compiladores de linguagens e ferramentas expõem a funcionalidade do tempo de execução da maneira como seriam úteis e intuitivas para desenvolvedores.Language compilers and tools expose the runtime's functionality in ways that are intended to be useful and intuitive to developers. Isso significa que alguns recursos do tempo de execução devem ser mais perceptíveis em um ambiente do que em outro.This means that some features of the runtime might be more noticeable in one environment than in another. Como usa o tempo de execução depende de quais compiladores de linguagem ou ferramentas você usa.How you experience the runtime depends on which language compilers or tools you use. 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.For example, if you are a Visual Basic developer, you might notice that with the common language runtime, the Visual Basic language has more object-oriented features than before. O tempo de execução oferece os seguintes benefícios:The runtime provides the following benefits:

  • Melhorias de desempenho.Performance improvements.

  • A possibilidade de usar facilmente componentes desenvolvidos em outras linguagens.The ability to easily use components developed in other languages.

  • Tipos extensíveis fornecidos por uma biblioteca de classes.Extensible types provided by a class library.

  • Recursos de linguagem como herança, interfaces e sobrecarga para programação orientada ao objeto.Language features such as inheritance, interfaces, and overloading for object-oriented programming.

  • Suporte a threading livre explícito que permite a criação de aplicativos multithread, escalonáveis.Support for explicit free threading that allows creation of multithreaded, scalable applications.

  • Suporte ao tratamento de exceções estruturado.Support for structured exception handling.

  • Suporte a atributos personalizados.Support for custom attributes.

  • Coleta de lixo.Garbage collection.

  • Uso de delegados em vez de ponteiros de função para maior segurança e segurança de tipos.Use of delegates instead of function pointers for increased type safety and security. Para saber mais sobre representantes, veja Common Type System.For more information about delegates, see Common Type System.

Versões do CLRCLR versions

O número de versão do .NET Framework não corresponde necessariamente ao número de versão do CLR que ele inclui.The version number of the .NET Framework doesn't necessarily correspond to the version number of the CLR it includes. A tabela a seguir mostra como os dois números de versão se correlacionam.The following table shows how the two version numbers correlate.

Versão do .NET Framework.NET Framework version Inclui versão do CLRIncludes CLR version
1.01.0 1.01.0
1.11.1 1.11.1
2.02.0 2.02.0
3.03.0 2.02.0
3.53.5 2.02.0
44 44
4.5 (incluindo 4.5.1 e 4.5.2)4.5 (including 4.5.1 and 4.5.2) 44
4.6 (incluindo 4.6.1 e 4.6.2)4.6 (including 4.6.1 and 4.6.2) 44
4.7 (incluindo 4.7.1 e 4.7.2)4.7 (including 4.7.1 and 4.7.2) 44
TítuloTitle DescriçãoDescription
Processo de execução gerenciadaManaged Execution Process Descreve as etapas obrigatórias para usufruir o Common Language Runtime.Describes the steps required to take advantage of the common language runtime.
Gerenciamento Automático de MemóriaAutomatic Memory Management Descreve como o coletor de lixo aloca e libera memória.Describes how the garbage collector allocates and releases memory.
Visão geral do .NET FrameworkOverview of the .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.Describes key .NET Framework concepts such as the common type system, cross-language interoperability, managed execution, application domains, and assemblies.
Common Type SystemCommon Type System Descreve como os tipos são declarados, usados e gerenciados no tempo de execução para dar suporte à integração entre linguagens.Describes how types are declared, used, and managed in the runtime in support of cross-language integration.

Consulte tambémSee also

Versões e dependênciasVersions and Dependencies