Una de las características más interesantes de Python 3.9 es una que no notará en su vida diaria de codificación. Un componente fundamental del intérprete de Python es el analizador o Parser. En la última versión, el analizador se ha vuelto a implementar.

Desde sus inicios, Python ha usado un analizador LL(1) básico para analizar el código fuente en árboles de análisis. Puede pensar en un analizador LL(1) como uno que lee un carácter a la vez y descubre cómo interpretar el código fuente sin retroceder.

Una ventaja de usar un analizador simple es que es bastante sencillo de implementar y razonar. Una desventaja es que hay casos difíciles que debe sortear con trucos especiales.

En una serie de publicaciones en el blog, Guido van Rossum, el creador de Python, investigó los analizadores sintácticos PEG(análisis de gramática de expresiones) . Los analizadores PEG son más potentes que los analizadores LL(1) y evitan la necesidad de hacks especiales. Como resultado de la investigación de Guido, se implementó un analizador PEG en Python 3.9. Consulte PEP 617 para obtener más detalles.

El objetivo es que el nuevo analizador PEG produzca el mismo árbol de sintaxis abstracta(AST) que el antiguo analizador LL(1). De hecho, la última versión se envía con ambos analizadores. Si bien el analizador PEG es el predeterminado, puede ejecutar su programa utilizando el analizador anterior utilizando la -X oldparser de la línea de comandos:

Alternativamente, puede establecer la variable de entorno PYTHONOLDPARSER.

El analizador anterior se eliminará en Python 3.10. Esto permitirá nuevas funciones sin las limitaciones de una gramática LL(1). Una de estas características que se está considerando actualmente para su inclusión en Python 3.10 es la coincidencia de patrones estructurales, como se describe en PEP 622.

Tener ambos analizadores disponibles es excelente para validar el nuevo analizador PEG. Puede ejecutar cualquier código en ambos analizadores y compararlo en el nivel AST. Durante las pruebas, se compilaron y compararon toda la biblioteca estándar, así como muchos paquetes populares de terceros.

También puede comparar el rendimiento de los dos analizadores. En general, el analizador sintáctico PEG y LL(1) funcionan de manera similar. En toda la biblioteca estándar, el analizador PEG es un poco más rápido, pero también usa un poco más de memoria. En la práctica, no debería notar ningún cambio en el rendimiento, bueno o malo, al usar el nuevo analizador.


Este articulo se encuentra basado en A more powerful Parser.

Para revisa en mayor detalle el rendimiento de Python en comparación con otros lenguajes, puede consultar a la siguiente página: Why Python is slow?.

Optimización en Python 3.9: Un analizador de Python más potente.
Si te gusto, comparte ...Share on email
Email
Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
Linkedin
Share on google
Google
Etiquetado en:    

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Facebook