Как массивы реализованы в Perl?
-
01-10-2019 - |
Вопрос
Массив Perl - это абстрактный тип данных. Какой внутренний механизм для массива Perl? Это реализовано с динамическим массивом или связанным списком? Поскольку элементы массива имеют произвольный доступ, я бы предположил динамический массив указателей или ссылки на скаляры имеют смысл. Тем не менее, с сдвигом и ненезименной операцией во главе массива, ли массив должен перемещать все свои элементы с этими операциями? Звучит неэффективно для меня. Любая мысль?
Решение
Посмотри на это: http://www.perlmonks.org/?node_id=17890.
(взято оттуда :)
Perl реализует списки списков с массивом и первым / последним элементом смещений. Массив выделяется больше, чем необходимо с помощью смещений, изначально указывающих в середине массива, поэтому есть место для расти в обоих направлениях (не имеет возможности, и толкает / вставки / вставки) до того, как необходимо переопределение базового массива. Следствием этой реализации является то, что все первобытные операторы списка Perl (вставка, выборка, определение размера массива, толчок, поп, сдвиг, без мошенничество и т. Д.) Выполните время O (1).
Другие советы
Типы документированы в перлгуты (видеть Перл внутренние Для соответствующей документации) - и являются AV для массивов и HV для хэшей.