Size: a a a

2020 March 20

OP

Oleg Pronin in Modern::Perl
Andrey Konovalov
$class->SUPER::new(@args) означает копирование из стека в стек
Не означает. Он не инкрементит счетчик ссылок и не декрементит для каждого элемента. Плюс он синглтоновый, то есть ему не надо расти каждый раз. И он не копирует вообще ничего. Все элементы там альясятся
источник

OP

Oleg Pronin in Modern::Perl
Anton Petrusevich
я поясню. в перле массивы являются настоящими массивами, поэтому, операция shift должна все элементы в памяти действительно сдвигать со своих мест. но для массива @_ это слишком частая операция, и мои бенчмарки говорят, что начиная с какого-то перла шифт там не вызывает проблем быстродействия.
Shift не сдвигает элементы ни на каком массиве, даже на обычном. У перлового массива есть указатель на начало, и он просто сдвигается.
источник

AP

Anton Petrusevich in Modern::Perl
Oleg Pronin
Shift не сдвигает элементы ни на каком массиве, даже на обычном. У перлового массива есть указатель на начало, и он просто сдвигается.
Хм. Лет около 12 назад у меня именно это оказалось узким местом
источник

OP

Oleg Pronin in Modern::Perl
Andrey Konovalov
&{$_[0]->can('SUPER::new')}, точно! Я использовал это раньше, но забыл
Ты это зря делаешь. Я уверен ты не получил прирост. И ухудшил читаемость. А скорее всего ты еще все замедлил. Goto sub тормозной. Копирование в @_ почтин ничего не стоит
источник

OP

Oleg Pronin in Modern::Perl
Anton Petrusevich
Хм. Лет около 12 назад у меня именно это оказалось узким местом
Незнаю как 12 лет назад но сейчас ты врядли сможешь найти гдето установленный перл который чтото там смещать будет
источник

AP

Anton Petrusevich in Modern::Perl
Поверю на слово
источник

OP

Oleg Pronin in Modern::Perl
Ты можешь легко проверить) возьми какойнить древний перл 5.20 например. создай массив на 100 лямов. А потом бенчмарки shift из него. Будет десятки лямов в секунду. Если бы смещал он бы тебе парочку в секунду бы макс выдал
источник

AP

Anton Petrusevich in Modern::Perl
splice тоже не вырезает, да?
источник

OP

Oleg Pronin in Modern::Perl
Антон сплайс не может не смещать в общем случае
источник

OP

Oleg Pronin in Modern::Perl
Он лишь оптимайзит часные случаи
источник

AP

Anton Petrusevich in Modern::Perl
Я же сказал, что верю ;)
источник

OP

Oleg Pronin in Modern::Perl
Например удаление от самого начала или до самого конца - о(1)
источник

OP

Oleg Pronin in Modern::Perl
Удаление из середины он оптимайзит так: смещает с того края где меньше элементов
источник

AP

Anton Petrusevich in Modern::Perl
Особенно, о древнем 5.20
источник

OP

Oleg Pronin in Modern::Perl
За более ранние не скажу, но уверен на 90% что и 5.12 будет за о(1)
источник

AP

Anton Petrusevich in Modern::Perl
К сожалению, 5.20 это уже современный, бывает.
источник

AP

Anton Petrusevich in Modern::Perl
Ну, мой опыт о шифте из времени 5.6
источник

OP

Oleg Pronin in Modern::Perl
Он работает примерно в 2-3 раза медленнее чем 5.30. Советую обновляться
источник

OP

Oleg Pronin in Modern::Perl
5.20
источник

VG

Vadim Goncharov in Modern::Perl
где-то вообще живут на 5.16 или даже 5.10...
источник