Wydanie języka programowania Python 3.8

Po półtora roku rozwoju przedstawione główne wydanie języka programowania Python 3.8. Aktualizacje korygujące dla gałęzi Python 3.8 planowane wypuścić w ciągu 18 miesięcy. Krytyczne luki zostaną usunięte na 5 lat, do października 2024 r. Aktualizacje korygujące dla gałęzi 3.8 będą wydawane co dwa miesiące, przy czym pierwsze wydanie korygujące Pythona 3.8.1 zaplanowano na grudzień.

Wśród dodanych innowacje:

  • Wsparcie operacje przypisania w obrębie wyrażeń złożonych. Dzięki nowemu operatorowi „:=” możliwe jest wykonywanie operacji przypisania wartości wewnątrz innych wyrażeń, na przykład w celu uniknięcia podwójnych wywołań funkcji w instrukcjach warunkowych i podczas definiowania pętli:

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

    while (blok := f.read(256)) != ":
    ...

  • Wsparcie nowa składnia określania argumentów funkcji. Podczas wyliczania argumentów podczas definicji funkcji można teraz określić znak „/”, aby oddzielić argumenty, którym można przypisać wartości wyłącznie na podstawie kolejności wyliczania wartości podczas wywołania funkcji, od argumentów, które można przypisać w dowolnej kolejności (składnia zmienna=wartość)). Z praktycznego punktu widzenia, nowa funkcja pozwala funkcjom w Pythonie całkowicie emulować zachowanie istniejących funkcji w C, a także uniknąć wiązania z określonymi nazwami, na przykład jeśli planowana jest zmiana nazwy parametru w przyszłości.

    Flaga „/” stanowi uzupełnienie dodanej wcześniej flagi „*”, oddzielając zmienne, dla których obowiązuje wyłącznie przypisanie w postaci „zmienna=wartość”. Przykładowo w funkcji „def f(a, b, /, c, d, *, e, f):” zmienne „a” i „b” można przypisać tylko w kolejności, w jakiej podane są wartości ,
    zmienne „e” i „f” jedynie poprzez przypisanie „zmienna=wartość”, a zmienne „c” i „d” w dowolny z poniższych sposobów:

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

  • обавлен nowe API C
    do skonfigurowania parametrów inicjalizacji Pythona, umożliwiając pełną kontrolę nad wszystkim konfiguracja oraz zapewnianie zaawansowanych funkcji obsługi błędów. Proponowany interfejs API ułatwia osadzanie funkcjonalności interpretera Pythona w innych aplikacjach C;

  • Wdrożone nowy protokół Vectorcall umożliwiający szybszy dostęp do obiektów napisanych w języku C. w CPython 3.8 dostęp do Vectorcall nadal ograniczony jest do użytku wewnętrznego, w CPython 3.9 planowane jest przeniesienie do kategorii publicznie dostępnych API;
  • Dodany wywołania Runtime Audit Hooks, które zapewniają aplikacjom i frameworkom w Pythonie dostęp do informacji niskiego poziomu o postępie skryptu w celu audytu wykonywanych akcji (można na przykład śledzić import modułów, otwieranie plików, za pomocą śledzenia, dostęp do gniazd sieciowych, uruchamianie kodu poprzez exec, eval i run_mod);
  • W module marynata zabezpieczone obsługa protokołu Pickle 5, używanego do serializacji i deserializacji obiektów. Pickle pozwala zoptymalizować transfer dużych ilości danych pomiędzy procesami Pythona w konfiguracjach wielordzeniowych i wielowęzłowych poprzez zmniejszenie liczby operacji kopiowania pamięci i zastosowanie dodatkowych technik optymalizacji, takich jak wykorzystanie algorytmów kompresji specyficznych dla danych. Piąta wersja protokołu wyróżnia się dodaniem trybu transmisji pozapasmowej, w którym dane mogą być przesyłane oddzielnie od głównego strumienia piklującego.
  • Domyślnie aktywowana jest czwarta wersja protokołu Pickle, która w porównaniu do oferowanej domyślnie domyślnie trzeciej wersji pozwala na wyższą wydajność i zmniejszenie rozmiaru przesyłanych danych;
  • W module wpisując Wprowadzono kilka nowych funkcji:
    • Klasa Wpisano Dykt dla tablic asocjacyjnych, w których informacja o typie jest jawnie określona dla danych powiązanych z kluczami („TypedDict('Point2D', x=int, y=int, label=str)”).
    • Typ Dosłowne, co pozwala ograniczyć parametr lub wartość zwracaną do kilku predefiniowanych wartości („Literal['połączony', 'rozłączony']").
    • Projekt "koniec", co umożliwia zdefiniowanie wartości zmiennych, funkcji, metod i klas, których nie można zmienić ani ponownie przypisać („pi: Final[float] = 3.1415926536”).
  • Dodano możliwość przypisania pamięci podręcznej dla skompilowanych plików z kodem bajtowym, zapisanej w osobnym drzewie FS i oddzielonej od katalogów z kodem. Ścieżkę do zapisywania plików z kodem bajtowym ustawia się za pomocą zmiennej PREFIKS PYTHONPYCACHE lub opcja „-X pycache_prefix”;
  • Wdrożone możliwość tworzenia kompilacji debugujących Pythona korzystających z ABI identycznego z wersją, co pozwala na ładowanie w kompilacjach debugujących rozszerzeń napisanych w języku SI, skompilowanych dla wydań stabilnych;
  • f-strings (sformatowane literały poprzedzone „f”) zapewniają obsługę operatora = (na przykład „f'{expr=}'”), który umożliwia konwersję wyrażenia na tekst w celu łatwiejszego debugowania. Na przykład:

    ››› użytkownik = 'eric_idle'
    ››› członek_od = data(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    „user='eric_idle' member_since=datetime.date(1975, 7, 31)”

  • Wyrażenie "kontynuować» można stosować wewnątrz bloku w końcu;
  • Dodano nowy moduł pamięć wieloprocesowa.współdzielona, umożliwiający wykorzystanie segmentów pamięci współdzielonej w konfiguracjach wieloprocesowych;
  • Na platformie Windows implementacja asyncio została przeniesiona w celu korzystania z klasy ProactorZdarzeniePętla;
  • Wydajność instrukcji LOAD_GLOBAL została zwiększona o około 40% dzięki zastosowaniu nowego mechanizmu buforowania kodu obiektowego.

Źródło: opennet.ru

Dodaj komentarz