LINUX.ORG.RU

Perl 5.34.0

 


1

3

С момента выхода Perl 5.32.0 прошло около десяти месяцев. Если исключить документацию, генерируемые автоматически файлы и инструментарий для формирования самого релиза, было изменено 150,000 строк в 1,300 .pm, .t, .c и .h-файлах.

Выход версии 5.34.0 был омрачён рядом склок, приведших к уходу Sawyer X из сообщества. Это последний релиз, выпущенный данным pumpking'ом.

Несколько слов в память KENTNL (Kent Fredric)

Кент скончался в феврале 2021 года. Он поддерживал 178 CPAN-модулей, участвовал в разработке Gentoo Linux и самого Perl. Я также благодарен ему за исчерпывающие ответы на глупые вопросы, которые я задавал на заре моей карьеры Perl-разработчика. Земля пухом.

Новая функциональность

  • Добавлена экспериментальная поддержка try/catch.

    use feature 'try';
     
     try {
             a_function();
     }
     catch ($e) {
             warn "An error occurred: $e";
     }
    

    Данную функциональность реализовал Paul «LeoNerd» Evans, который в последнее время частенько занимается доработкой интерпретатора. Свежее интервью с LeoNerd'ом можно прочитать здесь. Также есть серия интересных статей, призванных помочь желающим присоединиться к доработке Perl.
  • Нижняя граница диапазонного квантификатора теперь может быть опущена: qr/{,n}/.
  • Допускается наличие пробелов для заключённой в фигурные скобки части метасимволов: \x{ FFFC } или qr/a{ 5, 7 }/.
  • Добавлен префикс 0o для записи восьмеричных констант: 0o123_456.
  • В модуль feature добавлены две включённых по умолчанию настройки-ограничителя, которые вылились из ожесточённых дискуссий по поводу гипотетической 7‑й версии интерпретатора. Суть споров в предложении Sawyer X включить по умолчанию вещи, которые и так считаются стандартом в сообществе, но что неминуемо привело бы к необходимости переписывать написанные в плохом стиле скрипты.
    • bareword_filehandles

      no feature qw( bareword_filehandles );
      
      open( FP, "<", "./x" );
      
      # Bareword filehandle "FP" not allowed under 'no feature "bareword_filehandles"' at bareword.pl line 3.
      # Execution of bareword.pl aborted due to compilation errors.

      Разумеется, данная прагма не влияет на поведение следующих идентификаторов без разыменовывающего префикса (т.н. «пустых слов»): STDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUT и _.
    • multidimensional

      no feature qw( multidimensional );
      
      my %h = ();
      
      $h{1,2};
      
      # Multidimensional hash lookup is disabled at multi.pl line 5, near "2}"
      # Execution of multi.pl aborted due to compilation errors.
      

  • Исправлена утечка памяти:

    use Devel::Leak;
    my $count = shift @ARGV;
    
    $string = "STRING 1";
    
    my $handle;
    Devel::Leak::NoteSV($handle);
    for (1 .. $count) {
            $x = test_leak($string, "string 1");
                $x = test_leak($string, "string 2");
    }     
    Devel::Leak::CheckSV($handle);
    exit;
    
    sub test_leak {
            local ($string, $match) = @_;
                $match =~ s/\s/\\s/g;  # This Leaks
                    return ($string =~ /$match/i);
    }  
    

  • Расширен набор сообщений об ошибках и предупреждений.

