Phát hành ngôn ngữ lập trình Python 3.8

Sau một năm rưỡi phát triển trình bày значительный релиз языка программирования Python 3.8. Корректирующие обновления для ветки Python 3.8 đã lên kế hoạch выпускать в течение 18 месяцев. Критические уязвимости будут исправляться 5 лет до октября 2024 года. Корректирующие обновления для ветки 3.8 будут выходить раз в два месяца, на декабрь намечен первый корректирующий релиз Python 3.8.1.

Среди добавленных đổi mới:

  • Hỗ trợ операций присвоения внутри сложных выражений. При помощи нового оператора «:=» появилась возможность выполнять операции присвоения значений внутри других выражений, например, чтобы избежать двойного вызова функций в условных операторах и при определении циклов:

    nếu (n := len(a)) > 10:
    ...

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

  • Hỗ trợ нового синтаксиса задания аргументов функции. При перечислении аргументов во время определения функции теперь можно указывать признак «/», позволяющий отделить аргументы, значения которым могут быть присвоены только на основе порядка перечисления значений во время вызова функции, от аргументов, допускающих присвоение в произвольном порядке (синтаксис «переменная=значение»). С практической стороны новая возможность позволяет в функциях на языке 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)

  • Thêm новый Си API
    для настройки параметров инициализации Python, позволяющий полностью контролировать всю cấu hình и предоставляющий расширенные средства обработки ошибок. Предложенный API упрощает встраивание функциональности интерпретатора Python в другие приложения на языке Си;

  • thực hiện новый протокол Vectorcall для более быстрого обращения к объектам, написанным на языке Си. В CPython 3.8 доступ к Vectorcall пока ограничен внутренним использованием, перевод в разряд публично доступных API намечен в CPython 3.9;
  • Thêm вызовы Runtime Audit Hooks, предоставляющие приложениям и фреймворкам на языке Python доступ к низкоуровневой информации о ходе выполнения скрипта для проведения аудита выполняемых действий (например, можно отследить импорт модулей, открытие файлов, использовании трассировки, обращения к сетевым сокетам, запуск кода через exec, eval и run_mod);
  • Trong mô-đun dưa chua bảo đảm поддержка протокола Pickle 5, используемого для сериализации и десериализации объектов. Pickle позволяет оптимизировать передачу больших объёмов данных между процессами Python в многоядерных и многоузловых конфигурациях, сократив число операций копирования памяти и применяя дополнительные техники оптимизации, такие как задействование специфичных для определённых данных алгоритмов сжатия. Пятая версия протокола примечательна добавлением режима отделённой передачи (out-of-band), при которого данные могут передаваться отдельно от основного потока pickle.
  • По умолчанию активирована четвёртая версия протокола Pickle, которая по сравнению с ранее предлагавшейся по умолчанию третьей версией позволяет добиться более высокой производительности и сокращения размера передаваемых данных;
  • Trong mô-đun представлено несколько новых возможностей:
    • lớp TypedDict для ассоциативных массивов, в которых для связываемых с ключами данных явно задаётся информация о типе («TypedDict(‘Point2D’, x=int, y=int, label=str)»).
    • Loại Nghĩa đen, позволяющий ограничить параметр или возвращаемое значение несколькими предопределёнными значениями («Literal[‘connected’, ‘disconnected’]»).
    • Thiết kế "Cuối cùng«, дающая возможность определить значения переменных, функций, методов и классов, которые не могут быть изменены или переназначены («pi: Final[float] = 3.1415926536»).
  • Добавлена возможность назначения кэша для скомпилированных файлов с байткодом, сохраняемого в отдельном дереве ФС и отделённого от каталогов с кодом. Путь для сохранения файлов с байткодом задаётся через переменную PYTHONPYCACHEPREFIX или опцию «-X pycache_prefix»;
  • thực hiện возможность создания отладочных сборок 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)»

  • Выражение «tiếp tục» разрешено использовать внутри блока cuối cùng;
  • Đã thêm một mô-đun mới multiprocessing.shared_memory, позволяющий использовать сегменты разделяемой памяти в многопроцессных конфигурациях;
  • На платформе Windows реализация asyncio переведена на использование класса ProactorEventLoop;
  • Производительность инструкции LOAD_GLOBAL увеличена примерно на 40% за счёт использования нового механизма кэширования объектного кода.

Nguồn: opennet.ru

Thêm một lời nhận xét