Upgrade to Pro — share decks privately, control downloads, hide ads and more …

O que esperar do Python 3.9 - da PEP à release

O que esperar do Python 3.9 - da PEP à release

Apresentação com algumas das novidades do Python 3.9, cuja release oficial será lançada em outubro de 2020.

TDC São Paulo 2020, Trilha Python.

Felipe Carvalho

August 28, 2020
Tweet

More Decks by Felipe Carvalho

Other Decks in Technology

Transcript

  1. Quem sou eu • Pai de 3 meninas, esposo e

    irmão mais velho • Manauara morando em São Paulo desde março 2020 • Formado em Jornalismo, comecei a programar aos 26 anos na faculdade de Engenharia de Computação • Trabalho como desenvolvedor desde 2013 • Membro do PyNorte, fiz parte da comissão de candidatura de Manaus para sediar a Python Brasil 2021 2022 - será a primeira edição na Região Norte! • Estudo Python, GoLang, Microsserviços e Scrum Felipe Carvalho, 33 anos Desenvolvedor back-end
  2. O que vamos ver hoje? • Python 3.9: overview, release

    e outras datas; • Novo operador para unir dicionários; • Utilização de type hints genéricos; • Novo método para remover prefixos e sufixos de strings; • Ciclo de lançamento anual do Python; • Novo parser do Python;
  3. Python 3.9: overview, release e outras datas • Desenvolvimento durou

    aproximadamente 16 meses; • Começou em junho de 2019; • Traz novas funcionalidades, bug fixes e melhorias; • Versão candidata 1 já está disponível para download; • Versão candidata 2 será publicada dia 14 de setembro; • Release final será em 10 de outubro; • Após o lançamento, microversões com bugfixes serão lançados a cada 2 meses por 1 ano e meio; • Depois do release da versão 3.10, a 3.9 só receberá atualizações de segurança por mais 3 anos e meio - completando 5 anos de suporte;
  4. Novo operador de dicts • Apresentado na PEP 584, de

    março de 2019; • Motivada pelo fato de existirem várias maneiras de mergear dicionários em Python, mas cada uma delas apresenta algumas desvantagens. • Precisa de uma variável temporária, não se tornou popular, não é intuitiva ou é verbosa; • Não há um modo simples de efetuar como em list + list;
  5. Novo operador de dicts • Durante uma nova discussão sobre

    o uso do + para unir dicts, Guido se pronunciou:
  6. Novo operador de dicts Foram definidos dois novos operadores: •

    | (pipe) para unir/mesclar, mantendo o valor do dict à direita (último) para chaves em comum; • Operação não altera os dicts originais; • União entre dicts não é comutativa; • Para criar um novo dict da união, basta guardar em uma nova variável;
  7. Novo operador de dicts Foram definidos dois novos operadores: •

    |= (pipe igual) para atualizar o dict à esquerda (primeiro), mantendo o valor do dict à direita (último) para chaves em comum;
  8. Novos Type Hints genéricos • Apresentado na PEP 585, de

    março de 2019; • Type Hints foram incluídos ao tempo de execução do Python de forma incremental pelas PEPs 484, 526, 544, 560 e 563 - o que levou a existência de coleções duplicadas no módulo typing (como por exemplo o typing.List e o built-in list); • A PEP 585 propõe o suporte a sintaxe genérica de todas as coleções disponíveis no typing;
  9. Novos Type Hints genéricos • Importar esses tipos do módulo

    typing se torna obsoleto a partir do Python 3.9;
  10. Remover prefixos e sufixos • Apresentado na PEP 616, de

    março de 2020; • Traz os métodos removeprefix() e removesufix() para a API do Python; • Pode ser usado com Unicode str, binary bytes, bytearray e collections.UserString. • Existem diversas ideias e implementações de funções desse tipo no Python Ideias - algumas delas sugerem o uso de expressões regulares (o que exige a importação de um módulo e código menos limpo);
  11. Remover prefixos e sufixos • Outro ponto é a ‘confusão’

    com os métodos lstrip() e rstrip(); • Os problemas ocorrem quando os usuários esperam o comportamento de remoção de prefixos e sufixos, mas são surpreendidos com o fato do lstrip e rstrip remover conjunto de caracteres e não substrings;
  12. Remover prefixos e sufixos • A inclusão dos dois métodos

    procuram deixar o código menos frágil, mais performático e mais descritivo/intuitivo;
  13. Ciclo de lançamento • Apresentada na PEP 602, de junho

    de 2019; • Define um calendário de lançamentos para as próximas versões do Python, a partir da 3.9; • Estabelece releases anuais, sempre em outubro; • Entre as vantagens dessa medida, temos: • Fazer as releases menores - e assim reduzir o atrito provocado pelas mudanças; • Trazer novas funcionalidades e bug fixes o quanto antes para os usuários; • Criar um calendário previsível com lançamentos em outubro e a fase beta no final de maio (após os sprints da PyCon US); • Sincronizar o cronograma com distros como o Fedora (que tem auxiliado a encontrar regressões antecipadas);
  14. Ciclo de lançamento • O ciclo anual gerou repercussão entre

    os desenvolvedores do ecossistema Python:
  15. Ciclo de lançamento • O ciclo anual gerou repercussão entre

    os desenvolvedores do ecossistema Python:
  16. Ciclo de lançamento • O ciclo anual gerou repercussão entre

    os desenvolvedores do ecossistema Python:
  17. Ciclo de lançamento • O ciclo anual gerou repercussão entre

    os desenvolvedores do ecossistema Python:
  18. Ciclo de lançamento • Ciclo de desenvolvimento de 17 meses:

    • Cinco primeiros meses se sobrepõem aos estágios de versões beta e candidato da versão Python 3.(X-1).0 - portanto não é versionado; • O sete meses seguintes são destinados às versões alfa onde novas features e bug fixes são incluídos; • Então, três meses para versões beta onde novos bug fixes podem ser incluídos, mas novas funcionalidades não entram; • Os dois últimos meses são para as duas (ou mais) releases candidatas e o release da versão final;
  19. Novo parser do CPython • Apresentado na PEP 617, de

    março de 2020, que tem o Guido van Rossum como um dos autores; • CPython compila o código em Python para bytecode e interpreta o bytecode; • Historicamente, o CPython é o primeiro a implementar as novas funcionalidades e o Python usa CPython como base; • Substituição do parser baseado na gramática LL(1) para um baseado em PEG: • Vai trazer mais flexibilidade ao analisador; • Permite a eliminação de diversos “hacks” para contornar a limitação do LL(1); • Vai reduzir o custo de manutenção relacionadas a algumas áreas;
  20. Novo parser do CPython • Guido lançou o questionamento em

    novembro de 2018, pedindo ideias e sugestões;
  21. Novo parser do CPython • Começaram a apresentar vantagens do

    PEG e a discussão foi ganhando peso lentamente;
  22. Novo parser do CPython • O uso do PEG foi

    bem aceito e o Guido fez uma série de posts sobre a nova gramática;
  23. Novo parser do CPython • O antigo parser ainda ainda

    no Python 3.9 e ele será totalmente retirado com o Python 3.10; • Em testes de performance, o novo parser se mostrou mais rápido, mas consumiu 10% a mais de memória - o que a PEP considera aceitável e diz provavelmente existir meios de reduzir o consumo de memória;
  24. Novo parser do CPython • A flexibilidade do novo parser

    é essencial para que o Python possa receber novas funcionalidades, como...
  25. Referência Bibliográfica O que há de novo no Python 3.9

    [Release] Python 3.9.0b4 is now ready for testing Switch Python’s parsing tech to something more powerful than LL(1) PEG Parsing Series Overview PEP 584 -- Add Union Operators To dict PEP 585 -- Type Hints Generics in Standard Collections PEP 602 -- Annual Release Cycle for Python PEP 616 -- String methods to remove prefixes and suffices PEP 617 -- New PEG parser for CPython