Przygotowania trwają
Przed wydaniem oficjalnej wersji programiści planowali wypuścić sześć wersji alfa, pięć wersji beta (preview) i dwie wersje release candidate. Wydany został już pierwszy RC (publikacja 11 sierpnia a druga wersja RC powinna się pojawić w okolicach 14 września.
Podstawowe zmiany w skrócie
Wprowadzonych zostanie kilka znaczących zmian, które zdecydowanie wpłyną na sposób działania programów w Pythonie. Otrzymamy nowy parser oparty na Parsing Expression Grammar (PEG), dodane zostaną nowe Union Operators: merge | i update |=, Python wzbogaci się też o moduł graphlib. Zmian jest na tyle dużo, że na pewno będziemy jeszcze o nich pisać – na razie skoncentrujmy się na kilku z nich.
Nowy parser
W przeciwieństwie do starszego parsera LL, zaktualizowana wersja oferuje kilka kluczowych różnic, które czynią ją bardziej elastyczną i przyszłościową. Zasadniczo w LL programiści Pythona wykorzystali kilka hacków, aby uniknąć jego ograniczeń. To z kolei wpływało na elastyczność dodawania nowych funkcji.
Główną różnicą między PEG a parserami opartymi na gramatyce bezkontekstowej (takim jest właśnie LL) jest to, że w PEG operator wyboru jest uporządkowany. O co chodzi?
Załóżmy, że napiszemy regułę: A | B | C. Obecnie parser LL wygeneruje konstrukcje, aby stwierdzić, który składnik alternatywy (A, B lub C) musi zostać rozwinięty. PEG tymczasem spróbuje sprawdzić, czy pierwsza alternatywa (np. A) się powiedzie, czy nie. Przejdzie do następnej alternatywy tylko wtedy, gdy A się nie powiedzie. Krótko mówiąc, PEG sprawdzi alternatywy w kolejności, w jakiej zostały zapisane.
Strefy czasowe
Python 3.2 wprowadził klasę datetime.timezone. Zasadniczo jego głównym celem było zapewnienie wsparcia dla stref czasowych UTC. W rzeczywistości jednak lokalna strefa czasowa jest nadal niedostępna.
W Pythonie 3.9 zostanie dodana obsługa bazy danych stref czasowych IANA. W większości przypadków ta baza danych jest również nazywana „tz” lub bazą danych Olson. Nie można więc się pomylić z tymi terminami. Wszystkie funkcje stref czasowych IANA są zawarte w module zoneinfo. Ta baza danych jest bardzo popularna i szeroko rozpowszechniona w systemach operacyjnych typu Unix. Trzeba jednak nadal pamiętać, że system Windows używa zupełnie innej metody obsługi stref czasowych.
Nowe operatory
Dodane zostaną nowe operatory do operacji na zbiorach. W poprzednich wersjach Pythona scalanie lub aktualizowanie dwóch słowników nie było zbyt wydajne. Dlatego deweloperzy tego języka wprowadzają operatorów takich jak | do łączenia i | = do aktualizacji słowników.
Na przykład gdy obecnie używamy d1.update(d2)
to modyfikuje to również d1. Aby to naprawić, musimy zaimplementować mały „hack”, taki jak e=d1.copy (); e.update(d2)
. Tworzymy więc nową zmienną tymczasową do przechowywania wartości. Ale to rozwiązanie nie jest zbyt wydajne. To główny powód dodania nowych operatorów.
Wprowadzenie removeprefix () i removesuffix ()
Czy kiedykolwiek odczuwałeś potrzebę łatwego usunięcie przedrostku lub sufiksu z danego ciągu? Teraz masz do dyspozycji str.lstrip([chars])
i str.rstrip([chars])
, które mogą to zrobić. Ale tutaj zaczyna się też pewne zamieszanie. W rzeczywistości te funkcje działają z zestawem znaków zamiast z podłańcuchem. Dlatego zdecydowanie potrzebne są oddzielne funkcje, które mogą usuwać podciąg z początku lub końca łańcucha. Innym powodem zapewniania wbudowanej obsługi removeprefix()
i removesuffix()
jest fakt, że twórcy aplikacji zwykle piszą tę funkcję samodzielnie. Ale w większości przypadków popełniają błędy podczas obsługi pustych ciągów. Dlatego wbudowane rozwiązanie może być pomocne.