Wydanie języka programowania Python 3.8

Po półtora roku prac rozwojowych zaprezentowano znacząca wersja języka programowania Python 3.8. Poprawki do gałęzi Python 3.8 jest planowany będą wydawane przez 18 miesięcy. Krytyczne luki bezpieczeństwa będą naprawiane przez 5 lat do października 2024 roku. Poprawki dla gałęzi 3.8 będą wydawane co dwa miesiące, pierwsza poprawka do Python 3.8.1 zaplanowana jest na grudzień.

Wśród dodanych nowości:

  • Wsparcie operacji przypisania wewnątrz złożonych wyrażeń. Dzięki nowemu operatorowi „:=” można przeprowadzać operacje przypisania wartości wewnątrz innych wyrażeń, na przykład aby uniknąć podwójnego wywołania funkcji w instrukcjach warunkowych i przy definiowaniu pętli:

    if (n := len(a)) > 10:

    while (block := f.read(256)) != '';

  • Wsparcie nowej składni definiowania argumentów funkcji. Podczas wymieniania argumentów przy definiowaniu funkcji teraz można wskazać znacznik „/”, który oddziela argumenty, którym można przypisać wartości wyłącznie na podstawie kolejności, w jakiej wartości są podawane podczas wywoływania funkcji, od argumentów, które mogą być przypisane w dowolnej kolejności (składnia „zmienna=wartość”). Z praktycznego punktu widzenia nowa funkcjonalność pozwala w funkcjach języka Python w pełni emulować zachowanie istniejących funkcji języka C, a także uniknąć powiązań z konkretnymi nazwami, na przykład, jeśli nazwa parametru ma się zmienić w przyszłości.

    Flaga „/” uzupełnia wcześniej wprowadzony znacznik „*”, oddzielający zmienne, dla których zastosowanie ma tylko przypisanie w formie „zmienna=wartość”. Na przykład w funkcji „def f(a, b, /, c, d, *, e, f):” zmienne „a” i „b” mogą być przypisane tylko w kolejności wymieniania wartości,
    zmienne „e” i „f”, tylko poprzez przypisanie „zmienna=wartość”, a zmienne „c” i „d” dowolnym z wymienionych sposobów:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, c=30, d=40, e=50, f=60)

  • Dodano nowe API C
    do konfiguracji parametrów inicjalizacji Pythona, pozwalające na pełną kontrolę nad wszystkim konfiguracji i oferujące rozszerzone możliwości obsługi błędów. Zaproponowane API upraszcza integrację funkcjonalności interpreterów Pythona w innych aplikacjach języka C;
  • Zrealizowano nowy protokół Vectorcall do szybszego dostępu do obiektów napisanych w języku C. W CPython 3.8 dostęp do Vectorcall jest obecnie ograniczony do użytku wewnętrznego, a wprowadzenie go do publicznie dostępnych API planowane jest na CPython 3.9;
  • Dodano wywołania Runtime Audit Hooks, które umożliwiają aplikacjom i frameworkom w języku Python dostęp do niskopoziomowych informacji o przebiegu wykonywania skryptu w celu audytu wykonywanych działań (na przykład można śledzić import modułów, otwieranie plików, korzystanie z trace, dostęp do gniazd sieciowych, uruchamianie kodu za pomocą exec, eval i run_mod);
  • W module pickle zapewniona wsparcie dla protokołu Pickle 5, stosowanego do serializacji i deserializacji obiektów. Pickle umożliwia optymalizację przesyłania dużych ilości danych między procesami Python w konfiguracjach wielordzeniowych i wielowęzłowych, zmniejszając liczbę operacji kopiowania pamięci i stosując dodatkowe techniki optymalizacji, takie jak wykorzystanie specyficznych dla danych algorytmów kompresji. Piąta wersja protokołu wyróżnia się dodaniem trybu oddzielonego przesyłania (out-of-band), w którym dane mogą być przesyłane niezależnie od głównego strumienia pickle.
  • Domyślnie aktywowana jest czwarta wersja protokołu Pickle, która w porównaniu do wcześniej oferowanej domyślnie trzeciej wersji umożliwia osiągnięcie wyższej wydajności i zmniejszenie rozmiaru przesyłanych danych;
  • W module typing wprowadzono kilka nowych możliwości:
    • Klasa TypedDict dla tablic asocjacyjnych, w których dla powiązanych z kluczami danych jawnie określa się informacje o typie („TypedDict(‘Point2D’, x=int, y=int, label=str)”).
    • Typ Literal, umożliwiający ograniczenie parametru lub wartości zwracanej do kilku zdefiniowanych wartości („Literal[‘connected’, ‘disconnected’]”).
    • Konstrukcja „Final„, dająca możliwość określenia wartości zmiennych, funkcji, metod i klas, które nie mogą być zmieniane ani przypisane na nowo („pi: Final[float] = 3.1415926536”).
  • Dodano możliwość przypisania pamięci podręcznej dla skompilowanych plików z bajtkodem, przechowywanych w osobnym drzewie systemu plików i oddzielonych od katalogów z kodem. Ścieżka do zapisywania plików z bajtkodem jest określana za pomocą zmiennej PYTHONPYCACHEPREFIX lub opcji „-X pycache_prefix”;
  • Zrealizowano możliwość tworzenia pułapek debugowania Pythona, które używają identycznego ABI do wersji produkcyjnej, co pozwala na ładowanie w pułapkach debugowania rozszerzeń napisanych w C, skompilowanych dla stabilnych wydań;
  • W f-stringach (literały formatowane z prefiksem 'f') wprowadzono wsparcie dla operatora '=' (na przykład 'f'{expr=}''), umożliwiającego konwersję wyrażenia na tekst w celu uproszczenia debugowania. Na przykład:

    ››› user = 'eric_idle'
    ››› member_since = date(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    «user='eric_idle' member_since=datetime.date(1975, 7, 31)»

  • Wyrażenie «continue» można używać wewnątrz bloku finally;
  • Dodano nowy moduł multiprocessing.shared_memory, umożliwiającym korzystanie z segmentów współdzielonej pamięci w konfiguracjach wieloprocesowych;
  • Na platformie Windows implementacja asyncio została przekształcona na użycie klasy ProactorEventLoop;
  • Wydajność instrukcji LOAD_GLOBAL zwiększyła się o około 40% dzięki zastosowaniu nowego mechanizmu cache’owania kodu obiektowego.

Ź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