Изменения в документации

  • Новые разделы
    • perldocstyle — руководство по работе с документацией, идущей в комплекте с Perl.
    • perlgov — документ, описывающий новую модель управления разработкой Perl'а. В perlpolicy также было произведено заметное количество правок для отражения случившихся изменений в управлении проектом.
  • Правки существующей документации
    • perlapi, perlguts, perlxs и perlxstut теперь отдают предпочтение SvPVbyte вместо SvPV.
    • Упоминания Pumpking'а заменены на «Руководящий комитет».
    • Документация split() упрощена путём удаления join() из примеров.
    • perlapi — продолжается работа по улучшению уже изложенной в разделе информации и документированию упущенных элементов API.
    • perlcommunity — s{irc.freenode.org/#perl.tw}{chat.freenode.org/#perl.tw}

      Данное изменение уже неактуально, в апстрим версии freenode заменена на libera.
    • perlfunc:
      • caller() — добавлено упоминание факта, что данная функция игнорирует блоки try{}.
      • my() и state() — читатель явно предупреждается, что лексические переменные не должны переопределяться в том же блоке или выражении, где они объявлены.
      • localtime() — описание было улучшено и добавлено упоминание, что результат всегда возвращается на английском языке.
      • sleep() — более подробно объясняется, как данная функция ведёт себя с нулевым или отрицательным параметром.
      • msgsnd()
  • perlpacktut — исправлены имена переменных в примерах.
  • Также изменены разделы: perlgit, perlguts, perlop, perlsyn, perlunifaq.

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

★★★★

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

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

Скорее всего переименуют в Pedro

anonymous ()

perlcommunity — s{irc.freenode.org/#perl.tw}{chat.freenode.org/#perl.tw} Данное изменение уже неактуально, в апстрим версии freenode заменена на libera.

Красношляпочный посыльный ходит по проектам и делаеи PR с сменой сервера))) Мне вот интересно, красношляпочные хоть уговаривают до этого, в чатах? Или перл взял под козырёк лишь с подачи одного pr? :-D

anonymous ()

Вот нельзя было сделать то же самое. но два года назад, когда я начал постепенно перекотываться с Perl на sh? ☺ Обратно котиться я отказываюсь! ☺

Но да, всё равно ждём ебилдов мейкфайлов, для Perl у меня всегда найдётся применение!

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

Posix?

Если для скрипта хватает posix shell, значит писать его и надо было на posix. Все правильно сделал.

anonymous ()
Ответ на: комментарий от mord0d
Обновление на FreeBSD на релиз языка программирования Perl 5.34.0:

0) ee /etc/make.conf
DEFAULT_VERSIONS+=perl5=5.34
1) portmaster -o lang/perl5.34 perl5
2) portmaster p5-
3) portmaster -f `pkg shlib -qR libperl.so.5.34`
iZEN ★★★★★ ()

Зашевелились, но что-то поздновато. Лет 15 назад вся эта движуха была бы очень весьма годно нужно. А сейчас уже есть питон, который развивается куда активнее.

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

А сейчас уже есть питон, который развивается куда активнее.

Ты же о попсе говоришь! А тут речь о труЪ-вещах.

Для примера: ставил щаз с гитхаба питоно-gtk’шное приложение, через 10 минут снес нах: какое же оно тупое-через-задницу-сделанное! Хотя и попсовое в своем классе ;)

anonymous ()

Позновато мы. На Opennet уже всё обсосали, даже обсуждение почти заглохло. А на ЛОРе только всё начинается.

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

Каментов 90)) Не осталось военов..

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

Позновато мы

Пациент умер, ребята.

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

Posix?

А есть варианты? ☺

Если для скрипта хватает posix shell, значит писать его и надо было на posix.

Эм… Я пишу автоматизатор-оркестратор для FreeBSD на /bin/sh с использованием только базовых компонентов системы (без внешних зависимостей из портов/пакетов), и всё это (вместе с парсером конфигов!) уложилось в ≈1.2k строк кода.

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

сейчас уже есть питон, который развивается куда активнее.

В молодой, активно развивающийся язык требуется прогромист. Опыт необязателен.

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

Это когда? Я только вчера закончил собирать порты (четыре, с_ка, версии llvm, две версии gcc, rust… всё это собирается целую вечность!).

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

А писал бы на python

