Após um ano e meio de desenvolvimento lançamento significativo da linguagem de programação . Atualizações corretivas para a ramificação Python 3.8 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 :
- 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)) != »:
… - 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) - nova API C
para configurar os parâmetros de inicialização do Python, permitindo o controle total sobre toda a 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; - 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.
- 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 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 foram apresentadas novas funcionalidades:
- Classe 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 , que permite restringir um parâmetro ou valor de retorno a vários valores predefinidos ("Literal['connected', 'disconnected']").
- A construção "", 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 ou pela opção "-X pycache_prefix";
- 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 '' is allowed within the ;
- A new module has been added , allowing the use of shared memory segments in multiprocessing configurations;
- On the Windows platform, the asyncio implementation has been transitioned to use the ;
- 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
