Esiste un vantaggio in termini di prestazioni nell'utilizzo di oggetti immutabili in un linguaggio di scripting?

7

A quanto ho capito, scrivere i tuoi oggetti in uno stile immutabile può aiutare le prestazioni del tuo programma per le lingue compilate, poiché il compilatore tende comunque a riscrivere il codice in un singolo modulo di assegnazione statica sotto il cofano.

C'è un vantaggio in termini di prestazioni nell'usare oggetti immutabili in un linguaggio interpretato come Python o PHP?

Capisco che ci possano essere benefici di leggibilità o di qualità del codice dall'immutabilità, ma ti sto chiedendo specificatamente delle prestazioni.

    
posta Kevin Burke 14.03.2012 - 16:52
fonte

4 risposte

6

In CPython, l'allocazione di tuple (liste sostanzialmente immutabili) può essere leggermente più veloce di un'allocazione del tipo mutabile equivalente con gli stessi elementi. Ricordo vagamente voci simili su insiemi immutabili, ma timeit non lo ha confermato. Le tuple possono anche essere più piccole delle liste, da pochi byte al 50% (se si colpisce un punto in cui l'elenco deve ridimensionarsi e raddoppiato la sua capacità di accelerare la crescita futura). Inoltre, tuple e set sono - in alcuni contesti - soggetti a ottimizzazioni dello spioncino che consentono di creare l'oggetto una volta e riutilizzarlo, invece di ricostruirlo ogni volta.

Ma sono soprattutto noccioline. Non è per questo che usiamo questi tipi, almeno di solito. Se mai, queste differenze vengono invocate solo quando si sta seriamente ottimizzando. Non è un aspetto che considero di solito quando decido per entrambi, soprattutto perché ci sono altri benefici, per non parlare dell'enorme impatto semantico.

    
risposta data 14.03.2012 - 17:09
fonte
3

Il vantaggio principale delle variabili immutabili deriva dal momento in cui viene distribuito e i dati si diffondono su più computer. I dati mutabili necessitano di meccanismi elaborati per garantire che, quando i dati vengono aggiornati, vengano aggiornate anche tutte le copie in varie cache, che oltre a essere elaborate richiedono anche tempo .

I dati immutabili possono essere copiati e memorizzati nella cache quanto necessario. Hai la certezza che i dati non cambieranno.

Non so se Jython supporta il multi-threading, se così fosse, sarebbe un vantaggio su applicazioni multi-core e multi-core.

    
risposta data 14.03.2012 - 20:43
fonte
0

In Python non c'è nulla nella lingua stessa per contrassegnare un oggetto come immutabile, quindi non è possibile fornire suggerimenti all'interprete per l'ottimizzazione.

Se il processo è thread e l'oggetto ha proprietà "protette", i programmatori non devono preoccuparsi della sincronizzazione quando usano quell'oggetto, quindi potrebbe esserci un miglioramento delle prestazioni.

    
risposta data 14.03.2012 - 17:09
fonte
0

in Python e PHP ci sono pochissimi benefici, soprattutto perché le strutture immutabili sono in genere più semplici e più piccole perché non devono supportare alcuna funzione di modifica.

OTOH, le moderne JIT (come LuaJIT o qualsiasi JavaScript moderno) potrebbero sfruttare qualsiasi opportunità per limitare le possibilità e produrre un codice più stretto (simile a quello i compilatori lo fanno, ma in modo molto più aggressivo).

    
risposta data 15.03.2012 - 02:27
fonte

Leggi altre domande sui tag