Go linguagem de programação versão 1.14

Introduzido lançamento de linguagem de programação Ir 1.14, que está sendo desenvolvido pelo Google com a participação da comunidade como uma solução híbrida que combina o alto desempenho das linguagens compiladas com as vantagens das linguagens de script como facilidade de escrita de código, velocidade de desenvolvimento e proteção contra erros. Código do projeto distribuído por 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 executáveis ​​binários independentes que são executados nativamente sem usar uma máquina virtual (criação de perfil, 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 obter desempenho comparável ao de 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.

O principal inovaçõesintroduzido na versão Go 1.14:

  • O novo sistema de módulos no comando "go" é declarado pronto para uso geral, habilitado por padrão e recomendado para gerenciamento de dependências em vez de GOPATH. O novo sistema de módulos apresenta suporte integrado de versão, recursos de entrega de pacotes e gerenciamento aprimorado de dependências. Com os módulos, os desenvolvedores não estão mais vinculados ao trabalho em uma árvore GOPATH, podem definir explicitamente dependências com versão e criar compilações repetíveis.
  • Adicionado por suporte para incorporação de interfaces com um conjunto de métodos sobrepostos. Os métodos de uma interface integrada agora podem ter os mesmos nomes e assinaturas que os métodos nas interfaces existentes. Os métodos declarados explicitamente permanecem únicos como antes.
  • O desempenho da expressão "defer" foi melhorado, tornando-a quase tão rápida quanto chamar diretamente uma função adiada, permitindo a execução de função adiada em código sensível ao desempenho.
  • A preempção assíncrona de corrotinas (goroutines) é fornecida - loops que não contêm chamadas de função agora podem potencialmente levar a um impasse do agendador ou atrasar o início da coleta de lixo.
  • A eficiência do sistema de alocação de páginas de memória foi melhorada e agora há significativamente menos contenções de bloqueio em configurações com valores GOMAXPROCS grandes. O resultado é uma latência reduzida e um rendimento aumentado, ao mesmo tempo que distribui intensamente grandes blocos de memória.
  • O bloqueio foi otimizado e o número de trocas de contexto foi reduzido ao executar temporizadores internos usados ​​nas funções time.After, time.Tick, net.Conn.SetDeadline.
  • No comando go, o sinalizador “-mod=vendor” é habilitado por padrão se houver um diretório de fornecedores na raiz, destinado a entregar dependências externas vinculadas a um fornecedor específico. Adicionado um sinalizador "-mod = mod" separado para carregar módulos do cache do módulo em vez do diretório "vendor". Se o arquivo go.mod for somente leitura, o sinalizador “-mod=readonly” será definido por padrão se não houver um diretório “fornecedor” principal. Adicionado sinalizador "-modfile=file" para especificar um arquivo go.mod alternativo em vez daquele no diretório raiz do módulo.
  • Adicionada a variável de ambiente GOINSECURE, quando definida, o comando go não requer o uso de HTTPS e ignora a verificação de certificado ao carregar módulos diretamente.
  • O compilador adicionou o sinalizador “-d=checkptr”, habilitado por padrão, para verificar a conformidade do código com as regras para uso seguro de unsafe.Pointer.
  • Um novo pacote está incluído na entrega hash/maphash com funções hash não criptográficas para criar tabelas hash para sequências de bytes ou strings arbitrárias.
  • Adicionado suporte experimental para a plataforma RISC-V de 64 bits no Linux.
  • Adicionado suporte para FreeBSD em sistemas ARM de 64 bits.

Fonte: opennet.ru

Adicionar um comentário