On 2012-10-10 11:03, Marco Beri wrote:
2012/10/10 Daniele Varrazzo <p...@develer.com>

On 2012-10-10 09:03, Marco De Paoli wrote:

Inoltre può esserti d'aiuto anche un occhiata al pattern Borg di Alex
Martelli


Devo a questo cosiddetto pattern (è un'implementazione) le migliori ore della mia vita buttate in debug. Da non toccare neanche con una pertica.


:-))

Cosa era successo? Più processi attivi? Race condition?

Cosa deve succedere? Quello per cui è progettato: tu hai l'istanza di un oggetto, chiami qualche funzione apparentemente non correlata e alla riga dopo quell'istanza si comporta in maniera inconsistente da due righe prima. Anche un programma single-thread diventa imprevedibile.

È solo una variabile globale glorificata, ma col rischio che nasconde il fatto di esserla. Molto meglio un singleton (il vero pattern di cui il borg è un'implementazione): almeno è esplicito che tutti ci possono mettere le mani e non fai assunzioni fuori luogo che sia una variabile locale.

Per la storia, il programma in questione era Epydoc. Aggiungi il fatto che lo stato di questi oggetti veniva modificato in maniera casuale tra un run e l'altro, a seconda di che ordine venivano letti i sorgenti... È stato probabilmente il bug più ''.join(unsorted('aaacccozz')) che abbia mai trattato. Semplicemente perché un'istanza "ammalata" di borg non si comporta come un regolare oggetto Python: a is b == False, eppure cambi a e ti cambia anche b: un comportamento del tutto prevedibile no?


--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a