quinta-feira, 3 de abril de 2014

.NET Native

Recentemente tenho conversado com alguns colegas sobre as impressões que tenho tido ao ler Advanced .NET Debugging, livro que recomendo a todo desenvolvedor .NET que queira realmente entender como o framework funciona (mas ressalto que há uma nova edição no forno, do mesmo autor mas com outro nome, .NET Internals and Advanced Debugging Techniques).

Resumidamente, após entender como .NET funciona de verdade, analisando suas entranhas, percebemos que trata-se basicamente de um Assembly Loader, um JIT Compiler e um Garbage Collector (claro que estou sendo bastante simplista, mas é basicamente isso). Após carregados e JITados os programas .NET se tornam programas muito semelhantes a programas nativos, contando no entanto com o Garbage Collector para gerenciar a memória utilizada pela aplicação. Ainda assim, tudo está disponível para inspeção usando as mesmas ferramenta de debug nativo do Windows SDK, tanto que a passagem de objetos de e para aplicações nativas em tempo de execução é feita de modo bem direto, embora perca-se com isso a conveniência e segurança do Garbage Collector.

Uma vez JITadas, as aplicações .NET tornam-se código nativo, otimizado para o computador em que serão executadas, por isso a MSIL é distribuída nos assemblies ao invés de código nativo. No entanto, é possível gerar imagens nativas, pré-JITadas, dos assemblies e distribuí-las já prontas para uso, através da ferramenta NGen, já existente desde as primeiras versões do .NET, eliminando a etapa de compilação no momento do carregamento desses assemblies.

Essa contextualização é necessária para entender a estratégia .NET Native, anunciada em 02 de Abril de 2014. Tal estratégia consiste no uso de uma ferramenta que, resumidamente, irá pré-JITar as aplicações enviadas para distribuição pela Windows Store para todas as plataformas (modelos específicos de tablets, celulares e PCs) antes que seja feita distribuição para as máquinas clientes. Com isso, espera-se que tais aplicações tenham um carregamento 60% mais rápido, além de serem mais eficientes no uso de memória. Além da pré-compilação, também foram feitas algumas alterações na CLR para otimizar a execução de aplicações .NET Native. Bastante interessante, principalmente sabendo-se que o objetivo é estender de alguma forma esse benefício a demais aplicações .NET, não ficando restrito a aplicações da Windows Store.

Veja mais neste link.

4 comentários: