2 pontos por GN⁺ 2023-08-15 | 1 comentários | Compartilhar no WhatsApp
  • Artigo sobre a importância da compatibilidade retroativa na linguagem de programação Go, com foco nos novos recursos do Go 1.21 e no futuro do Go 2
  • O Go 1.21 inclui novos recursos para melhorar a compatibilidade, com o objetivo de manter o Go estável e previsível, permitindo que os desenvolvedores se concentrem no trabalho em vez de nas mudanças da linguagem
  • A equipe do Go mantém o foco em compatibilidade há mais de 10 anos, com a intenção clara de que programas escritos de acordo com a especificação do Go 1 continuem compilando e executando corretamente sem alterações durante toda a vida útil dessa especificação
  • Explica duas abordagens principais para manter a compatibilidade: verificação de API e testes. A verificação de API garante que APIs existentes não sejam removidas nem alteradas de forma a quebrar código existente. Os testes envolvem executar testes existentes contra versões de desenvolvimento do próximo lançamento do Go
  • Apresenta exemplos de problemas sutis de compatibilidade encontrados ao testar o Go internamente no Google, como literais de struct e novos campos, além de precisão de tempo
  • Classifica os problemas de compatibilidade em três categorias: mudanças de saída, mudanças de entrada e mudanças de protocolo
  • O Go 1.21 melhora a compatibilidade retroativa ao expandir e formalizar o uso do GODEBUG. As configurações de GODEBUG são mantidas por pelo menos dois anos e são ajustadas para corresponder à versão do Go listada no arquivo go.mod do pacote principal
  • O artigo termina com uma atualização sobre o Go 2, anunciando que não haverá um Go 2 que quebre programas do Go 1. Em vez disso, a equipe do Go continuará priorizando a compatibilidade, acreditando que essa foi a decisão de design mais importante tomada para o Go 1

1 comentários

 
GN⁺ 2023-08-15
Opinião do Hacker News
  • Este artigo discute a importância da compatibilidade no Go 1.21 e um possível futuro Go 2.
  • O Go 1.21 oferece dois recursos distintos: configurações GODEBUG para cada mudança e métricas para detectar o uso de implementações anteriores, além de uma versão de toolchain por módulo que busca automaticamente toolchains Go antigas e novas.
  • Quando uma versão específica do Go é definida, versões mais novas do Go aplicam automaticamente a configuração relevante de opt-out, para que o novo comportamento não seja aplicado até que seja solicitado.
  • A equipe da linguagem Go está comprometida em manter a compatibilidade retroativa, algo reconhecido por desenvolvedores que mantêm sistemas Go de grande escala.
  • Alguns usuários expressam preocupação de que melhorias importantes no sistema de tipos possam exigir mudanças incompatíveis.
  • Há a sugestão de que o Go não tenha um verdadeiro Go 2, já que mudanças importantes poderiam exigir um fork da linguagem e uma mudança de nome.
  • A estabilidade e previsibilidade do Go, descritas como "entediantes", contrastam com o ecossistema JavaScript fragmentado e em constante mudança.
  • O artigo também menciona uma postagem relacionada sobre "Compatibilidade futura e gerenciamento de Toolchain no Go 1.21".
  • O compromisso com a compatibilidade retroativa no Go é elogiado, e um usuário compartilha como mudar código de Python para Go ajudou a escalar sua extensão.
  • As técnicas usadas pelo Go para garantir compatibilidade são admiradas, e considera-se seu uso no design de outras linguagens.