Рэліз мовы праграмавання Perl 5.30.0

Пасля 11 месяцаў распрацоўкі адбыўся рэліз новай стабільнай галіны мовы праграмавання Perl 5.30. Пры падрыхтоўцы новага выпуску было зменена каля 620 тыс. радкоў кода, змены закранулі 1300 файлаў, у распрацоўцы прынялі ўдзел 58 распрацоўшчыкаў.

Ветка 5.30 выпушчана ў адпаведнасці з зацверджаным шэсць гадоў таму фіксаваным графікам распрацоўкі, які прадугледжвае выпуск новых стабільных галін раз у год і карэкціруючых рэлізаў - раз у тры месяцы. Прыкладна праз месяц плануецца выпусціць першы які карэктуе рэліз Perl 5.30.1, у якім будуць выпраўленыя найболей значныя памылкі, выяўленыя падчас укаранення Perl 5.30.0. Адначасова з выхадам Perl 5.30 спынена падтрымка галінкі 5.26, для якой у будучыні могуць быць выпушчаны абнаўленні толькі ў выпадку выяўлення крытычных праблем з бяспекай. Таксама пачаўся працэс распрацоўкі эксперыментальнай галіны 5.31, на базе якой у маі 2020 года будзе сфарміраваны стабільны рэліз Perl 5.32.

ключавыя змены:

  • У рэгулярныя выразы дададзена эксперыментальная падтрымка аперацый.(?‹!pattern)»І«(?‹=pattern)»для абмежаванага звароту да раней апрацаваных найменных шаблонаў. Вызначэнне шаблону павінна быць у межах 255 сімвалаў ад месца звароту;
  • Да 65534 павялічана максімальнае значэнне спецыфікатара памеру ("n") у блоках "{m,n}" рэгулярных выразаў;
  • Дададзена абмежаваная падтрымка масак для вылучэння пэўных катэгорый сімвалаў у рэгулярных выразах, ахопліваючы розныя наборы Unicode. Напрыклад, выраз «qr! \p{nv= /(?x) \A [0-5] \z / }!» дазваляе вылучыць усе Unicode-знакі, вызначальныя лічбы ад 0 да 5, уключаючы тайскія ці бенгальскія варыянты напісання лічбаў;
  • У рэгулярных выразах дададзена падтрымка найменных знакаў
    усярэдзіне шаблонаў, абмежаваных адзінарнымі двукоссямі (qr'\N{name}');

  • Падтрымка спецыфікацыі Unicode абноўлена да версіі 12.1. Знята прыкмета эксперыментальнай распрацоўкі з выклікаў sv_utf8_downgrade і sv_utf8_decode, якія выкарыстоўваюцца пры распрацоўцы пашырэнняў на мове Сі;
  • Дададзена магчымасць зборкі perl з рэалізацыяй аперацый з лакаллю, якая падтрымлівае працу ў шматструменным рэжыме (-Accflags='-DUSE_THREAD_SAFE_LOCALE'). Раней падобная рэалізацыя выкарыстоўвалася толькі пры зборцы шматструменнага варыянту Perl, а зараз можа быць уключана для любых зборак;
  • Спалучэнне сцягоў "-Dv" (пашыраная адладкавая выснова) і "-Dr" (адладка рэгулярных выразаў) зараз прыводзіць да ўключэння ўсіх магчымых рэжымаў адладкі рэгулярных выразаў;
  • Выдалены магчымасці, раней абвешчаныя састарэлымі:
    • У якасці сімвалаў-падзельнікаў радкоў і шаблонаў зараз дапускаецца выкарыстанне толькі графем (забаронены складовыя знакі Unicode).
    • Спынена падтрымка некаторых даўно састарэлых формаў ужывання ў рэгулярных выразах знака «{» без яго экранавання.
    • забаронена выкарыстанне функцый sysread(), syswrite(), recv() і send() з апрацоўшчыкамі ":utf8".
    • Забаронена выкарыстанне азначэнняў "my" ў першапачаткова ілжывых умоўных аператарах (напрыклад, "my $x if 0").
    • Выдалена падтрымка спецпераменных "$*" і "$#".
      Спыненая падтрымка няяўнага выкліку функцыі dump() (цяпер трэба відавочна паказваць CORE::dump()).

    • Выдалена функцыя File::Glob::glob (трэба выкарыстоўваць File::Glob::bsd_glob).
    • У pack() дададзена абарона ад звароту некарэктных паслядоўнасцяў Unicode.
    • Да наступнага выпуску адкладзена спыненне падтрымкі выкарыстання ў кодзе XS (блокі на Сі) макрасаў, якія выконваюць аперацыі з UTF-8.
  • Аптымізацыі прадукцыйнасці:
    • Паскорана выкананне аперацый трансляцыі UTF-8 у раскладку сімвалаў (кодавы пункт), напрыклад, выкананне аперацыі ord(«x7fff») зараз патрабуе выканання на 12% менш інструкцый. Таксама павялічана прадукцыйнасць аперацый праверкі карэктнасці паслядоўнасцяў сімвалаў UTF-8;
    • Выключаны рэкурсіўныя выклікі ў функцыі finalize_op();
    • Унесены невялікія аптымізацыі ў код згортвання ідэнтычных знакаў і вызначэнні класаў сімвалаў у рэгулярных выразах;
    • Аптымізаваны пераўтварэнні знакавых вызначальнікаў тыпу ў беззнакавыя (IV у UV);
    • Паскораны алгарытм пераўтварэння цэлых лікаў у радок за кошт апрацоўкі зараз дзвюх лічбаў замест адной;
    • Унесены паляпшэнні, падрыхтаваныя па выніках аналізу кампаніяй LGTM;
    • Аптымізаваны код у файлах regcomp.c, regcomp.h і regexec.c;
    • У рэгулярных выразах значна паскорана апрацоўка шаблонаў выгляду "qr/[^a]/" з знакамі ASCII.
  • Адноўлена падтрымка платформы Minix3. Забяспечана магчымасць зборкі з выкарыстаннем кампілятара Microsoft Visual Studio 2019 (Visual C++ 14.2);
  • Абноўлены версіі модуляў, якія ўваходзяць у базавую пастаўку. З асноўнага складу выдалены модулі B::Debug и Locale::Codes.

Крыніца: opennet.ru

Дадаць каментар