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
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'operazioneo
sulla versionev
, 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 versionev
rimane una versione valida e non dovrebbe essere modificata in alcun modoobserve
a causa di questo aggiornamento: l'aggiornamento è visibile solo nella versione restituita, non inv
.data observe(query q, version v)
osserva una struttura dati alla versionev
senza cambiarlo o creare una nuova versione.
Per ulteriori informazioni su queste differenze, vedi:
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).
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
@CMCDragonkai, non penso che ci sia una sola risposta "giusta" a questa domanda. – jbapple