Atualizando registros em Erlang / Elixir

Nem é preciso dizer que as atualizações de código são difíceis – em primeiro lugar, é difícil planejar uma se o seu sistema for bastante complexo.

No entanto, existem alguns pontos problemáticos que, acredito, são desnecessariamente difíceis ou simplesmente não são óbvios.

Um exemplo seriam os registros (Erlang ou Elixir) – eles são muito frequentemente usados ​​para manter o estado do processo, etc. Mas uma vez que você carrega seu novo código, atualizar de um registro anterior se torna uma dor – você precisa ter uma versão anterior do registro definido como um registro com nome diferente, ou confiar em algumas regras menos explícitas … desnecessário dizer, um obstáculo que todos prefeririam não ter.

Eu estava pensando em como me livrar desse problema e, até agora, acho que a única coisa razoavelmente simples que consigo encontrar é incorporar a versão e a estrutura do registro em cada instância do registro e fornecer funcionalidade de conversão entre as versões para qualquer coisa mais complexa do que um simples A -> Um mapeamento.

Eu tenho uma hora livre no meu sábado preguiçoso e resolvi isso: https://github.com/yrashk/exrecord

Certamente, não há ciência de foguetes lá. Mas eu odeio reimplementar estratégias meia-boca apenas para isso. Não seria melhor implementá-lo uma vez e focar em problemas mais difíceis?

Felicidades.