BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Dois novos bugs importantes descobertos no Compilador RyuJIT do .NET 4.6

Dois novos bugs importantes descobertos no Compilador RyuJIT do .NET 4.6

Favoritos

Dois novos bugs importantes foram encontrados no compilador RyuJIT do .NET 4.6. O primeiro foi documentado pelo desenvolvedor Andrey Akinshin que disponibilizou um código prova de conceito escrito em C# para explicar o problema. O código de Akinshin foi esclarecido por um comentário no StackOverflow do usuário "BrandonAGr".

O exemplo de Akinshin usa valores booleanos nulos para mostrar como o assembly gerado pelo RyuJIT erra ao gerar código otimizado. O que é estranho é que na primeira execução o exemplo produz resultados incorretos, mas na segunda os resultados aparecem corretos. Akinshin conclui que "... existe um bug complicado na otimização do RyuJIT que depende de várias condições: qualquer mudança no código acaba com a reprodutibilidade."

Felizmente, a correção para esse erro foi submetida pelo desenvolvedor da Microsoft "schellap". De qualquer forma, conforme apontado em notícia anterior, ainda não foram distribuídos binários corrigidos. Usuários estão demonstrando sua frustração e preocupação com o estado atual do RyuJIT. O usuário "EasmoneNerbonne" diz que baseado no bug relatado, "... parece que aguardar um pouco antes de utilizar o RyuJIT é uma estratégia melhor do que apenas desabilitar as chamadas tail". Akinshin concorda e o usuário Daniel Marbach complementa "... deveria haver uma atualização no post da Microsoft a respeito do problema e um anúncio geral dizendo claramente: NÃO USE EM PRODUÇÃO." (Ênfase presente no original)

O segundo bug foi relatado através do GitHub pelo usuário Hyunho Richard Lee que disponibilizou um exemplo de código escrito em F# para demostrar o que deveria ser um programa correto, mas que produz erros quando executado (mais especificamente FatalExecutionEngineError). Lee afirma que instalar o .NET 4.6 quebra programas F# que funcionam corretamente quando executados usando F# 3.1 com .NET 4.5.1 ( ou 4.5 ou 4.5.2)

A explicação de Lee para desenvolvedores F# é resumida a seguir:

Todos os desenvolvedores F# que usam a o método Seq.distinct em uma Seq com KeyValuePair em qualquer lugar do código devem ajustar o ambiente de forma que o código é implantado sem que o .NET 4.6 esteja instalado ou imediatamente ajustar a plataforma alvo de seus projetos e fazerem novamente a implantação.

O desenvolvedor "sivarv" da Microsoft informou que uma correção foi submetida, mas conforme informado anteriormente, ainda não foi distribuído um binário.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT