En y reréfléchissant, j'ai dit une connerie. Unladen Swallow ne présente pas des variables Python en tant que constante à LLVM (ce serait quand même débile), il présente en revanche les variables Python comme pointant toujours vers la même référence.
On peut imaginer que dans la partie hot d'un programme, on s'amuse moins à changer le type des variables ou les faire référer vers d'autres objets.
Dans cet exemple l'objet data_to_process varie mais pointe toujours vers la même liste. LLVM pourra donc optimiser l'indexation des objets dans la liste et l'accès à la longueur.
[^] # Re: Unladen Swallow ?
Posté par Philippe F (site web personnel) . En réponse à la dépêche Publication de Unladen Swallow 2009Q3. Évalué à 2.
On peut imaginer que dans la partie hot d'un programme, on s'amuse moins à changer le type des variables ou les faire référer vers d'autres objets.
Exemple qui marcherait dans Unladen Swallow :
def main_loop() :
....data_to_process[:] = fetch_data()
....while len(data_to_process):
........idx_to_remove = extract_some_data( data_to_process )
........for idx in idx_to_remove :
............del data_to_process[ idx ]
Dans cet exemple l'objet data_to_process varie mais pointe toujours vers la même liste. LLVM pourra donc optimiser l'indexation des objets dans la liste et l'accès à la longueur.