BT

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

| por Jeff Martin Seguir 16 Seguidores , traduzido por Lu Araujo Seguir 1 Seguidores em 19 ago 2015. Tempo estimado de leitura: 2 minutos |

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

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT