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

Após um ano e meio de desenvolvimento apresentado lançamento significativo da linguagem de programação Python 3.8. Atualizações corretivas para a ramificação Python 3.8 estão programados serão lançadas ao longo de 18 meses. Vulnerabilidades críticas serão corrigidas por 5 anos até outubro de 2024. Atualizações corretivas para a ramificação 3.8 serão lançadas a cada dois meses, e a primeira atualização corretiva Python 3.8.1 está prevista para dezembro.

Entre as adições novidades:

  • Suporte operações de atribuição dentro de expressões complexas. Com o novo operador ‘:=’ agora é possível realizar operações de atribuição de valores dentro de outras expressões, por exemplo, para evitar chamadas duplas de funções em operadores condicionais e na definição de loops:

    if (n := len(a)) > 10:
    …

    while (block := f.read(256)) != »:
    …

  • Suporte nova sintaxe para definição de argumentos de função. Ao listar argumentos durante a definição da função, agora é possível indicar o sinal ‘/’, que separa os argumentos cujos valores podem ser atribuídos apenas com base na ordem da lista de valores durante a chamada da função, dos argumentos que permitem atribuição em qualquer ordem (sintaxe ‘variável=valor’). Do ponto de vista prático, essa nova possibilidade permite que funções em Python emulem completamente o comportamento de funções existentes em C, além de evitar amarras a nomes específicos, por exemplo, se o nome do parâmetro for planejado para ser alterado no futuro.

    O sinal ‘/’ complementa o sinal ‘*’ previamente adicionado, separando variáveis que só podem ser atribuídas na forma ‘variável=valor’. Por exemplo, em uma função ‘def f(a, b, /, c, d, *, e, f):’ as variáveis ‘a’ e ‘b’ podem ser atribuídas apenas na ordem da lista de valores,
    as variáveis ‘e’ e ‘f’ apenas por atribuição ‘variável=valor’, enquanto as variáveis ‘c’ e ‘d’ podem ser atribuídas de qualquer uma das formas mencionadas:

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

  • Adicionado nova API C
    para configurar os parâmetros de inicialização do Python, permitindo o controle total sobre toda a configuração e oferecendo recursos avançados de manipulação de erros. A API proposta simplifica a incorporação da funcionalidade do interpretador Python em outros aplicativos em C;
  • o operador de sequência opcional novo protocolo Vectorcall para acesso mais rápido a objetos escritos em C. No CPython 3.8, o acesso ao Vectorcall ainda está restrito ao uso interno, com a transição para uma API publicamente acessível prevista para o CPython 3.9.
  • Adicionados Chamadas de Runtime Audit Hooks, que fornecem a aplicativos e frameworks em Python acesso a informações de baixo nível sobre a execução do script para realizar auditoria das ações executadas (por exemplo, é possível rastrear importações de módulos, aberturas de arquivos, uso de rastreamento, acessos a sockets de rede, execução de código por meio de exec, eval e run_mod);
  • No módulo pickle foi garantido suporte ao protocolo Pickle 5, utilizado para serialização e desserialização de objetos. O Pickle permite otimizar a transferência de grandes volumes de dados entre processos Python em configurações multi-core e multi-node, reduzindo o número de operações de cópia de memória e aplicando técnicas adicionais de otimização, como a utilização de algoritmos de compressão específicos para determinados dados. A quinta versão do protocolo é notável pela adição do modo de transmissão fora de banda (out-of-band), no qual os dados podem ser transmitidos separadamente do fluxo principal do pickle.
  • Por padrão, a quarta versão do protocolo Pickle está ativada, que em comparação com a terceira versão, anteriormente proposta como padrão, permite obter melhor desempenho e redução no tamanho dos dados transmitidos;
  • No módulo typing foram apresentadas novas funcionalidades:
    • Classe TypedDict para arrays associativos, nos quais as informações de tipo para os dados relacionados às chaves são explicitamente definidas ("TypedDict('Point2D', x=int, y=int, label=str)").
    • Tipo Literal, que permite restringir um parâmetro ou valor de retorno a vários valores predefinidos ("Literal['connected', 'disconnected']").
    • A construção "Final", que possibilita definir 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 designar um cache para arquivos compilados com bytecode, armazenados em uma árvore de sistema de arquivos separada dos diretórios de código. O caminho para salvar arquivos de bytecode é definido pela variável PYTHONPYCACHEPREFIX ou pela opção "-X pycache_prefix";
  • Implementado capacidade de criar versões de depuração do Python que utilizam o mesmo ABI que a versão de lançamento, permitindo que na versão de depuração sejam carregadas extensões escritas em C compiladas para lançamentos estáveis;
  • As f-strings (formatted literals with the prefix 'f') support the '=' operator (for example, 'f'{expr=}''), allowing expressions to be converted to text for easier debugging. For example:

    ››› user = 'eric_idle'
    ››› member_since = date(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    'user='eric_idle' member_since=datetime.date(1975, 7, 31)'

  • The expression 'continue' is allowed within the finally;
  • A new module has been added multiprocessing.shared_memory, allowing the use of shared memory segments in multiprocessing configurations;
  • On the Windows platform, the asyncio implementation has been transitioned to use the ProactorEventLoop;
  • The performance of the LOAD_GLOBAL instruction has increased by about 40% due to the use of a new bytecode caching mechanism.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster