Wydanie języka programowania Perl 5.30.0

Po 11 miesiącach rozwoju odbyła się wydanie nowej stabilnej gałęzi języka programowania Perl - 5.30. Przygotowując nową wersję, zmieniono około 620 tysięcy linii kodu, zmiany dotyczyły 1300 plików, a w rozwoju wzięło udział 58 programistów.

Branch 5.30 został wydany zgodnie ze stałym harmonogramem rozwoju zatwierdzonym sześć lat temu, który zakłada wydawanie nowych stabilnych gałęzi raz w roku i wydania korygujące co trzy miesiące. Za około miesiąc planowane jest wydanie pierwszej wersji korygującej Perla 5.30.1, która naprawi najważniejsze błędy wykryte podczas wdrażania Perla 5.30.0. Wraz z wydaniem Perla 5.30 zaprzestano wsparcia dla gałęzi 5.26, dla której aktualizacje mogą zostać wydane w przyszłości tylko w przypadku zidentyfikowania krytycznych problemów bezpieczeństwa. Rozpoczął się także proces rozwoju gałęzi eksperymentalnej 5.31, na bazie której w maju 2020 roku powstanie stabilna wersja Perla 5.32.

Klucz zmiany:

  • Do wyrażeń regularnych dodano eksperymentalną obsługę operacji „”.(?<!wzór)"A"(?‹=wzór)» w celu ograniczenia dostępu do wcześniej przetworzonych nazwanych szablonów. Definicja wzoru musi znajdować się w promieniu 255 znaków od punktu odniesienia;
  • Maksymalna wartość specyfikatora rozmiaru („n”) w blokach wyrażeń regularnych „{m,n}” została zwiększona do 65534;
  • Dodano ograniczone wsparcie maski podświetlające określone kategorie znaków w wyrażeniach regularnych, obejmujące różne zestawy Unicode. Na przykład wyrażenie „qr! \p{nv= /(?x) \A [0-5] \z / }!” umożliwia wybranie wszystkich znaków Unicode definiujących liczby od 0 do 5, w tym pisowni liczb w języku tajskim lub bengalskim;
  • Dodano obsługę nazwanych znaków w wyrażeniach regularnych
    wewnątrz wzorców rozdzielonych pojedynczymi cudzysłowami (qr'\N{name}');

  • Zaktualizowano obsługę specyfikacji Unicode do wersji 12.1. Flaga rozwoju eksperymentalnego została usunięta z wywołań sv_utf8_downgrade i sv_utf8_decode, używany przy opracowywaniu rozszerzeń w języku C;
  • Dodano możliwość budowania Perla z implementacją operacji z ustawieniami regionalnymi obsługującymi operacje wielowątkowe (-Accflags='-DUSE_THREAD_SAFE_LOCALE'). Wcześniej taką implementację stosowano tylko podczas budowania wielowątkowej wersji Perla, ale teraz można ją włączyć dla dowolnej kompilacji;
  • Połączenie flag „-Dv” (wyjście rozszerzonego debugowania) i „-Dr” (debugowanie wyrażeń regularnych) powoduje teraz włączenie wszystkich możliwych trybów debugowania wyrażeń regularnych;
  • Funkcje wcześniej przestarzałe zostały usunięte:
    • Teraz dostępne jako separator linii i znaki wieloznaczne dozwolony tylko do użytku grafemy (znaki złożone Unicode są niedozwolone).
    • Przerwane obsługa niektórych dawno przestarzałych form używania znaku „{” w wyrażeniach regularnych bez ucieczki przed nim.
    • Zakazany używając funkcji sysread(), syswrite(), recv() i send() z procedurami obsługi ":utf8".
    • Zabronione jest używanie definicji „my” w z natury fałszywych instrukcjach warunkowych (na przykład „moje $x jeśli 0”).
    • Usunięto obsługę specjalnych zmiennych „$*” i „$#”.
      Zakończono obsługę niejawnego wywoływania funkcji dump() (teraz należy jawnie określić CORE::dump()).

    • Funkcja File::Glob::glob została usunięta (należy użyć File::Glob::bsd_glob).
    • Dodano ochronę do pack() przed zwracaniem nieprawidłowych sekwencji Unicode.
    • Koniec wsparcia dla stosowania makr wykonujących operacje w formacie UTF-8 w kodzie XS (bloki C) został przesunięty na kolejną wersję.
  • Optymalizacje wydajności:
    • Przyspieszono operacje tłumaczenia z UTF-8 na układ znaków (punkt kodowy), na przykład, wykonanie operacji or(„\x7fff”) wymaga teraz o 12% mniej instrukcji. Zwiększono także wydajność operacji sprawdzających poprawność ciągów znaków UTF-8;
    • Wywołania rekurencyjne w funkcji finalize_op() zostały wyeliminowane;
    • Dokonano drobnych optymalizacji kodu pod kątem zwijania identycznych znaków i definiowania klas znaków w wyrażeniach regularnych;
    • Zoptymalizowany konwersja definicji typów ze znakiem na bez znaku (IV na UV);
    • Algorytm konwersji liczb całkowitych na ciąg został przyspieszony poprzez przetwarzanie dwóch cyfr na raz zamiast jednej;
    • Wprowadzono ulepszenia przeszkolony na podstawie analizy LGTM;
    • Zoptymalizowany kod w plikach regcomp.c, regcomp.h i regexec.c;
    • W wyrażeniach regularnych przetwarzanie wzorców takich jak „qr/[^a]/” ze znakami ASCII zostało znacznie przyspieszone.
  • Przywrócono obsługę platformy Minix3. Istnieje możliwość budowania przy użyciu kompilatora Microsoft Visual Studio 2019 (Visual C++ 14.2);
  • Zaktualizowane wersje modułów zawartych w pakiecie podstawowym. Moduły zostały usunięte z głównej kompozycji B::Debugowanie и Ustawienia regionalne::Kody.

Źródło: opennet.ru

Dodaj komentarz