ProIT: медіа для профі в IT
3 хв.

Найкращі нові функції та виправлення в Python 3.13

author avatar ProIT NEWS

Вийшла перша бета-версія Python 3.13. У статті InfoWorld представлено виклад найважливіших нових функцій у Python 3.13 і їхнє значення для розробників Python.

Нові функції в першій бета-версії Python 3.13

Ось перший погляд на ці нові функції в бета-версії Python 3.13:

  • Експериментальна JIT.
  • Збірка Python без GIL.
  • Новий REPL.
  • Покращено повідомлення про помилки.
  • Покращення типів Python.
  • Більше ніяких «розряджених батарей».

Експериментальна JIT

Python 3.11 представив спеціалізований адаптивний інтерпретатор. Коли інтерпретатор виявляє, що деякі операції передбачувано включають однакові типи, ці операції є спеціалізованими. Загальний байт-код, який використовується для цього коду, замінюється на байт-код, специфічний для роботи з цими типами. Це забезпечує прискорення швидкості на 10%–25% для цих областей коду.

Python 3.12 приніс більше спеціалізацій та інших удосконалень інтерпретатора. Тепер Python 3.13 додає нові елементи до JIT, які генерують фактичний машинний код під час виконання, а не лише спеціалізований байт-код. Отримане прискорення поки що невелике (можливо, 5%), але воно прокладає шлях для майбутніх оптимізацій, які раніше були неможливими.

Наразі JIT вважається експериментальним. Його не увімкнено за замовчуванням і його можна увімкнути лише шляхом компіляції CPython із джерела з певними прапорцями. Якщо з часом це дасть значне підвищення продуктивності (на 5% або більше) і не накладе великого тягаря керування на команду CPython або користувачів Python загалом, він стане повністю підтримуваним варіантом збірки. Чи буде це увімкнено для офіційних випусків, все одно вирішувати менеджерам збірок CPython для цієї платформи.

Цикл випуску Python

Мова програмування Python щороку випускає нові версії: бета-версію із блокуванням функцій у першій половині року й остаточний випуск наприкінці року. Розробникам пропонується випробувати цю останню версію на невиробничому коді, щоб переконатися, що він працює з їхніми програмами, а також щоб отримати уявлення про те, чи отримає ваш код користь від нових наборів функцій і покращень продуктивності у цій останній версії.

Безпотокова збірка Python без GIL

Офіційним терміном для можливих майбутніх версій CPython без глобального блокування інтерпретатора (або GIL) є «вільний потоковий CPython». Ця збірка CPython дозволяє потокам виконуватися повністю паралельно без посередництва GIL.

Безкоштовний CPython також є експериментальним. Він не увімкнений за замовчуванням у надісланих збірках, тому його потрібно увімкнути під час компіляції. Якщо майбутня робота з безкоштовними потоковими збірками покаже, що вони можуть покращити багатопотокову продуктивність без впливу на однопотокову продуктивність, її буде підвищено до повністю підтримуваної опції. Згодом безкоштовна збірка CPython може стати типовою.

Новий REPL

REPL, або інтерактивний інтерпретатор, запускається, коли ви запускаєте Python із командного рядка без виконання програми. REPL Python 3.13 має покращення, щоб зробити його менш важким і більше схожим на справжній редактор.

Покращено повідомлення про помилки

Сліди помилок у Python стали більш точними та детальними протягом останніх двох випусків. Python 3.13 продовжує рух у цьому напрямі.

  • Якщо ви спробуєте імпортувати щось, що має таке ж ім’я, як і модуль, який зараз перебуває в контексті, то Python надасть детальну помилку щодо цього та заохотить вас перейменувати поточний модуль. Це дуже часте джерело помилок не лише для новачків. Поширеною помилкою є назвати модуль за назвою стандартної бібліотеки.
  • Якщо ви передаєте функції неправильний аргумент ключового слова, помилка запропонує деякі можливі правильні аргументи на основі того, що доступно у функції, яка викликається.

Покращення типів Python

З кожною новою версією система підказок типів Python розширювала функціональність і корисність. Оголошення версії 3.13 має три великі нові зміни.

  • Параметри типу підтримують значення за замовчуванням

typing.TypeVar, typing.ParamSpec і typing.TypeVarTuple дозволяють визначити значення за замовчуванням, які будуть використовуватися, якщо тип не вказано явно. Наприклад:

T = TypeVar("T", default=str)

У випадках, коли T не визначено явно під час використання, str вважається типовим.

  • typing.TypeIs для звуження типу

Загалом у Python ми можемо використовувати isinstance() для ухвалення рішень на основі того, чи є щось цим типом. typing.TypeIs дає нам змогу робити те саме у механізмах підказки типів Python.

Таким чином, функції, які використовуються для перевірки того, чи є щось заданим типом, можуть бути анотовані, щоб показати, що вони виконують цю поведінку звуження, а не просто тип повернення. Це корисно як спосіб додати до цих функцій точне покриття перевірки типів.

  • typing.ReadOnly для анотації лише для читання

Тип typing.TypedDict було створено для анотування словників із фіксованими типами для значень, пов’язаних із певними ключами.

typing.Readonly дозволяє вам коментувати певні значення у TypedDict як лише для читання. Прикладом є список, до якого можна лише щось додати або витягнути, а не замінити рядком або іншим типом.

Більше ніяких «розряджених батарей»

Python 3.11 виявив безліч модулів стандартної бібліотеки Python, які були застарілими та більше не підтримувалися. План полягав у тому, щоб позначити їх як застарілі для 3.11 і 3.12, а потім повністю видалити їх у Python 3.13.

Нині ці «розряджені батареї» (як їх називають) вилучено назавжди. Багато видалених модулів можна замінити модулями сторонніх розробників або їхні функціональні можливості можна емулювати за допомогою інших компонентів стандартної бібліотеки.

Також користувачі можуть очікувати, що наступні три версії Python припинять більше. Більшість із них є методами для різних компонентів стандартної бібліотеки, які рідко використовуються або не задокументовані.

Раніше ProIT розповідав, що новий проєкт Python під назвою Wall of Flippers виявляє спам-атаки Bluetooth, запущені пристроями Flipper Zero та Android.

Підписуйтеся на ProIT у Telegram, щоб не пропустити жодної публікації!

Приєднатися до company logo
Продовжуючи, ти погоджуєшся з умовами Публічної оферти та Політикою конфіденційності.