LINUX.ORG.RU

Perl 5.32.0

 


0

3

Вышла новая версия интерпретатора языка программирования Perl 5.32.0.

Позади 13 месяцев разработки, 140 тысяч изменённых строк в 880 файлах.

Ключевые нововведения:

  • Новый экспериментальный оператор isa, проверяющий, является ли указанный объект экземпляром переданного класса или класса-наследника:

    if( $obj isa Package::Name ) { ... }
    

  • Поддержка Unicode 13.0!
  • Появилась возможность записывать операторы сравнения с одним приоритетом в виде цепочки:

    if ( $x < $y <= $z ) {...}
    

    Тоже самое что:

    if ( $x < $y && $y <= $z ) {...}
    

    Про данную особенность можно подробней почитать в perlop (раздел «Operator Precedence and Associativity»).
  • Буквенные обозначения утверждений в регулярных выражениях больше не являются экспериментальными. Пример: (*pla:pattern), подробнее в perlre.
  • Возможность ограничения проверяемого шаблона конкретной системой письма (подробнее «Script Runs» в perlre) больше не является экспериментальной.
  • Появилась возможность отключать непрямой вызов методов. Подробнее можно почитать в заметке Брайана Д Фоя.

Некоторые оптимизации:

  • Проверка подключения дополнительных возможностей (features) теперь происходит быстрее.
  • Существенно ускорены специальные случаи для сортировки (речь о {$a <=> $b} и {$b <=> $a} ).

Выбрал только некоторые вещи на свой вкус. Есть иные нововведения, несовместимые с прошлыми версиями изменения, обновления документации и закрытые проблемы безопасности. Предлагаю ознакомиться с полной perldelta по ссылке.

>>> Подробности

★★★

Проверено: unfo ()

Появилась возможность записывать операторы сравнения с одним приоритетом в виде цепочки

Слава Котоне! Я джвадцать лет ждал!

(речь о {$a <=> $b} и {$b <=> $a} )

Ты пошто sort пролюбил? Я не вкурил, пошёл по ссылке и долго искал этот кусок кода (когда уже перлорегулярки завезут в мой браузер? Никогда! Он на Python! >_<).

mord0d ★★★ ()

Киньте ссылками со свежими сравнениями производительности Perl и Python. Нагуглить удалось лишь нечто довольно старое и потому неактуальное.

bbk123 ★★★★★ ()

Когда уже компиллер завелосипедят?

К LLVM прикрутить же возможно? Будет же пушка.

Пзы: Знаю что такое скаляр, на этом знания перла заканчиваются.

shpinog ★★ ()
Ответ на: комментарий от rupert

Иногда важна. Мне приходилоссь пилить скрипты для обработки гигабайтных текстовых файлов и там перлом я решал задачу в секунды. До этого были инструменты на питоне и яве. Первый работал сутками, второй падал из-за нехватки памяти.

shell-script ★★★★★ ()
Ответ на: комментарий от bbk123

Сравнение производительности Perl и Python

Как на счёт аналитики уровня LOR?

Я нашёл в интернете простенькую реализацию решета Эратосфена. Код примерно одинаковый, вот результаты:

C -O3    0.7с      3%
C -O0    1.1с      4%
Perl    22-23с    87%
Python  24-28с   100%

Питон в 1.15 раз медленее перла. Перл в 32 раза медленее С.

Бенчмарк:

cat > sieve.c << 'EOF'
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int i, j, k;
    int number = atoi(argv[1]);

    int *primes = calloc(number+1, sizeof(int));

    for (i = 2; (i * i) <= number; i++) {
        if (!primes[i]) {
            for (j = 2; j < number; j++) {
                if (i * j > number) break;
                primes[i * j] = 1;
            }
        }
    }

    j = 0;
    k = 0;
    for (i = 2; i <= number; i++) {
        if (!primes[i]) {
            k++;
            j = i;
        }
    }
    printf("%d %d\n", j, k);

    return 0;
}
EOF

