Qual è il modo canonico di creare un "const array" con accesso casuale in linguaggio Elixir? (Per esempio quello utilizzato nei calcoli CRC, o AES s-box)Qual è il modo consigliato per rendere equivalente a "const array" in Elixir?
Da Erlang sfondo assumo, che "matrice" si dovrebbe essere un tupla, l'accesso tramite elem/2
/element/2
sembra essere O (1) (funzione BIF_RETTYPE element_2(BIF_ALIST_2)
in erts/emulator/beam/bif.c
).
Ma per quanto riguarda lo spazio di archiviazione, poiché Erlang/Elixir non ha globali? Il mio naso dice che @module_attribute
sarebbe il posto, ma non sono abbastanza sicuro di dove e quando gli attributi vengono espansi.
C'è un problema noto di Erlang: quando si usa il modulo -define(LARGE_LIST,[...])
e poi si usa ?LARGE_LIST
nelle funzioni. Il valore viene ricostruito ad ogni chiamata di funzione. La soluzione era di costruirlo una volta all'avvio dell'applicazione e passare a funzioni che lo richiedono come uno dei parametri.
@module_attribute
di Elisir risolve questo problema o viene trattato come espansione macro fantasia? Ho letto documenti ufficiali su module attributes, ma sono ancora confuso.