Questa idea era originale con Roberto Ierusalimschy e il resto del team Lua.Ho sentito Roberto parlarne al workshop del MIT Lightweight Languages nel 2003, e in questo discorso ha discusso del lavoro precedente e ha sostenuto in modo convincente che l'idea era nuova. Non so se altre lingue lo abbiano copiato da allora.
L'Awk originale ha un modello di linguaggio un po 'più ristretta di Lua; un numero o una stringa può essere utilizzato come una chiave in una matrice, ma array stessi non sono valori di prima classe: un array deve avere un nome, e una matrice non possono essere utilizzati come chiave nell'array.
Riguardo all'implementazione, ho controllato i sorgenti per l'originale Awk come mantenuto da Brian Kernighan, e l'implementazione di Awk utilizza una tabella hash, non la struttura ibrida di matrice/tabella di Lua. La distinzione è importante perché in Lua, quando una tabella viene utilizzata con chiavi intere consecutive, l'overhead dello spazio è lo stesso di un array C. Questo è non true per Awk originale.
non ho preso la briga di indagare su tutte le implementazioni successive di awk, per esempio, Gnu Awk, mawk, e così via.
fonte
2010-01-26 01:58:19
Forte e Clojure anche trattano mappe come funzioni delle loro chiavi e array come funzioni dei loro indici. Che, dopo tutto, loro * sono *. –
La domanda riguarda l'implementazione, non il modello linguistico. L'awk originale, mantenuto ancora da Brian Kernighan, usa un hash table. –
Hai ragione, ho completamente mancato il bersaglio! Non posso downvotare me stesso, quindi +1 alla tua risposta. –