2012-04-05 17 views
16

C'è qualche differenza in una struttura dati persistente e immutabile? Wikipedia si riferisce alla struttura dei dati immutabili quando si parla di persistenza, ma ho la sensazione che potrebbe esserci una sottile differenza tra i due.struttura dati persistente vs immutable

risposta

20

Immutabilità è una tecnica di implementazione. Tra le altre cose, fornisce la persistenza , che è un'interfaccia. L'API di persistenza è qualcosa di simile:

  • version update(operation o, version v) esegue un'operazione o sulla versione v, restituendo una nuova versione. Se la struttura dati è immutabile, la nuova versione è una nuova struttura (che può condividere parti immutabili della vecchia struttura). Se la struttura dei dati non è immutabile, la versione restituita potrebbe essere solo un numero di versione. La versione v rimane una versione valida e non dovrebbe essere modificata in alcun modo observe a causa di questo aggiornamento: l'aggiornamento è visibile solo nella versione restituita, non in v.
  • data observe(query q, version v) osserva una struttura dati alla versione v senza cambiarlo o creare una nuova versione.

Per ulteriori informazioni su queste differenze, vedi:

+0

Se si dispone di una mappa della struttura di dati completamente persistente, ed è già stata impostata (1, 1), se si imposta nuovamente (1, 1), si considera una mutazione e si dovrebbe restituire una nuova versione della struttura dati, ev it se nulla è davvero cambiato? – CMCDragonkai

+0

@CMCDragonkai, non penso che ci sia una sola risposta "giusta" a questa domanda. – jbapple

12

Sì, c'è una differenza. Una struttura di dati immutabile non può essere modificata in alcun modo dopo la sua creazione. L'unico modo per modificarlo efficace sarebbe quello di creare una copia mutevole o qualcosa di simile (ad esempio modificando leggermente i parametri che si passano al costruttore di quello nuovo). Una struttura dati persistente, d'altra parte, è mutabile nel senso che l'API esposta sembra consentire modifiche alla struttura dei dati. In verità, tuttavia, qualsiasi modifica manterrà un puntatore alla struttura dati esistente (e quindi a ogni struttura precedente); sembrano solo mutare la struttura dei dati perché l'API esposta restituisce un nuovo puntatore che può includere puntatori a un sottoinsieme della struttura dei dati precedente (negli alberi, ad esempio, punteremo al nodo il cui sottoalbero non è cambiato come risultato di l'operazione).