.NET 6 - Novidades e lançamento da RC2


 Hoje vou apresentar algumas novidades que foram incorporadas ao .NET 6.

Estamos no final de outubro/2021 e a  versão RC2 do .NET 6 acabou de ser liberada. A previsão para lançamento oficial será em novembro e parece que esta mantida.

.NET 6 RC2

O .NET 6 Release Candidate 2 (RC2) já está disponível, e está muito próximo da compilação final do .NET 6, que esta previsto para ser lançado em novembro deste ano a tempo do .NET Conf 2021.

É também uma versão “go live”, então você pode usá-lo em Produção. O .NET 6 RC2 contém principalmente melhorias de qualidade e correções de bugs, embora também inclua alguns novos recursos.

Aqui estão as novidades nesta versão prévia:

Para começar a usar o ASP.NET Core no .NET 6 RC2, instale o .NET 6 SDK.

Se você estiver no Windows usando o Visual Studio, instale a visualização mais recente do Visual Studio 2022, que inclui .NET 6 RC2, já os usuários de Mac devem instalar a versão mais recente do Visual Studio para Mac 2022.

Como atualizar um projeto existente ?

Para atualizar um aplicativo ASP.NET Core existente do .NET 6 Preview RC1 para o .NET 6 RC2 faça o seguinte:

Veja a lista completa de alterações importantes no ASP.NET Core para .NET 6.

Assim a grande parte dos recursos já implementados não devem mudar e a seguir veremos alguns deste recursos.

1- PGO - Profile-guided optimization (Otimização guiada ao Perfil)

A otimização guiada por perfil (PGO) é um dos recursos mais importantes para a grande maioria das plataformas de desenvolvimento que existem hoje. Essa novidade se baseia no pressuposto de que o código executado no início é (frequentemente) uniforme, o que pode levar a um desempenho muito melhor se for explorado.

O número de possibilidades de PGO é enorme, as mais importantes das quais são:

Essa reconstrução se deu porque o PGO foi usado na plataforma .NET por 20 anos e, desde o início, esse sistema era muito difícil de usar (além de ser proprietário). Este tem sido o principal motivo pelo qual quase a equipe da Microsoft não o usou, apesar do grande benefício que gerou. (Esta mudança foi iniciada principalmente pela nova tecnologia Crossgen2).

Os principais motivos para habilitar o PGO são:

  1. A simples integração dos dados PGO na aplicação e no fluxo de construção da própria biblioteca;
  2. As ferramentas para processar os dados PGO de diferentes formas (transformadas e diferenciadas);
  3. O formato de “texto amigável” para controle de origem dos dados PGO;
  4. Ferramentas de coleta de dados PGO em aplicativos, tanto em produção quanto em ambientes de teste;

Assim o PGO se baseia no pressuposto de que o código executado como parte de uma startup muitas vezes é uniforme e que o desempenho de nível mais alto pode ser entregue aproveitando-o. O PGO pode compilar código de inicialização com maior qualidade, reduzir o tamanho binário e reorganizar binários de aplicativos para que o código usado na inicialização seja co-localizado perto do início do arquivo.

2- PGO - Dynamic (Dinâmico)

A Microsoft descreve o novo recurso PGO Dinâmico como a imagem espelhada do sistema PGO estático descrito no item 1 acima. Onde o PGO estático se integra ao Crossgen2, mas, neste caso, o PGO dinâmico se integra ao RyuJIT.

Ao contrário do PGO estático (que requer treinamento separado e uso de ferramentas especiais), o PGO Dinâmico é automático. Basta usar o aplicativo em execução para coletar os dados necessários. Outra diferença é que, enquanto os dados do PGO estático são armazenados, os dados do PGO dinâmico são perdidos no final da execução do aplicativo (a Microsoft compara o PGO dinâmico com um rastreamento JIT).

Os principais utilitários do Dynamic PGO são:

3- Crossgen2

O Crossgen2 é um grande passo para a construção inicial da plataforma, e, o recurso mais importante é que o objetivo do Crossgen2 é ser um compilador autônomo.

Para entender isso, vamos começar com o Crossgen1, que foi simplesmente uma compilação separada do runtime com apenas os componentes necessários para permitir a geração de código. Essa abordagem que foi dada na época gerou muitos problemas.

Hoje, o Crossgen gera código R2R(ReadyToRun) para todos os métodos em um assembly (isso inclui o SDK e o tempo de execução). O problema com isso é que é um desperdício, já que provavelmente mais da metade deles seria melhor ser deixado em runtime.

Na época do lançamento do .NET Core 3.0 ele foi usado para remover cerca de 10 MB da distribuição de runtime do Linux. Agora a Microsoft tentará identificar muito mais do que 10 MB no .NET 7.

4- Control-flow Enforcement Technology (CET) (Tecnologia de aplicação de fluxo de controle)

Esta tecnologia Intel é um recurso de segurança disponível na maioria dos processadores mais novos, tanto da Intel quanto da AMD. Ela adiciona recursos de hardware que protegem contra os tipos mais comuns de ataques de sequestro de controle de fluxo.

Com as pilhas de sombra CET, o sistema operacional e o processador podem rastrear as chamadas de fluxo de controle e os retornos em um encadeamento na pilha de sombra, além da pilha de dados, e assim ser capaz de detectar alterações não intencionais no fluxo de controle.

A pilha de sombra é protegida de acessos à memória pelo código do aplicativo e ajuda na defesa contra ataques que envolvem programação orientada a retorno (ROP).

5- HTTP/3

Esta é a nova versão do HTTP. Ele traz muitos novos recursos e recursos de desempenho em comparação com as versões anteriores do HTTP usando o novo protocolo de conexão: QUIC.

O QUIC usa UDP e tem TLS integrado, o que permite estabelecer conexões muito mais rápido. Ao contrário do TPC, as conexões QUIC são independentes do endereço IP, isso permite que os clientes móveis se movam entre os dados móveis e as redes Wi-Fi mantendo a mesma conexão lógica e, portanto, possam continuar com downloads demorados.

O .NET 6 não inclui suporte para HTTP/3 para macOS, principalmente devido à falta de uma API TLS compatível com QUIC.

As novidades e recursos do .NET 6 são muitos, muitos deles não foram totalmente explorados e teremos que esperar que a Microsoft os discuta em profundidade em um futuro não muito distante.

Para concluir, com a palavra a Microsoft :

“É inspirador ver os novos recursos do .NET 6 que estabelecerão a base para o que está por vir. Esses são recursos de grande aposta que impulsionarão a plataforma de maneiras óbvias e não óbvias. ”

E estamos conversados...

"Ele (Jesus) não cometeu pecado algum, e nenhum engano foi encontrado em sua boca.
Quando insultado, não revidava; quando sofria, não fazia ameaças, mas entregava-se àquele que julga com justiça."

1 Pedro 2:22,23

Referências:


José Carlos Macoratti