.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:
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:
C# - Lendo e escrevendo em arquivos textos e binários
C# - Entendo o I/O na plataforma .NET
C# - Fluxo assíncrono ou async streams
C#- Apresentando Streams assíncronos