Доступна мова програмування Perl 5.36.0

Після року розробки опубліковано реліз нової стабільної гілки мови програмування Perl - 5.36. Під час підготовки нового випуску було змінено близько 250 тис. рядків коду, зміни торкнулися 2000 файлів, у розробці взяли участь 82 розробники.

Гілка 5.36 випущена відповідно до затвердженого дев'ять років тому фіксованого графіка розробки, що передбачає випуск нових стабільних гілок щорічно та коригувальних релізів — раз на три місяці. Приблизно через місяць планується випустити перший коригуючий реліз Perl 5.36.1, в якому буде виправлено найбільш значні помилки, виявлені в процесі впровадження Perl 5.36.0. Одночасно з виходом Perl 5.36 припинено підтримку гілки 5.32, для якої в майбутньому можуть бути випущені оновлення тільки у разі виявлення критичних проблем безпеки. Також розпочався процес розробки експериментальної гілки 5.37, на базі якої у травні чи червні 2023 року буде сформовано стабільний реліз Perl 5.38, якщо не буде ухвалено рішення перейти до нумерації 7.x.

Ключові зміни:

  • Стабілізована і тепер доступна при вказівці прагми "use v5.36" підтримка сигнатур функцій, що дозволяють явно визначити перелік змінних, що використовуються у функції та автоматизувати операції перевірки та присвоєння значень із масиву вхідних параметрів. Наприклад, код, що раніше використовується: sub foo { die «Too many arguments for subroutine» unless @_ >= 2; die "Too few arguments for subroutine" unless @_ <= 2; my($left, $right) = @_; return $left + $right; }

    при використанні сигнатур може бути замінений на:

    sub foo ($left, $right) { return $left + $right; }

    При виклику foo з числом аргументів, відмінним від двох, інтерпретатор виведе помилку. У списку також підтримується спеціальна змінна "$", яка дозволяє ігнорувати частину аргументів, наприклад, "sub foo ($left, $, $right)" дозволить виконати копіювання в змінні лише першого та третього аргументу, при цьому в функцію необхідно передати рівно три аргументу.

    Синтаксис сигнатур також дозволяє вказувати необов'язкові аргументи та задавати значення, які використовуються за умовчанням у разі відсутності аргументу. Наприклад, вказавши «sub foo ($left, $right = 0)» другий аргумент стає необов'язковим і за його відсутності передається значення 0. В операції присвоєння можна вказати довільне вираження, у тому числі з використанням інших змінних зі списку або глобальних змінних. Вказівка ​​замість змінної хеша або масиву (наприклад, «sub foo ($left, @right)») призведе до передачі одного і більше аргументів.

  • У функціях, оголошених з використанням сигнатур, підтримка додаткового присвоєння параметрів з масиву «@_» оголошена експериментальною і буде виводити попередження (попередження виводиться лише якщо @_ використовується у функціях, оголошених за допомогою нового синтаксису). Наприклад, попередження буде виведено для функції: use v5.36; sub f ($x, $y = 123) { say "The first argument is $_[0]"; }
  • Стабілізовано та доступно при вказівці прагми «use v5.36» інфіксний оператор «isa» для перевірки того, чи є об'єкт екземпляром зазначеного класу або класом, похідним від нього. Наприклад: if( $obj isa Package::Name ) { … }
  • При вказівці прагми use v5.36 включена обробка попереджень (активований режим use warnings).
  • При вказівці прагми "use v5.36" відключена підтримка непрямої нотації виклику об'єктів ("feature indirect") - застарілого способу виклику об'єктів, при якому замість "->" використовується пробіл ("method $object @param" замість "$object-> $method(@param)»). Наприклад, замість "my $cgi = new CGI" потрібно використовувати "my $cgi = CGI->new".
  • При вказівці прагми "use v5.36" відключена підтримка емуляції багатовимірних масивів і хешей в стилі Perl 4 ("feature multidimensional"), що дозволяють транслювати вказівку декількох ключів в проміжний масив (наприклад, $hash{1, 2}) перетворювалося на "$hash{join($;, 1, 2)}").
  • При вказівці прагми use v5.36 відключена підтримка експериментального механізму розгалуження (feature switch), аналогічного операторам switch і case (у Perl застосовуються ключові слова given і when). Для використання даної можливості починаючи з Perl 5.36 потрібно явно вказувати 'use feature switch', а при вказівці use версія вона більше автоматично включатися не буде.
  • Стабілізована та доступна за промовчанням підтримка додаткових класів символів у квадратних дужках усередині регулярних виразів. Можливість дозволяє здійснювати зіставлення з використанням розширених правил перетину, виключення та об'єднання множини символів. Наприклад, '[A-Z - W]' - символи від A до Z за винятком W.
  • Частково стабілізована та доступна за умовчанням підтримка операцій «(?», «( )», «{ }» та «[ ]» можна використовувати символи «« », «“ ” тощо. Наприклад, «qr«pat »».
  • Заборонено виклик функції sort без аргументів, який тепер призводитиме до виведення помилки. @a = sort @empty; # продовжить роботу @a = sort; # буде виведено помилку @a = sort(); # буде виведено помилку
  • Запропоновано новий прапор командного рядка -g, що включає режим завантаження всього файлу повністю, а не рядково. Дія прапора аналогічна до вказівки «-0777».
  • Підтримку специфікації Unicode оновлено до версії 14.0.
  • Забезпечена миттєва обробка винятків, пов'язаних з обчисленнями з плаваючою комою (SIGFPE), аналогічна обробці інших аварійних сигналів, таких як SIGSEGV, що дозволяє прив'язувати власні обробники сигналу SIGFPE через $SIG{FPE}, наприклад, виводять номер рядка в якій виникла проблема.
  • Оновлено версії модулів, що входять до базової поставки.
  • Додано оптимізацію продуктивності. Надано можливість більш ефективного зберігання ключів великих хешів, без використання таблиць рядків. Значно підвищена продуктивність створення нових скалярних значень, наприклад, наступний код тепер виконується на 30% швидше: $ str = "A" x 64; for (0..1_000_000) { @svs = split //, $str }
  • У коді інтерпретатора почалося використання деяких конструкцій, визначених стандарті C99. Для складання Perl тепер потрібний компілятор, що підтримує C99. Припинено підтримку збірки у старих версіях MSVC++ (до VC12). Додано підтримку збірки в Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • Припинено підтримку платформ AT&T UWIN, DOS/DJGPP та Novell NetWare.

Джерело: opennet.ru

Додати коментар або відгук