L'array Perl è un tipo di dati astratto. Qual è il meccanismo interno per l'array Perl? È implementato con array dinamico o elenco collegato? Dato che gli elementi dell'array hanno un accesso casuale, io presumerei una matrice dinamica di puntatori, oppure i riferimenti agli scalari hanno senso. Tuttavia, con l'operazione di shift e unshift all'inizio dell'array, l'array deve spostare tutti i suoi elementi con queste operazioni? mi sembra inefficiente. Qualche pensiero?Come vengono implementati gli array in Perl?
risposta
Date un'occhiata a questo: http://www.perlmonks.org/?node_id=17890
(preso da lì :)
Perl implementa liste con un array e primi/ultimi offset elemento. L'array viene allocato più grande del necessario con gli offset che puntano originariamente nel mezzo dell'array, quindi c'è spazio per crescere in entrambe le direzioni (unshifts e push/insert) prima che sia necessaria una ridistribuzione dell'array sottostante. La conseguenza di questa implementazione è che tutti gli operatori di primitive list di perl (inserimento, recupero, determinazione della dimensione dell'array, push, pop, shift, unshift, ecc.) Funzionano nel tempo O (1).
I tipi sono documentati nello perlguts (vedere Perl Internals per la documentazione correlata) - e sono AV per gli array e HV per gli hash.
Grazie per il collegamento. Risponde alla mia domanda. –