Size: a a a

2021 July 10

DF

Denis F in Modern::Perl
Там не cms, там какой-то генератор статики
источник

n

naim in Modern::Perl
@Pkupt может ты поможешь ?
источник

P

Pavel in Modern::Perl
Софта нет, там же 1 html файл. Я просто в саблайм правлю, но если есть идеи - welcome
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Назрел дурацкий вопрос.

$ perl -MTime::HiRes=time -E '$st=time; @x=(0); @y=(1..1e8); say time()-$st; $st=time(); push @x,@y; say time()-$st;'

1.08853983879089
1.83878087997437


На инициализацию массива ушла 1 сек, на то, что бы затолкать его содержимое в другой массив — почти 2 сек, что как бы намекает, что push итеративен.
А есть какой-нибудь хитрый способ конкатенации одного массива к другому без итерирования? То есть мне надо, чтобы в @x оказалось содержимое (@x, @y), на судьбу @y мне после этого пофиг. unshift короткого массива не предлагать, в реальной задаче они оба длинные
источник

SZ

Sergey Zhmylove in Modern::Perl
@PerlBanjoBot $ perl -MTime::HiRes=time -E '$st=time; @x=(0); @y=(1..1e8); say time()-$st; $st=time(); push @x,@y; say time()-$st;'
источник

P

PerlBanjoBot in Modern::Perl
Out of memory!
panic: gen_constant_list JMPENV_PUSH returned 2 at -e line 1.
https://PerlBanjo.com/3d4cfe37e8
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Ну или может у кого есть мысли, как их сцепить в XS-коде
источник

A

Alexander in Modern::Perl
Мне кажется тут только связный список подойдёт
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
1e6 сделай. Хотя нерепрезентативно будет по времени выполнения
источник

SZ

Sergey Zhmylove in Modern::Perl
@PerlBanjoBot $ perl -MTime::HiRes=time -E '$st=time; @x=(0); @y=(1..1e5); say time()-$st; $st=time(); push @x,@y; say time()-$st;'
источник

P

PerlBanjoBot in Modern::Perl
0.00432300567626953
0.00440001487731934
https://PerlBanjo.com/49a2e48811
источник

SZ

Sergey Zhmylove in Modern::Perl
Типа того?
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Ага. Но на таком мелком совсем быстро, разница незаметна почти
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
А когда там в каждом хотя бы 60 млн, да ещё и элементы — не инты, а arrayref-ы, и этих конкатенаций в коде два десятка — получается немножечко грустно
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Понятно, что это надо в консерватории исправлять, но я пока пытаюсь найти решение, не ломающее архитектуру имеющегося кода
источник

GK

Grigoriy Koudrenko in Modern::Perl
А ему в любом случае надо интерироваться, так как надо пройтись по всему массиву и для всех элементов проверить ссылка ли они и если да инкреминтировать счетчик
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Блин, логично. Остаётся вариант сцепить их каким-то хитрым извращением в XS-коде, не трогая refcnt и попутно уничтожая второй массив
источник

GK

Grigoriy Koudrenko in Modern::Perl
Можно на xs попробовать, если мне не изменяет память то AV это просто массив под указатели на SV, можно сделать что-то типа realloc, memcpy, а потом грохнуть исходный массив как то так, чтобы не вызывались деструкторы для его элементов, но надо все это проверять
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Одновременно 8) 🤝
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Хм, а вот так уже гораздо лучше. Хотя всё равно есть куда расти, но уже что-то

$ perl -MTime::HiRes=time -MData::Alias -E '$st=time; @x=(0); @y=(1..1e8); say time()-$st; $st=time(); alias push @x,@y; say time()-$st;'

1.13114595413208
0.766433954238892
источник