cat > sieve.pl << 'EOF'
my $number = int($ARGV[0]);
my @primes = (0)x($number+1);
for (my $i = 2; ($i*$i) <= $number; $i++) {
    if (not $primes[$i]) {
        for (my $j = 2; $j < $number; $j++) {
            last if ($i*$j > $number);
            $primes[$i*$j] = 1;
        }
    }
}

my $j = 0;
my $k = 0;
for (my $i = 2; $i <= $number; $i++) {
    if (not $primes[$i]) {
        $k++;
        $j=$i;
    }
}
print "$j $k\n";
EOF

cat > sieve.py << 'EOF'
import math
import sys

number = int(sys.argv[1])
primes = [False for i in range(number + 1)]
i = 2
while i * i <= number:
    if not primes[i]:
        for j in range(2, number):
            if i*j > number: break
            primes[i*j] = True
    i += 1

j = 0;
k = 0;
primes[0] = True
primes[1] = True
for i in range(number + 1):
    if not primes[i]:
        k += 1
        j = i

print(j, k)
EOF

SIZE=50100200

echo C $(gcc --version | head -1) -O3
gcc -O3 sieve.c -o sieve && time ./sieve $SIZE

echo ----------------

echo C $(gcc --version | head -1) -O0
gcc -O0 sieve.c -o sieve && time ./sieve $SIZE

echo ----------------

echo Perl $(perl --version | head -2 | tail -1)
time perl sieve.pl $SIZE

echo ----------------

echo Python $(python --version)
time python sieve.py $SIZE
dsxl ()

Не нашел ничего интересного в дельте, кроме ускорения. Но дело хорошее, надо будет в своих cpan-модулях .travis обновить до актуальной версии.

outtaspace ★★★ ()

if ( $x < $y <= $z ) {…}

Тоже самое что:

if ( $x < $y && $y <= $z ) {…}

if ( $x < $y && $y <= $z ) {…} лучше.

Readable код лучше кода в котором нужно что-то «додумывать».
А лучше так

if ( $x <  $y  && 
     $y <= $z 
   ) {

...
}  

Владимир

anonymous ()

оО

А на opennet другая стата…

При подготовке нового выпуска было изменено около 220 тыс. строк кода, изменения затронули 1800 файлов, в разработке приняли участие 89 разработчиков.

qbbr ★★★★ ()
Последнее исправление: qbbr (всего исправлений: 1)
Ответ на: комментарий от shell-script

В тестовых условиях разница между питоном и перлом обычно не выходит за первые десятки процентов. Интересно, откуда в вашем случае взялось такое различие?

ugoday ★★★★★ ()
Ответ на: комментарий от ugoday

«Век живи, век учись».

Использовал Perl в 90-х.
Foxpro 2.6 с текстом работал медленно.
Так вот для работы с текстом, там где Foxpro 2.6 «тупил» вызывал из него модули Perl.
Например для размещения по горизонтали нескольких расчетных листков.
Все работало раз в пятьдесят быстрее Foxpro 2.6.
Ради интереса пробовал расположить 1000 расчетных листков по горизонтали.
Perl очень шустро выдавал результат.
И вот те на - оказывается Perl медленный.

М-да …

Владимир

anonymous ()
Ответ на: комментарий от anonymous

А если бы модули были на си, то можно было бы расположить в 10 раз больше листков за половину времени. (Правда, делать сами модули не так быстро)

Дмитрий

dsxl ()
Ответ на: оО от qbbr

Это включая файлы отредактированные автозаменой (смена версии и т.п.), ниже написано что людьми было изменено 140 тысяч строк.

perl5_guy ★★★ ()
Ответ на: комментарий от Virtuos86

Кого там подсматривать то ? Ты либо клоун либо толстый тролль компания ремотнулась к моему пк да взяла себе этот перл который я туда затащил , не думай что линукс свободен может ноум жопой и не торчит а остальное все дампом уходит на сервера статистики в виде мета дампа

anonymous ()