+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Python 3.8 – представлений значний реліз мови програмування Python

Python 3.8 - представлений значний реліз мови програмування Python

Представлено значний реліз мови програмування 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); /li>
  • У модулі pickle забезпечена підтримка протоколу Pickle 5, що використовується для серіалізації та десеріалізації об'єктів. Pickle дозволяє оптимізувати передачу великих обсягів даних між процесами Python у багатоядерних та багатовузлових конфігураціях, скоротивши кількість операцій копіювання пам'яті та застосовуючи додаткові техніки оптимізації, такі як використання специфічних для певних даних алгоритмів стиснення. П'ята версія протоколу примітна додаванням режиму відокремленої передачі (out-of-band), коли дані можуть передаватися окремо від основного потоку pickle.
  • За умовчанням активовано четверту версію протоколу Pickle, яка в порівнянні з третьою версією, що раніше пропонувалася за замовчуванням, дозволяє досягти більш високої продуктивності та скорочення розміру переданих даних;
  • У модулі typing представлено кілька нових можливостей:
    • Клас TypedDict для асоціативних масивів, в яких для зв'язуваних з ключами даних явно задається інформація про тип ("TypedDict('Point2D', x=int, y=int, label=str)").
    • Тип Literal, що дозволяє обмежити параметр або значення, що повертається декількома визначеними значеннями ("Literal['connected', 'disconnected']").
    • Конструкція "Final", що дає можливість визначити значення змінних, функцій, методів та класів, які не можуть бути змінені або перепризначені ("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)"
    
  • Вираз "continue" дозволяється використовувати всередині блоку finally;
  • Додано новий модуль multiprocessing.shared_memory, що дозволяє використовувати сегменти пам'яті, що розділяється, в багатопроцесних конфігураціях;
  • На платформі Windows реалізація asyncio переведена на використання класу ProactorEventLoop;
  • Продуктивність інструкції LOAD_GLOBAL збільшена приблизно на 40% за рахунок використання нового механізму кешування об'єктного коду.

Інші новини