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

Conheça as principais novidades do PHP 7.4 & 8.0

Conheça as principais novidades do PHP 7.4 & 8.0

Apresentação realizada em Março de 2021, em evento interno da IXCSoft, Chapecó - SC, Brasil.

Marcos Marcolin

March 02, 2021
Tweet

More Decks by Marcos Marcolin

Other Decks in Programming

Transcript

  1. Releases • Versões: ◦ 3.0 -> Jul, 1998 / Oct,

    2000; ◦ 4.0 -> May, 2000 / Aug, 2008; ◦ 5.0 -> Jul, 2004 / Jan, 2019; ◦ 7.0 -> Dec, 2015 / Dec 2018; ◦ 7.3 -> Dec, 2018 / Dec 2021; ◦ 7.4 -> Nov, 2019 / Nov 2022; ◦ 8.0 -> Nov, 2020 / Nov 2023.
  2. PHP 7.4 • Preloading; • Typed properties; • Arrow functions;

    • Unpacking Inside Arrays; • Null Coalesce Assignment Operator; • Numeric literal separator; • Deprecated Features; • https://www.php.net/releases/7_4_0.php Principais novidades
  3. Preloading • Melhorar a performance; • Não suportado em Windows;

    • A configuração envolve a ativação do opcache; • Arquivo executado somente na inicialização do servidor; • Ex: carregamento de frameworks e/ou hot classes.
  4. Typed Properties • bool; • int; • float; • string;

    • array; • object; • ?(nullable) • class & interfaces
  5. Arrow Functions • Mais conhecido no Javascript; • Tem como

    objetivo deixar o código mais enxuto; • Uso da palavra fn;
  6. Numeric literal separator • Separação visual de valores; • Utilização

    do underscore “_” • Float, decimal, hexadecimal, binário, etc...
  7. Deprecated Features • array_key_exists() em objetos; • get_magic_quotes_gpc() sempre retornará

    false; • Parâmetros inversos na função implode($glue, $parts);
  8. PHP 8 PHP 8.0 é uma atualização importante da linguagem

    PHP. Ela contém muitos novos recursos e otimizações, incluindo argumentos nomeados, união de tipos, atributos, promoção de propriedade do construtor, expressão match, operador nullsafe, JIT e melhorias no sistema de tipos, tratamento de erros e consistência. Principais novidades
  9. PHP 8 • JIT; • Constructor property promotion; • Union

    types; • Nullsafe operator; • Match expression; • Non-capturing exception catches; • str_contains(), str_starts_with(), str_ends_with(); • Operator @. Principais novidades
  10. JIT (Compilador Just in Time) “O PHP JIT é implementado

    como uma parte quase independente do OPcache. Ele pode ser habilitado/desabilitado em tempo de compilação e em tempo de execução do PHP. Quando habilitado, o código nativo dos arquivos PHP é armazenado em uma região adicional da memória compartilhada do OPcache e op_array→opcodes[]. Manipulador(es) mantém apontadores para os pontos de entrada do código JIT-ed.”
  11. JIT vs OPcache Então, como chegamos ao JIT e qual

    é a diferença entre JIT vs OPcache?
  12. JIT vs OPcache Então, como chegamos ao JIT e qual

    é a diferença entre JIT vs OPcache? Para entender melhor o que é o JIT para PHP, vamos dar uma rápida olhada em como o PHP executa desde o código fonte até o resultado final.
  13. AST(Abstract Syntax Tree) while b ≠ 0 if a >

    b a := a − b else b := b − a return a
  14. JIT vs OPcache A Extensão OPcache PHP é uma linguagem

    interpretada. Isto significa que, quando um script PHP é executado, o intérprete analisa, compila e executa o código uma e outra vez a cada solicitação. Isto pode resultar em desperdício de recursos da CPU e tempo adicional.
  15. JIT vs OPcache A partir do PHP 5.5, a extensão

    Zend OPcache está disponível por padrão.
  16. E o JIT faz o quê? Mesmo que os opcodes

    estejam na forma de representação intermediária de baixo nível, eles ainda têm que ser compilados em código de máquina. JIT “não introduz nenhuma forma adicional de IR (Representação Intermediária)”, mas utiliza DynASM (Dynamic Assembler for code generation engines) para gerar código nativo diretamente do byte-código PHP.
  17. E o JIT faz o quê? Não tem entendi nada,

    e você? Em resumo, o JIT traduz as partes quentes do código intermediário em código de máquina. Ao contornar a compilação, ele é capaz de trazer melhorias consideráveis na performance e uso de memória.
  18. E o JIT faz o quê? Agora entendeu? • Substituí

    a etapa de execução dentro da ZendVM; • A ZendVM é escrita em C e performa várias operações antes de executar cada OpCode; • É aí que entra o JIT;
  19. E o JIT faz o quê? • Ao invés de

    executar toda essas operações da VM escrita em C ele executa diretamente no processador. Isso dá um ganho de desempenho muito grande.
  20. E o JIT faz o quê? • Ao invés de

    executar toda essas operações da VM escrita em C ele executa diretamente no processador. Isso dá um ganho de desempenho muito grande. • O JIT é implementado dentro da extensão OpCache, então a mesma precisa estar instalada para o JIT funcionar.
  21. JIT

  22. JIT Onde terá mais ganho de performance? • Em funções

    que fazem uso massivo de funções lógicas e matemáticas trazem a possibilidade de usar o PHP em ambiente que antes não era cogitável, como por exemplo inteligência artificial, machine learning, tratamento de mídia, etc.
  23. JIT Onde terá mais ganho de performance? • Em funções

    que fazem uso massivo de funções lógicas e matemáticas trazem a possibilidade de usar o PHP em ambiente que antes não era cogitável, como por exemplo inteligência artificial, machine learning, tratamento de mídia, etc. • Para operações de entrada, saída e leitura de arquivos o ganho não parece ser muito expressivo.
  24. Referências • https://www.php.net/releases/7_4_0.php • https://www.php.net/releases/8.0/en.php • https://www.amitmerchant.com • http://www.phpbenchmarks.com/en/benchmark/php/7.4 •

    http://www.phpbenchmarks.com/en/benchmark/php/8.0 • https://kinsta.com/pt/blog/php-8/ • https://medium.com/i9xp-comunidade/just-in-time-compiler-no-php-8-5ea121f56afb • https://thephp.website/br/edicao/php-8-jit/ • https://www.programmersought.com/article/19391483342/ • https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y