perl data-structures language-implementation

¿Cómo se implementan matrices en Perl?



data-structures language-implementation (2)

Eche un vistazo a esto: http://www.perlmonks.org/?node_id=17890

(tomado de allí :)

Perl implementa listas con una matriz y compensaciones de primer / último elemento. La matriz se asigna más grande de lo necesario con las compensaciones que apuntan originalmente en el medio de la matriz, por lo que hay espacio para crecer en ambas direcciones (sin desplazar y empujar / insertar) antes de que sea necesaria una reasignación de la matriz subyacente. La consecuencia de esta implementación es que todos los operadores de listas primitivas de perl (inserción, obtención, determinación del tamaño de la matriz, inserción, pop, shift, unshift, etc.) se realizan en tiempo O (1).

La matriz Perl es un tipo de datos abstracto. ¿Cuál es el mecanismo interno de la matriz Perl? ¿Se implementa con matriz dinámica o lista enlazada? Dado que los elementos de la matriz tienen acceso aleatorio, supongo que una matriz dinámica de punteros, o las referencias a los escalares tiene sentido. Sin embargo, con la operación de cambio y cambio en la cabecera de la matriz, ¿la matriz tendría que mover todos sus elementos con estas operaciones? Suena ineficiente para mi. ¿Cualquier pensamiento?


Los tipos están documentados en perlguts (consulte Perl Internals para ver la documentación relacionada) y son AV para arreglos y HV para hashes.