2009-04-10 6 views
5

Est-ce que des programmeurs expérimentés d'Erlang pourraient recommander association lists sur les enregistrements? Un cas peut être où deux (ou plusieurs) nœuds sur des machines différentes échangent des messages. Nous voulons être en mesure de mettre à niveau le logiciel sur chaque machine indépendamment. Certaines mises à niveau peuvent impliquer l'ajout d'un champ à un (ou plusieurs) des messages envoyés. Il semble que l'utilisation d'un enregistrement signifie que vous devrez toujours effectuer la mise à niveau sur les deux machines à l'étape de verrouillage afin que le champ supplémentaire n'empêche pas le récepteur d'ignorer l'enregistrement. Alors que si vous utilisiez quelque chose comme une liste d'associations (qui a toujours une API "semblable à un enregistrement"), le récepteur qui n'a pas encore été mis à jour recevrait quand même le message avec succès et ignorerait simplement le nouveau champ. Je me rends compte que ce n'est pas toujours le comportement souhaité, mais souvent il est. En outre, supposons que les messages sont assez petits, donc le temps de recherche n'a pas d'importance.Est-ce une bonne idée d'utiliser des listes d'associations plutôt que des notices?

En supposant que le fait ci-dessus un certain sens, j'ai les questions suivantes:

  • Y at-il une bibliothèque standard (ou largement utilisé) pour alistes? Un peu de googling trivial n'a rien révélé.
  • Y a-t-il d'autres cas où vous utiliseriez une liste d'association (ou quelque chose comme ça)?

Répondre

5

Vous avez essentiellement trois choix:

  1. Utilisez enregistrements
  2. Utilisez des listes d'association (proplists)
  3. utiliser la combinaison

J'utilise les dossiers où la probabilité de le changer est très faible . De cette façon, j'obtiens le motif correspondant et j'accélère ce que je veux. J'utilise des listes de diffusion où j'ai besoin d'une fonctionnalité similaire à la hashtable. J'obtiens de la flexibilité au détriment de l'appariement des motifs et de la vitesse.

Et parfois j'utilise les deux. Un enregistrement avec un champ qui est une proplist. De cette façon, je peux faire correspondre le motif sur une partie de celui-ci tout en ayant la flexibilité là où j'en ai besoin.

Les trois choix ont des compromis différents, donc vous devez simplement évaluer vos besoins particuliers et faire un choix. Il faudra peut-être un peu de prototypage et de jeu pour déterminer quels compromis ont du sens et quelles caractéristiques vous devez absolument avoir.

3

Notez que les listes: keysearch/3 est quasiment "assq".

5

Pour une petite quantité de clés, vous pouvez utiliser des listes aka proplists pour plus grand, vous devez utiliser dict. Dans les deux cas, le plus grand inconvénient est que vous ne pouvez pas utiliser la correspondance de motif de la manière utilisée pour les enregistrements. Il y a aussi une pénalité de vitesse, mais dans la plupart des cas, elle n'est pas pertinente.

+0

+1 pour le module proplists. Pour ce qui est de la dictée, je n'ai pas encore vraiment besoin de ça, mais je suppose que c'est parce que j'essaie de garder mes listes de propriétés aussi petites que possible. –

Questions connexes