Випуск мови програмування Python 3.8

Після півтора року розробки представлений значний реліз мови програмування Python 3.8. Коригувальні оновлення для гілки Python 3.8 планується Випускати протягом 18 місяців. Критичні вразливості виправлятимуться 5 років до жовтня 2024 року. Коригувальні оновлення для гілки 3.8 виходитимуть раз на два місяці, на грудень намічено перший коригуючий реліз Python 3.8.1.

Серед доданих нововведень:

  • Підтримка операцій присвоєння усередині складних виразів. За допомогою нового оператора «:=» з'явилася можливість виконувати операції присвоєння значень усередині інших виразів, наприклад, щоб уникнути подвійного виклику функцій в умовних операторах та при визначенні циклів:

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

    while (block := f.read(256)) != »:
    ...

  • Підтримка нового синтаксису завдання аргументів функції. При перерахуванні аргументів під час визначення функції тепер можна вказувати ознаку «/», що дозволяє відокремити аргументи, значення яким можуть бути присвоєні тільки на основі порядку перерахування значень під час виклику функції, від аргументів, які присвоюють у довільному порядку (синтаксис «змінна = значення») ). З практичної сторони нова можливість дозволяє у функціях мовою Python повністю емулювати поведінку існуючих функцій мовою Сі, а також уникнути прив'язок до конкретних імен, наприклад, якщо ім'я параметра планується змінити в майбутньому.

    Прапор «/» доповнює собою раніше доданий ознака «*», що відокремлює змінні, котрим застосовується лише присвоєння у вигляді «змінна=значення». Наприклад, функції «def f(a, b, /, c, d, *, e, f):» змінні «a» і «b» можуть бути присвоєні тільки в порядку перерахування значень,
    змінні "e" і "f", тільки через присвоєння "змінна = значення", а змінні "c" і "d" будь-яким із зазначених способів:

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

  • доданий новий Сі API
    для налаштування параметрів ініціалізації Python, що дозволяє повністю контролювати всю конфігурацію і надає розширені засоби обробки помилок. Запропонований API полегшує вбудовування функціональності інтерпретатора Python в інші додатки мовою Сі;

  • Реалізовано новий протокол Vectorcall для швидшого звернення до об'єктів, написаних мовою Сі. У CPython 3.8 доступ до Vectorcall поки обмежений внутрішнім використанням, переведення в розряд публічно доступних API намічено в CPython 3.9;
  • Додані виклики Runtime Audit Hooks, що надають програмам і фреймворкам мовою Python доступ до низькорівневої інформації про хід виконання скрипту для проведення аудиту виконуваних дій (наприклад, можна відстежити імпорт модулів, відкриття файлів, використання трасування, звернення до мережних сокетів, запуск коду через exec, eval та run_mod);
  • У модулі маринувати забезпечено підтримка протоколу Pickle 5, який використовується для серіалізації та десеріалізації об'єктів. Pickle дозволяє оптимізувати передачу великих обсягів даних між процесами Python у багатоядерних та багатовузлових конфігураціях, скоротивши кількість операцій копіювання пам'яті та застосовуючи додаткові техніки оптимізації, такі як використання специфічних для певних даних алгоритмів стиснення. П'ята версія протоколу примітна додаванням режиму відокремленої передачі (out-of-band), коли дані можуть передаватися окремо від основного потоку pickle.
  • За замовчуванням активовано четверту версію протоколу Pickle, яка в порівнянні з третьою версією, що раніше пропонувалася за замовчуванням, дозволяє досягти більш високої продуктивності і скорочення розміру переданих даних;
  • У модулі введення представлено кілька нових можливостей:
    • клас TypedDict для асоціативних масивів, у яких для зв'язуваних з ключами даних явно задається інформація про тип («TypedDict('Point2D', x=int, y=int, label=str)»).
    • Тип Буквальне, що дозволяє обмежити параметр або значення, що повертається декількома визначеними значеннями («Literal['connected', 'disconnected']»).
    • Конструкція «Остаточний«, що дозволяє визначити значення змінних, функцій, методів і класів, які можуть бути змінені чи перепризначені («pi: Final[float] = 3.1415926536»).
  • Додано можливість призначення кешу для скомпільованих файлів з байткодом, що зберігається в окремому дереві ФС та відокремленого від каталогів з кодом. Шлях для збереження файлів із байткодом задається через змінну PYTHONPYCACHEPREFIX або опцію "-X pycache_prefix";
  • Реалізовано можливість створення налагоджувальних складання Python, що використовують ідентичний з релізом ABI, що дозволяє в налагоджувальних складаннях завантажувати написані мовою СІ розширення, зібрані для стабільних випусків;
  • У f-рядках (форматовані літерали з префіксом 'f') забезпечено підтримку оператора «=» (наприклад, «f'{expr=}'»), що дозволяє перетворити вираз у текст для спрощення налагодження. Наприклад:

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

  • вираз «продовжувати» дозволено використовувати всередині блоку в кінці кінців;
  • Доданий новий модуль multiprocessing.shared_memory, що дозволяє використовувати сегменти пам'яті, що розділяється, в багатопроцесних конфігураціях;
  • На платформі Windows реалізація asyncio перекладена використанням класу ProactorEventLoop;
  • Продуктивність інструкції LOAD_GLOBAL збільшена приблизно на 40% рахунок використання нового механізму кешування об'єктного коду.

Джерело: opennet.ru

Додати коментар або відгук