— и не написал бы. (%

Как ты предлагаешь запускать питоноскрипт на девственно чистой фре, на которой даже вместо менеджера пакетов — стаб?

А как ты предлагаешь ставить питономодули, которых нет в базе пакетов? pip от рута гарантированно ломает дальнейшее обновление питона и питонокишков.

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

А есть варианты?

Bash ладно, не входит в базу. (t)csh?

автоматизатор-оркестратор для FreeBSD

Круто. И выбор инструмента правильный. Мне нравится минимализм. Сильно прибит к фряхе? Покажешь? А б для стрекозы заюзал чего подобного.

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

12 часов максимум.

Линуксоид мне будет рассказывать сколько времени занимает сборка софта под фряху? (%

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

Для примера: ставил щаз с гитхаба питоно-gtk’шное приложение, через 10 минут снес нах: какое же оно тупое-через-задницу-сделанное!

Логика уровня: Если в доме живут соседи-дебилы, то материалы кирпич, бетон, стекло и металл - полное говно и из них нельзя ничего строить.

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

А зачем нужны языки от копорации зла/добра?

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

А писал бы на python - уложился бы в 500

Ага, видал я как вы пишете на питоне замену шелл-скриптам. Питонокодеры, одним словом. ))

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

запускать питоноскрипт на девственно чистой фре

Ладно, разрешаю одну строчку написать на sh - установку порта python

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

Логика уровня: Если в доме живут соседи-дебилы, то материалы кирпич, бетон, стекло и металл - полное говно и из них нельзя ничего строить.

Можно, но как только ты достроишь, они сломают, и тебе надо будет переделывать уже из другого кирпича, бетона, стекла, металла. Потому что соседи хоть и дебилы, но не больше чем ты сам, наступая раз за разом на одни и те же грабли ;)

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

Ладно, разрешаю одну строчку написать на sh - установку порта python

Карго культ? Написать на питоне, чтоб потом установить питон которых нахер не нужен ничему кроме тому чтотнаписал на питоне? А ты хороооош. Сеньёр девелопер небось!

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

четыре, с_ка, версии llvm, две версии gcc

llvm, rust и gcc у меня собирается по 25 минут примерно каждый. Ryzen 1800X.

А зачем столько llvm и gcc в системе? У меня только llvm10 и llvm12, а gcc вообще ни одного.

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

(t)csh?

На нём не пишут скрипты, потому что это очень больно. В базовой системе очень много скриптоты на sh, и ни одного на (t)csh.

Сильно прибит к фряхе?

Он в принципе ничего кроме фряхи не поддерживает так как это целевая платформа.

Покажешь?

Как только пофикшу одну проблему (я даже не уверен что это баг, лол) и обкатаю тестовый период, выкачу и запилю анонс на другом форуме, где к *BSD нет такого предвзятого отношения как здесь. ☺

А б для стрекозы заюзал чего подобного.

Оно юзает pkg-ng (одна из основных задач — синхронизация установленного софта с преконфигурированным списком) и полагается на package origin из портов. Если сможешь портировать — я не против. Если есть желание обсудить — goto IRC.

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

Но ведь:

  1. Я работаю
  2. Новость в этом ИТТ треде сииильно более развёрнутая, с примерами, скандалами и интригами. Я уж молчу про ссылки на полезные (458 из 10) статейки

:\

P.S. Спасибо господинам модераторам за правки, я бы не осилил всё это доразметить.

perl5_guy ★★★★ ()
Последнее исправление: perl5_guy (всего исправлений: 2)
Ответ на: комментарий от Turbid

разрешаю

А ещё разреши слать нахер ограничения на установку софта в некоторых конфигурациях.

Если мне понадобится низкоквалифицированный обезьяний труд, я буду иметь тебя в виду.

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

выкачу и запилю анонс на другом форуме, где к *BSD нет такого предвзятого отношения как здесь.

На каком?

