2009-04-10 14 views
5

Eventuali programmatori di Erlang esperti raccomanderebbero mai association lists su record?È sempre consigliabile utilizzare elenchi di associazioni anziché record?

Un caso potrebbe essere dove due (o più) nodi su macchine diverse stanno scambiando messaggi. Vogliamo essere in grado di aggiornare il software su ciascuna macchina in modo indipendente. Alcuni aggiornamenti possono comportare l'aggiunta di un campo a uno (o più) dei messaggi inviati. Sembra che usare un record perché il messaggio significherebbe che dovresti sempre eseguire l'aggiornamento su entrambe le macchine nella fase di blocco in modo che il campo extra non abbia impedito al ricevitore di ignorare il record. Mentre se si utilizza qualcosa come una lista di associazioni (che ha ancora un'API "record-like"), il ricevitore non ancora aggiornato riceverà comunque il messaggio con successo e semplicemente ignorerà il nuovo campo. Mi rendo conto che questo non è sempre il comportamento desiderato, ma spesso è. Inoltre, supponi che i messaggi siano abbastanza piccoli, quindi il tempo di ricerca non ha importanza.

Supponendo che quanto sopra fa un certo senso, ho le seguenti domande supplementari:

  • Esiste uno standard (o ampiamente usato) libreria per alists? Alcuni semplici googling non hanno rivelato nulla.
  • Esistono altri casi in cui si utilizza un elenco di associazioni (o qualcosa del genere)?

risposta

5

Si sono fondamentalmente tre scelte:

  1. utilizzare i record
  2. liste Usa Association (proplists)
  3. Usa combinazione

Io uso i record in cui la probabilità di cambiamento è molto bassa . In questo modo ottengo il pattern matching e accelero che voglio.

Io uso i proplists in cui ho bisogno di funzionalità come hashtable. Ottengo la flessibilità a scapito della corrispondenza e della velocità del modello.

E a volte uso entrambi. Un record con un campo che è un proplist. In questo modo posso modellare la corrispondenza su una parte di esso e tuttavia avere flessibilità dove ne ho bisogno.

Tutte e tre le scelte hanno diversi compromessi, quindi in pratica devi solo valutare le tue esigenze particolari e fare una scelta. Potrebbero essere necessari alcuni prototipi e giocare per capire quali trade-off hanno senso e quali caratteristiche devi assolutamente avere.

3

Nota che elenca: keysearch/3 è praticamente "assq".

5

Per una piccola quantità di tasti è possibile utilizzare elenchi, ad esempio proplists, per grandi dimensioni è necessario utilizzare dict. In entrambi i casi, il più grande svantaggio è che non è possibile utilizzare lo schema di corrispondenza in modo da utilizzare per i record. C'è anche una penalità di velocità, ma nella maggior parte dei casi è irrilevante.

+0

+1 per il modulo proplists. Per quanto mi riguarda, non ne avevo ancora avuto tanto bisogno, ma suppongo che sia perché cerco di mantenere i miei propli il più piccoli possibile. –

Problemi correlati