Після року опубліковано значний випуск мови програмування Python 3.13. Нова гілка підтримуватиметься протягом півтора року, після чого ще три з половиною роки для неї формуватимуться виправлення з усуненням уразливостей.
Серед доданих до Python 3.13 нововведень:
- Додана експериментальна реалізація JIT-компілятора, що дозволяє досягти суттєвого підвищення продуктивності. Для включення JIT до CPython додана збірна опція «—enable-experimental-jit», використання якої вимагає встановлення LLVM як додаткової залежності. Процес трансляції машинного коду в JIT побудований з використанням архітектури "Copy-and-Patch", за якої за допомогою LLVM збирається об'єктний файл у форматі ELF, що містить дані про інструкції байткоду та інформацію про необхідну заміну даних. JIT замінює згенеровані в ході інтерпретації програми інструкції байткоду на їх подання в машинному коді, принагідно підставляючи необхідні для обчислень дані (JIT копіює готові шаблони вже скомпільованих функцій і підставляє в них необхідні значення, такі як аргументи та константи).
- Доданий експериментальний режим складання CPython без глобального блокування інтерпретатора (GIL, Global Interpreter Lock), який включається за допомогою опції «without-gil» і дозволяє позбавитися проблеми з розпаралелювання операцій на багатоядерних системах, викликаної тим, що глобальне блокування не допускає паралельне звернення до об'єктів, що розділяються, з різних потоків. Відключення GIL призводить до додаткових накладних витрат, викликаних змінами у збирачі сміття, системі управління пам'яттю та примітивах для організації блокувань. Наприклад, через використання підрахунку посилань для ізоляції потоків спостерігається зниження продуктивності однопотокових сценаріїв приблизно на 10%. При цьому такі накладні витрати можуть компенсуватися розпаралелюванням операцій.
- Запропоновано новий покращений інтерактивний інтерпретатор, заснований на напрацюваннях проекту PyPy і що підтримує такі можливості, як багаторядкове редагування, збереження та перегляд історії, кольорове оформлення запитів та трасувань, використання REPL-подібних команд (help, exit, quit тощо) без залучення функцій, інтерактивна довідка, режим вставлення великих блоків коду.
- Семантика вбудованої функції locals(), що повертає всі локальні змінні та їх значення у поточній області видимості, змінена для оптимізованих областей видимості, таких як функції, генератори та співпрограми, для яких тепер повертаються незалежні снапшоти виставлених на даний момент локальних змінних та не локальних змінних, відбитих у замиканнях.
- За умовчанням включена змінена версія бібліотеки mimalloc з відкритою компанією Microsoft системою розподілу пам'яті, що демонструє дуже високу продуктивність. Бібліотека задіяна при збиранні без GIL.
- Забезпечено очищення компілятором лідируючих прогалин з кожного документуючого рядка (docstring), що дозволило скоротити пам'ять, що споживається, і зменшити розмір кешу з байткодом (файлів .pyc).
- У модулі dbm реалізовано бекенд dbm.sqlite3, який використовує SQLite і застосовується за умовчанням під час створення нових файлів.
- Реалізовано підтримку вказівок значень за умовчанням у параметрах типів (typing.TypeVar, typing.ParamSpec та typing.TypeVarTuple). Наприклад: 'T = TypeVar('T', default=int)'.
- Додана нова інструкція typing.TypeIs для уточнення типів, більш інтуїтивно зрозуміла, ніж typing.TypeGuard.
- Додана можливість використання інструкції typing.ReadOnly для позначення елементів TypeDicts, доступних тільки для читання.
- Додано нову інструкцію warnings.deprecated() для позначення застарілих елементів у системі типів.
- Зі стандартної бібліотеки видалені модулі aifc, audioop, chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu, xdrlib і lib2to3, раніше об'явлений.
- До модуля copy додано функцію copy.replace().
- модуль os додані функції для роботи з таймером через дескриптори timerfd.
- Для модуля random реалізовано інтерфейс командного рядка.
- Припинено підтримку версій macOS з 10.9 до 10.12.
- Забезпечена підтримка мобільних платформ iOS та Android, яка віднесена до третього рівня (Tier 3), на якому гарантується надійне складання та супровід платформи забезпечує як мінімум один ключовий розробник, але пов'язані з платформою збої не блокують реліз і не охоплюються SLA-підтримкою.
- Підтримка платформи wasm32-wasi (WebAssembly System Interface) переведена на другий рівень, на якому збої блокують реліз, а їх зміни, що викликають, виправляються або скасовуються протягом 24 годин. Припинено офіційну підтримку платформи wasm32-emscripten.
Найближчим часом розпочнеться альфа-тестування гілки Python 3.14, яка перебуватиме на стадії альфа-випусків протягом семи місяців, під час яких будуть додаватися нові можливості та проводитися виправлення помилок (відповідно до нового графіка розробки робота над новою гілкою починається за п'ять місяців. до релізу попередньої гілки і на момент чергового релізу досягає стадії альфа-тестування). Після цього протягом трьох місяців буде проводитися тестування бета-версій, під час якого додавання нових можливостей буде заборонено і вся увага приділятиметься виправленню помилок. Останні два місяці перед релізом гілка перебуватиме на стадії кандидата у релізи, на якій буде виконано фінальну стабілізацію.
Джерело: opennet.ru
