Artigo .net Magazine 54 - CLR
Conheça a arquitetura interna da plataforma .NET
· CLR;
· CIL;
· Managed Modules;
· Assemblies.
· Conhecer como funciona o .NET internamente, fazendo uso do CLR, CIL, metadados, Assemblies, código gerenciado etc.;
· Todas as aplicações .NET trabalham desta forma, e por isso é importante conhecer como as coisas funcionam nos "bastidores".
Neste artigo veremos como o .NET funciona internamente, conhecendo o conceito de máquina virtual (CLR), linguagem intermediária (CIL) e também Assemblies.
Conceitos, Estruturas e Técnicas. Uma plataforma tão interessante e avançada como a plataforma .NET é repleta destes aspectos que formam uma base sólida para suportar o desenvolvimento de aplicações para os mais variados cenários. Neste artigo vamos explorar os conceitos, estruturas e técnicas que fazem parte da plataforma .NET. Vamos conversar sobre componentes tecnológicos que são conhecidos coletivamente como Core Components, incluindo:
· CLR – Common Language Runtime;
· Managed Module.
O artigo descreve como estes conceitos são utilizados na plataforma .NET para armazenar e distribuir os componentes que compõem os softwares e recursos necessários aos mesmos. Os exemplos de código/projetos citados neste texto foram desenvolvidos e estão disponíveis para as seguintes tecnologias/ferramentas:
· .NET Framework Version: v3.5
· C# Compiler Version : 3.5.21022.8
· C++/CLI Compiler Version : 15.00.21022.08 for 80x86
· ILAsm
· ILDasm
Apesar da sigla, e o texto que ela representa serem simples para nos recordarmos, o CLR – Common Language Runtime, é um componente muito avançado e fundamental. Ele é o ambiente de execução – Runtime – no qual toda aplicação feita para plataforma .NET é executada. O CLR – Common Language Runtime fornece uma série de serviços para que sua aplicação consiga ser executada adequadamente nos sistemas operacionais/plataformas de hardware para o qual a plataforma .NET tenha uma versão disponível. Um termo que nós sempre vamos ler ou ouvir quando estamos tratando do CLR - Common Language Runtime, é o termo Managed. Uma aplicação para a plataforma .NET é chamada de Managed Application. Em uma tradução livre, podemos dizer que é uma "Aplicação Gerenciada". Mas o que isto quer dizer?
Vamos lembrar o que não é uma "Aplicação Gerenciada". Quando você tem um compilador que gera código nativo, Assembly, este código gerado é específico para um processador ou família de processadores, como Intel x86, por exemplo. Se você está utilizando um compilador, como C/C++(Visual C++ ou Borland C++ Builder) ou Object Pascal(Borland Delphi), o resultado da compilação do código-fonte, no caso da plataforma Windows de sistemas operacionais, é um arquivo binário/executável, que é reconhecido pelas extensões EXE e DLL. As instruções que são geradas pelo compilador e são gravadas neste arquivo binário/executável não são "controladas" pelo sistema operacional durante a execução. Isto significa que o sistema operacional não gerencia a execução deste arquivo binário/executável. O fato de não gerenciar a execução quer dizer que seu binário/executável pode executar praticamente qualquer operação. É claro que recentemente temos tido avanços nos sistemas operacionais mais populares para reduzir certos problemas. Mas hoje, esta responsabilidade em gerar código com mais qualidade e com menos possibilidades de erros está, além é claro do profissional que escreve o código, com os compiladores/linkers. Em muitos casos, os compiladores reconhecem padrões de código e/ou estruturas e inserem códigos para reduzir ou até mesmo evitar determinadas situações. Um erro muito comum em código é tentar acessar uma posição de memória que não está disponível ou não foi inicializada adequadamente para o propósito esperado pelo aplicativo. Neste caso, muitos compiladores inserem códigos, que realizam testes para reduzir estas situações ou até mesmo evitar que o aplicativo continue sua execução, caso esta situação seja encontrada. Como podemos visualizar, é um grande problema para aplicativos/sistemas avançados garantirem a qualidade de código e uma execução mais estável e previsível.