Оно юзает pkg-ng (одна из основных задач — синхронизация установленного софта с преконфигурированным списком)

Ок, стрекоза тоже.

и полагается на package origin из портов

Не совсем понял.

Если сможешь портировать — я не против. Если есть желание обсудить — goto IRC.

Я уже дома, время ~msk. Смогу завтра на работе зайти. Где тебя найти?

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

llvm, rust и gcc у меня собирается по 25 минут примерно каждый. Ryzen 1800X.

  • llvm: ≈2h35m;
  • gcc: ≈1h25m;
  • rust: ≈2h40m.

i7-4770K (w/o OC).

Было бы ощутимо быстрее, если бы юзал tmpfs(5) в poudriere, но тогда случаются фейлы из-за нехватки памяти.

А зачем столько llvm и gcc в системе?

 % pkg query '%ro' llvm10
graphics/libosmesa
graphics/mesa-dri
 % pkg query '%ro' gcc10
math/py-numpy
math/suitesparse
math/openblas

Остальные кому-то нужны в качестве bdep, но мне совсем не хочется лопатить ≈750 портов чтобы выяснять кому.

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

На каком?

google://bindev.

и полагается на package origin из портов

Не совсем понял.

В конфиге можно указывать как package name (e.g., py38-numpy), так и package origin (e.g, math/py-numpy). В принципе, если дерево портов dfbsd отличается от дерева портов fbsd, проблема будет только в юзании одного конфига между разными платформами (впрочем, это легко обруливается условием по хосту или группировкой хостов по платформе и условием по группе хостов; конфиг расчитан на это), но этим можно не заморачиваться — при ненахождении пакета в query/rquery, оно высрет в дебаг (если включен) что такого пакета нет и поедет дальше, пытаться установить несуществующий не будет.

Где тебя найти?

Можешь пнуть на форуме (первый в гугловыдаче) в личку и/или в IRC на Freenode в личку или чекнуть по нику WHOIS список каналов где я сижу. Ник везде один. С почтой проблемы, потому пока только так.

// Если заинтересуешься — разработка поедет веселее. И ещё парой интересных ништяков попробую заинтересовать. ^_~

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

А кто сказал, что я только линуксоид?

Я тебя не видел в бздетредах (или ты там был слишком незаметен ☺), чекнул первую страницу твоих тредов — тоже никаких упоминаний бздей, только линуксы.

pkg query ‘%ro’ llvm10

Ужо 12, вылезай из крио…

Расскажи это мейнтейнерам. llvm10 у меня притянут в качестве зависимости, сам я его не ставил. Из компиляторов, которые я ставил лапками только avr-gcc 10.2.

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

На первый взгляд проблем особых быть не должно: стрекозинные порты - теже фряшные, тока с патчами. Если вдруг както задействуется poudrier (или как там его), в стрекозе dsynth. Ну, я щас гадаю на кофейной гуще.

Завтра посмотрим. ;)

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

Сборкой оно не занимается вообще никак, и в порты тоже не лезет, работает только с бинарными репами (предполагается наличие билдфермы), так как тулза нацелена на менеджмент кучи фрях (на данный момент, ничего другого просто не тестил, нет нужды; но если будет применимо где-то ещё — буду только рад) без привязки к архитектуре (поэтому тулза не на сишке), без зависимостей (чтобы можно было юзать сразу после установки девственно чистой системы) и максимально гибко (для этого конфиг умеет в "кондишны", чтобы можно было сервить конфиг, например, по NFS, или даже nc(1)) и централизовано (можно юзать один конфиг на кучу хостов и иметь везде разный набор софта и сервисов).

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

ну про всякие бзди вон тоже новости пишут. хочешь сказать что оно живое?

А ты можешь доказать (а не притянуть за уши свои влажные фантазии, как это принято на ЛОРе) обратное? ☺

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

Да какие уж фантазии. Степень использования и того, и другого в реальной жизни сама за себя говорит.

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