tutorial - elixir(lenguaje de programación)
¿Por qué el comportamiento de Elixir Access es como es? (0)
Soy relativamente nuevo en Elixir.
En versiones recientes de Elixir, Access ya no se implementa como un protocolo, sino como un comportamiento. Por lo que veo, este cambio fue motivado por consideraciones de rendimiento en el modo de desarrollo.
Ahora, mirando la implementación, me pregunto cómo funciona esto internamente y por qué se eligió esta implementación. Como podemos ver here , Access se despacha al módulo de una estructura a través de la clave "__struct__" del mapa subyacente. AFAICS, esto funciona más o menos como el polimorfismo de estilo OOP. Algunas preguntas sobre esto:
- ¿Por qué es esto más rápido?
- ¿Cuáles son los inconvenientes en comparación con los protocolos? Por lo que puedo decir, es menos extensible. ¿Hay otro?
- Hasta ahora solo he visto comportamientos en el contexto de cosas como GenServer, donde el módulo de devolución de llamada se captura en la inicialización y se mantiene en un proceso (al menos supongo que tanto). Aquí, el comportamiento de acceso toma el módulo de devolución de llamada de los datos. ¿Sería posible implementar este comportamiento para algo que no es una estructura?
- ¿Este tipo de despacho es una buena práctica común en Erlang o Elixir cuando uno no está interesado en el beneficio adicional que un protocolo daría?