Lançamento da linguagem de programação Go 1.18

É apresentado o lançamento da linguagem de programação Go 1.18, que está sendo desenvolvida pelo Google com a participação da comunidade como uma solução híbrida que combina o alto desempenho das linguagens compiladas com vantagens das linguagens de script como facilidade de escrever código , velocidade de desenvolvimento e proteção contra erros. O código do projeto é distribuído sob a licença BSD.

A sintaxe do Go é baseada em elementos familiares da linguagem C com alguns empréstimos da linguagem Python. A linguagem é bastante concisa, mas o código é fácil de ler e entender. O código Go é compilado em arquivos executáveis ​​​​binários independentes que são executados nativamente sem o uso de uma máquina virtual (criação de perfil, módulos de depuração e outros subsistemas de detecção de problemas em tempo de execução são integrados como componentes de tempo de execução), o que permite desempenho comparável aos programas C.

O projeto é inicialmente desenvolvido visando a programação multithread e a operação eficiente em sistemas multi-core, incluindo o fornecimento de meios em nível de operador para organizar a computação paralela e a interação entre métodos executados em paralelo. A linguagem também fornece proteção integrada contra blocos de memória superalocados e oferece a capacidade de usar um coletor de lixo.

A nova versão adiciona suporte para funções e tipos genéricos (genéricos), com a ajuda dos quais um desenvolvedor pode definir e usar funções projetadas para trabalhar com vários tipos ao mesmo tempo. Também é possível usar interfaces para criar tipos combinados que abrangem vários tipos de dados. O suporte para genéricos é implementado sem quebrar a compatibilidade retroativa com o código existente. // Soma os valores definidos, funciona para os tipos int64 e float64 func SumIntsOrFloats[K comparável, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Outra opção com uma definição de tipo genérica: type Number interface { int64 | float64 } func SumNumbers[K comparável, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Outras melhorias:

  • Utilitários para teste de código difuso são integrados ao kit de ferramentas padrão. Durante o teste de difusão, um fluxo de todas as combinações aleatórias possíveis de dados de entrada é gerado e possíveis falhas durante seu processamento são registradas. Se uma sequência travar ou não corresponder à resposta esperada, é altamente provável que esse comportamento indique um bug ou vulnerabilidade.
  • Adicionado suporte para espaços de trabalho multimodulares, permitindo executar comandos em vários módulos ao mesmo tempo, permitindo construir e executar código simultaneamente em vários módulos.
  • Otimizações significativas de desempenho foram feitas para sistemas baseados em processadores Apple M1, ARM64 e PowerPC64. Habilitou a capacidade de usar registros em vez da pilha para passar argumentos para funções e retornar o resultado. Desenrolamento in-line aprimorado de loops pelo compilador. A verificação de tipo no compilador foi completamente redesenhada. Alguns testes mostram um aumento de 20% no desempenho do código em comparação com a versão anterior, mas a compilação em si leva cerca de 15% mais tempo.
  • Em tempo de execução, aumentou-se a eficiência de retorno da memória liberada ao sistema operacional e melhorou-se o funcionamento do coletor de lixo, cujo comportamento se tornou mais previsível.
  • Novos pacotes net/netip e debug/buildinfo foram adicionados à biblioteca padrão. O suporte para TLS 1.0 e 1.1 está desabilitado por padrão no código do cliente. O módulo crypto/x509 parou de processar certificados assinados usando o hash SHA-1.
  • Os requisitos para o ambiente no Linux foram aumentados, para funcionar agora é necessário ter um kernel Linux de pelo menos versão 2.6.32. Na próxima versão, mudanças semelhantes são esperadas para o FreeBSD (o suporte para o branch FreeBSD 11.x será descontinuado) e pelo menos o FreeBSD 12.2 será necessário para funcionar.

Fonte: opennet.ru

Adicionar um comentário