Lançamento da linguagem de programação Python 3.8

Após um ano e meio de desenvolvimento apresentado lançamento de linguagem de programação principal Python 3.8. Atualizações corretivas para o branch Python 3.8 planejado lançamento em 18 meses. Vulnerabilidades críticas serão corrigidas por 5 anos até outubro de 2024. Atualizações corretivas para o branch 3.8 serão lançadas a cada dois meses, com o primeiro lançamento corretivo do Python 3.8.1 agendado para dezembro.

Entre os adicionados inovações:

  • apoio operações de atribuição em expressões complexas. Com o novo operador “:=”, é possível realizar operações de atribuição de valores dentro de outras expressões, por exemplo, para evitar chamadas duplas de função em instruções condicionais e ao definir loops:

    se (n := len(a)) > 10:
    ...

    while (bloco := f.read(256)) != ":
    ...

  • apoio nova sintaxe para especificar argumentos de função. Ao enumerar argumentos durante uma definição de função, agora você pode especificar um "/" para separar argumentos que só podem receber valores com base na ordem em que os valores são enumerados durante a chamada de função, de argumentos que podem ser atribuídos em qualquer ordem (sintaxe variável = valor)). Do lado prático, o novo recurso permite que funções em Python emulem completamente o comportamento de funções existentes em C e também evitem vinculação a nomes específicos, por exemplo, se o nome do parâmetro for planejado para ser alterado no futuro.

    O sinalizador “/” complementa o sinalizador “*” adicionado anteriormente, separando variáveis ​​para as quais apenas uma atribuição na forma “variável=valor” é aplicável. Por exemplo, na função "def f(a, b, /, c, d, *, e, f):" as variáveis ​​"a" e "b" só podem ser atribuídas na ordem em que os valores são listados ,
    variáveis ​​“e” e “f”, somente através da atribuição “variável=valor”, e variáveis ​​“c” e “d” em qualquer uma das seguintes formas:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Adicionado nova API C
    para configurar os parâmetros de inicialização do Python, permitindo controle completo sobre todos configuração e fornecendo recursos avançados de tratamento de erros. A API proposta facilita a incorporação da funcionalidade do interpretador Python em outros aplicativos C;

  • Implementado novo protocolo Vectorcall para acesso mais rápido a objetos escritos em linguagem C. No CPython 3.8, o acesso ao Vectorcall ainda está limitado ao uso interno, a transferência para a categoria de APIs acessíveis ao público está planejada no CPython 3.9;
  • Adicionado chamadas para Runtime Audit Hooks, que fornecem aplicativos e frameworks em Python com acesso a informações de baixo nível sobre o progresso do script para auditar as ações executadas (por exemplo, você pode rastrear a importação de módulos, abrir arquivos, usar um rastreamento, acessando soquetes de rede, executando código através de exec, eval e run_mod);
  • No módulo salmoura fornecido suporte para o protocolo Pickle 5, usado para serializar e desserializar objetos. Pickle permite otimizar a transferência de grandes quantidades de dados entre processos Python em configurações de vários núcleos e vários nós, reduzindo o número de operações de cópia de memória e aplicando técnicas de otimização adicionais, como o uso de algoritmos de compactação específicos de dados. A quinta versão do protocolo é notável pela adição de um modo de transmissão fora de banda, no qual os dados podem ser transmitidos separadamente do fluxo principal de pickle.
  • Por padrão, está ativada a quarta versão do protocolo Pickle, que, em comparação com a terceira versão oferecida anteriormente por padrão, permite maior desempenho e redução no tamanho dos dados transmitidos;
  • No módulo digitando Vários novos recursos são introduzidos:
    • Classe DigitadoDict para matrizes associativas nas quais as informações de tipo são especificadas explicitamente para os dados associados às chaves (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • tipo Literal, que permite limitar um parâmetro ou valor de retorno a alguns valores predefinidos (“Literal['conectado', 'desconectado']”).
    • Construção "final", que permite definir os valores de variáveis, funções, métodos e classes que não podem ser alterados ou reatribuídos ("pi: Final[float] = 3.1415926536").
  • Adicionada a capacidade de atribuir um cache para arquivos compilados com bytecode, salvos em uma árvore FS separada e separados dos diretórios com o código. O caminho para salvar arquivos com bytecode é definido por meio de uma variável PYTHONPYCACHEPREFIX ou a opção "-X pycache_prefix";
  • Implementado a capacidade de criar compilações de depuração do Python que usam uma ABI idêntica ao lançamento, o que permite carregar extensões escritas em linguagem SI, compiladas para versões estáveis, em compilações de depuração;
  • strings f (literais formatados prefixados com 'f') fornecem suporte para o operador = (por exemplo, "f'{expr=}'"), que permite converter uma expressão em texto para facilitar a depuração. Por exemplo:

    ››› usuário = 'eric_idle'
    ››› membro_desde = data(1975, 7, 31)
    ››› f'{usuário=} {membro_desde=}'
    "usuário='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Expressão "continuar» pode ser usado dentro de um bloco finalmente;
  • Novo módulo adicionado multiprocessamento.shared_memory, permitindo o uso de segmentos de memória compartilhada em configurações multiprocessos;
  • Na plataforma Windows, a implementação do asyncio foi movida para usar a classe ProactorEventLoop;
  • O desempenho da instrução LOAD_GLOBAL foi aumentado em aproximadamente 40% devido ao uso de um novo mecanismo de cache de código objeto.

Fonte: opennet.ru

Adicionar um comentário