« Voltar
em ASP.NET .net .net core

Entendendo o .NET Core - parte 3: o CoreCLR.

(esse post poderia ser muito mais longo, mas prefiro escrever menos do que escrever algo gigantesco e você dormir aí na cadeira. Se quiser saber mais sobre algo em específico, fale nos comentários)

Na parte 1 falei sobre a motivação para a criação do .NET Core e na parte 2 um pouco sobre o CoreFX.

Vamos falar agora de uma outra parte importante do Core: sua CLR.
Pra começo de conversa, ela é open source também e está disponível aqui.

Nesse repositório temos o runtime do .NET Core que inclui: o garbage collector, o compilador JIT, os tipos base do .NET e várias classes de baixo nível. A maior parte do código desse repositório é C++.

Pra que serve uma CLR mesmo?

Resumidamente: uma CLR é uma máquina virtual desenvolvida para suportar várias linguagens de programação e interoperabilidade entre elas.
Quando nós escrevemos código C# ou VB(ou qualquer outra linguagem suportada pela CLR) nós estamos escrevendo código que chamamos de código de alto nível. Você provavelmente já ouviu isso né? Alto nível, baixo nível...mas, o que isso significa exatamente?

Quando estamos programando nas ditas linguagens de alto nível, na maior parte do tempo a nossa preocupação é a lógica de nosso negócio, as regras de nosso sistema. Precisamos nos preocupar em como nosso código aloca e libera memória? Como interagir com bibliotecas de código nativo do sistema operacional? Detalhes de como conversar com o hardware da máquina?
A resposta para essas perguntas é não.
Tudo isso é possível pois estamos programando em cima de uma CLR. O intuito da CLR é fazer com que programar para ela seja fácil. Que foquemos somente no que importa para nós, e não em milhares de detalhes técnicos.

A funcionalidade mais importante da CLR é o Garbage Collector, que nos garante memory safety e type safety.

O Garbage Collector

O Garbage Collector(em português, coletor de lixo) é o termo que usamos para alocação/desalocação automática de memória. Quando estamos em um ambiente garbage-collected, não há necessidade de desalocar manualmente memória.

public void MetodoTeste()  
{
    ClasseA x = new ClasseA();
    //faz algo com a variável x...
}

Quando eu chamar esse método em algum momento de minha aplicação, estarei criando uma instância de ClasseA. Depois que eu terminar de fazer o que tenho que fazer, a execução eventualmente sairá desse método e executará outras coisas do meu programa. A referência que criei para a instância de minha classe e coloquei na variável x não é mais necessária quando esse método não estiver sendo executado.
É aí que entra o garbage collector: ele é o responsável por limpar essa referência da memória. Parece ser algo besta, algo simples e entediante né?
Agora, imagine a quantidade de bugs que já foram gerados até hoje por causa de mal gerenciamento de memória por parte do programador. Imagine a quandidade de linhas de código a menos que você escreve quando não precisa limpar memória. Com isso, o Garbage Collector nos dá o que chamamos de memory safety, segurança ao acessar a memória da aplicação. Ele garante que a memória não utilizada será limpa e que uma referência não seja desalocada prematuramente, deixando ponteiros apontando para o nada.

Quando escrevemos código para a CLR, TODAS as referências são gerenciadas pelo garbage collector. Esse é o código que chamamos de managed code ou, em português, código gerenciado. Porque ele é gerenciado pela CLR.
Às vezes, código gerenciado tem que chamar código não -gerenciado(unmanaged), que é todo o código do sistema operacional. A CLR cuida disso pra gente também.

Sempre que a CLR aloca memória para um objeto que criamos, ela guarda junto com essa alocação informações sobre o tipo desse objeto e que tipos de operações ele suporta. Da mesma forma, a CLR associa aos tipos quais operações eles suportam. Dessa forma, temos o que chamamos de type safety, ou segurança dos tipos.
Com esse recurso, vários bugs que poderiam ocorrer em tempo de execução são prevenidos.

Legal, não é? A CLR faz com que escrever código seja fácil e seguro.

Vou ficando por aqui hoje. Teve algo que citei nesse post que você gostaria de saber mais? Alguma dúvida? Sugestão? Crítica?
Fique a vontade pra dizer nos comentários (:

Já que você leu até aqui, porque não curte minha página no Facebook pra ficar em dia com as minhas postagens e outras novidades legais? O endereço é http://facebook.com/devgabsferreira

comments powered by Disqus