Hmmm, tout depend de ce que tu appelle du sucre syntaxique.
L'utilisatation du "with" avec les Lock(), c'est exactement ce que fait Java avec ces synchronize. Le but en java était de s'assurer qu'un verrou était toujours relaché, ce qui permettait d'éviter les deadlocks pour cause de relachement non effectué.
Exemple (sans with) :
Maintenant, si l'utilisateur entre une chaine de caractère "toto" dans data, une exception sera générée, et le verrou jamais libéré. Dommage, non. Il faudrait faire des try et des except, relacher le verrou pour ensuite relancer l'exception, etc. Pas tres pratique, non ?
Avec with :
def updateSthg(data):
lock = myLockingMechanism()
with lock:
myData = int(data)
Là, la personne qui a programmé le "myLockingMechanism" est *garantie* et c'est là que c'est important, que quelque soit le flux d'exécution, elle aura la main pour libérer le verrou.
Peu importe de savoir ce qui se passe en interne. Le but est que l'écriture de code haut niveau soit simple ET robuste, en s'appuyant sur des bibliothèques qui seront elles plus complexes, mais suffisament outillées pour rester compréhensible sans utiliser de bidouilles non standardisées.
Alors oui, il y a de la magie, mais dans toute couche d'abstraction, il y a de la magie. Si on utilise python, c'est parce que c'est simple. Il ne faut pas se leurrer, l'interpréteur cpython n'est sans doute pas du même niveau.
[^] # Re: Quelques commentaires
Posté par Emmanuel C . En réponse au journal Python 2.5 beta 2. Évalué à 4.