Dostępny język programowania Perl 5.42

Po roku prac nad rozwojem opublikowano nową stabilną wersję języka programowania Perl — 5.42. W trakcie przygotowywania nowego wydania zmieniono około 280 tysięcy linii kodu (bez dokumentacji i automatycznie generowanego kodu — 93 tysiące), a zmiany obejmowały 1500 plików, w pracach uczestniczyło 64 programistów.

Wersja 5.42 została wydana zgodnie z zatwierdzonym dwanaście lat temu stałym harmonogramem rozwoju, który przewiduje wydawanie nowych stabilnych wersji raz w roku oraz poprawek co trzy miesiące. Około miesiąca planowane jest wydanie pierwszej poprawki Perl 5.42.1, w której zostaną naprawione najbardziej znaczące błędy wykryte podczas wdrażania Perl 5.42.0. Równocześnie z wydaniem Perl 5.42 zakończono wsparcie dla wersji 5.38, dla której aktualizacje będą mogły być wydane w przyszłości tylko w przypadku stwierdzenia krytycznych problemów z bezpieczeństwem. W niedalekiej przyszłości rozpocznie się proces tworzenia eksperymentalnej wersji 5.43, na podstawie której w czerwcu 2026 roku zostanie utworzone stabilne wydanie Perl 5.44, chyba że zostanie podjęta decyzja o przejściu na numerację 7.x.

Kluczowe zmiany:

  • Dodano eksperymentalne operatory przetwarzania list — „any { BLOCK } @list” oraz „all { BLOCK } @list”, które przypominają operator „grep { BLOCK } @list”, ale mogą zwracać tylko wartości true lub false. Operator „all” zwraca „true” po spełnieniu warunku dla wszystkich elementów listy, a operator „any” — po spełnieniu warunku dla przynajmniej jednego elementu. Funkcjonalność operatorów jest analogiczna do funkcji z modułu List::Util, ale wbudowane wersje działają szybciej i zużywają mniej pamięci. use v5.42; use feature ‘keyword_all’; no warnings ‘experimental::keyword_all’; my @numbers = … if ( all { $_ % 2 == 0 } @numbers ) { say «Wszystkie liczby są parzyste»; }
  • Dla pól definiowanych wewnątrz klasy zaimplementowano atrybut „:writer”, stosowany do automatycznego tworzenia metody, zapisującej wartość zmiennej w polu dla bieżącego egzemplarza klasy. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
  • Dodano wsparcie dla definiowania metod leksykalnych, które, podobnie jak definicje podprogramów leksykalnych ('lexical_subs'), umożliwiają tworzenie metod dostępnych tylko w zakresie leksykalnej widoczności bloku, w którym zostały stworzone. Aby utworzyć takie metody, używa się wyrażenia 'my nazwa_metody'.
  • Dodany operator '->&', który pozwala wywoływać podprogramy znajdujące się w leksykalnym zakresie widoczności, tak jakby były metodami. W połączeniu z możliwością definiowania metod leksykalnych, nowy operator wdraża funkcjonalność podobną do metod prywatnych.
  • Dodano operator przypisania 'A ^^= B', który wykonuje operację 'A = A XOR B'.
  • Dodana pragmatyka 'source::encoding', definiująca kodowanie źródła. Dla kodu w kodowaniu ASCII można określić 'use source::encoding 'ascii' (domyślnie), a dla UTF-8 – 'use source::encoding 'utf8', przy czym ostatnie wyrażenie jest równoważne 'use utf8'. Interpreter zgłosi błąd, jeśli w kodzie oznaczonym jako ASCII występują znaki UTF-8, lub jeśli w kodzie oznaczonym jako UTF-8 używane są sekwencje escape '\x{}'. Aby wyłączyć sprawdzanie dla części kodu, można użyć wartości 'use no source::encoding'. W praktyce, dodana pragmatyka może być przydatna do identyfikacji przypadków, gdy programista zapomniał wskazać 'use utf8' dla kodu w kodowaniu UTF-8.
  • Do przestrzeni nazw 'CORE::' dodano funkcję chdir(). Na przykład, teraz można odwoływać się do tej funkcji jako '&CORE::chdir($dir)' lub 'my $ref = \&CORE::chdir; $ref->($dir)'.
  • Dodano wyrażenie 'no feature "apostrophe_as_package_separator"' do wyłączenia wsparcia dla użycia znaku ' ' jako separatora nazw pakietów (na przykład, 'My'Module'Var' zamiast 'My::Module::Var'). Początkowo w Perl 5.42 planowano usunąć wsparcie dla takich separatorów, które wcześniej zostały uznane za przestarzałe, ale podczas dyskusji postanowiono zachować tę możliwość domyślnie, ale przewidzieć opcję jej wyłączenia.
  • Wśród zwracanych możliwości wprowadzono funkcjonalność „switch” oraz operator „~~”, które wcześniej były oznaczone jako przestarzałe i planowane do usunięcia. Od wersji Perl 5.36 i 5.42 możliwości „switch” oraz „~~” są domyślnie wyłączone przy przypisywaniu kodu do wersji języka (na przykład, przy użyciu „use v5.42”), ale mogą być aktywowane za pomocą wyrażeń ‘use feature „switch”’ oraz ‘use feature „smartmatch”’.
  • Dodano wsparcie dla specyfikacji Unicode 16.0.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster