cuántos lugares están optimizados en el código de bytes de Python (versión 2.5)

StackOverflow https://stackoverflow.com/questions/1010914

  •  06-07-2019
  •  | 
  •  

Pregunta

¿Alguien puede decirme cuántos lugares hay optimizados en el código de bytes de Python? Estaba intentando descompilar el código de bytes de Python en estos días, pero descubrí que en la versión 2.5 de Python hay mucha optimización. Por ejemplo: para este código

a,b,c=([],[],[])#build list

el bytecode no optimizado antes de la versión 2.5 es así:

BUILD_LIST_0
BUILD_LIST_0
BUILD_LIST_0
BUILD_LIST_4
UNPACK_LIST_
STORE_NAME 'a'
STORE_NAME 'b'
STORE_NAME 'c'

En la versión 2.5, el bytecode optimizado es así:

BUILD_LIST_0
BUILD_LIST_0
BUILD_LIST_0
ROT_THREE
ROT_TWO
STORE_FAST 'a'
STORE_FAST 'b'
STORE_FAST 'c'

Este es solo un ejemplo, pero hay muchos otros lugares que pueden optimizarse. Entonces, ¿sabe anybode si hay alguna documentación para aclarar estas optimizaciones o decirme de qué manera puedo encontrarlas todas?

¿Fue útil?

Solución

El archivo fuente Python / peephole.c es donde básicamente se realizan todas esas optimizaciones: el enlace que proporcioné es a la versión actual (2.6 o superior), porque tengo problemas para acceder al navegador de origen dinámico aquí , pero una vez que funciona nuevamente, es fácil ver versiones específicas como la que existía para (digamos) 2.5.2 o lo que sea otra versión específica para la que necesita esta información.

Otros consejos

No creo que haya ninguna documentación per se, pero está el código C para el intérprete de Python. Puede encontrar varias versiones diferentes de ella aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top