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 ()

Поздравляю всех с юбилейной версией! Просьба отписываться, если новость была полезной :3

Приятно знать, что не зря пыхтел.

perl5_guy ★★★ ()

в регвырах

где мой канделябр?

Ларри тобой не доволен.

Vault_Boy ()

Ололо, на самом деле это СОБЫТИЕ. Минька- слишком мелко. Ну да ладно. Я не злюсь.

perl5_guy ★★★ ()

А на perl.org версия 5.30.3

anonymous ()

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

Это же натуральная бомба

Anoxemian ★★★★★ ()

отличная новость!

спасибо за информацию

anonymous ()

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

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

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

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

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

Спасибо!

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

полезная вещь для гольфа, между прочим. Ждём пока онлайн-площадки с задачками обновятся.

dsxl ()

Ну да, получается.

А куда ему из него деться?

anonymous ()

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

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

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

Оба медленные.

ugoday ★★★★★ ()

операторы сравнения с одним приоритетом в виде цепочки

По-настоящему революционное изменение, которого двадцать лет ждали.

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

Разве это важно? Если один язык для людей, а второй для роботов? И в пхп весь говносинтаксис попёрли

menangen ★★★★★ ()

Где сейчас работает бородатый?

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

Perl почти всегда быстрее. Это не секрет. Просто для скриптухи часто производительность не важна.

rupert ★★★★★ ()

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

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

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

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

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

Добро пожаловать Raku.

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

Добро пожаловать Raku.

Я слышал что он ещё сырой, и медленнее. Ну и да там VM.

shpinog ★★ ()

140 тысяч изменённых строк

Нормально так перл умирает, живенько.

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

Играл в Planescape: Torment? Вот там были такие ghouls.

anonymous ()
Ответ на: комментарий от 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 ★★★ ()
Ответ на: комментарий от outtaspace

Цепочные сравнения это вин. Обидно было что в менее гольфовом Raku есть эта штука, а в Perl нет.

perl5_guy ★★★ ()

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)
Ответ на: комментарий от rupert

Perl почти всегда быстрее.

В плане регулярок — не почти. На регулярках Python жидко обсирается. Всегда.

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

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

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

У меня в продакшене 5.20. В cpan-модулях обычно нет ограничений или 5.10.1. Фича хорошая, но будет мне доступна через несколько лет в лучшем случае.

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

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

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

М-да …

Владимир

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

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

Дмитрий

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

Вот так вот познакомишься с няшной анимешной девочкой, а она Дмитрий.

Р’рХа Фх’ ЪыЪ

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

Шутка.

А можно и на ассемблере ведь было сделать …

Владимир

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

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

perl5_guy ★★★ ()

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

Плохой пример.

Надо брать гигабайт текста, что-то с ним делать, записывать в другой (или несколько других) файл(ов).

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

А если выражение несколько более сложное, чем а < б < с?

Вот тут и начинаешь ценить синтаксисический сахарок.)))

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

синтаксисический сахарок.)))

СЛАДКИЙ ХЛЕБ

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

Просьба отписываться, если новость была полезной :3

Полезна.

Оказывается, Larry Wall ещё жив.

Как у него с карьерой?

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

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

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

Ты человек вообще или бот? Надеюсь на второе, иначе ты болен на голову.

Virtuos86 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.