Разработка ПО и Backend систем.

Там новая версия питона вышла, пошли посмотрим

Почти две недели назад вышла новая версия питончика — 3.14. Хочу осмотреться и выписать интересные изменения в сравнении с версией 3.13. Вообще давно хотел пробежаться по ченжлогу с версии 3.7, которая долго была в строю в качестве основной версии во многих компаниях(и наверняка где-то еще используется, мы вот в начале этого года перешли на 3.11), до текущих свежих версий.

Сразу в прод пускать новую версию мало кто будет(хотя может вы быстро переходите на новые версии, расскажите понравилось или нет), но в конечном итоге либо прыгнем на нее, либо перепрыгнем на более свежую версию, когда придет время. Погнали пробежимся по добавленым фичам.

Из интересного

  1. Официально можно вырубить GIL. Ребята перешли на вторую фазу проекта по отказу от GIL, в которой можно собрать CPython с флагом —disable-gil. До этого такие билды были эксперементальными, третьим этапом планируется по умолчанию быть дружелюбными к потокам.
  2. Выкатили эксперементальные сборки интерпретатора с JIT. Бинарники доступны для винды и маков, линуксоиды могли использовать и до сего момента.. В прод крайне не рекомендуют заносить, так как вместо увеличения производительности вы можете поймать наоборот словить даунгред. Сейчас получают как 20% прироста, так и 10% снижения производительности на тестах.

Из полезного

  1. Добавили новый тип строки template strings(t-строки) для шаблонизации. Такая строка разбивается на статические и «подставляемые» составляющие(те самые фигурные скобки из f-строк), для которых ввели специальный тип Interpolation, а сами t-строки имеют тип Template. Прикольное.
    Маленький пример:
from string.templatelib import Interpolation

def lower_upper(template):
    """Render static parts lowercase and interpolations uppercase."""
    parts = []
    for part in template:
        if isinstance(part, Interpolation):
            parts.append(str(part.value).upper())
        else:
            parts.append(part.lower())
    return ''.join(parts)

name = 'Wenslydale'
template = t'Mister {name}'
assert lower_upper(template) == 'mister WENSLYDALE'
  1. Добавили cli-команду для просмотра запущенных асинхронных тасок. Вывод похож на вывод команды ps, можно запросить древовидный вид. Однозначно приятное.
  2. Завезли UUID с 6 по 8 версии в модуль uuid, импрувнули скорость генерации для версии с 3 по 5.
  3. Теперь интерпретатор более дружелюбно подсказывает, где и как вы накосячили в коде, если находит синтаксическую ошибку.
  4. В копилку к дружелюбности: сейчас добавили ворнинги при использовании return/break/continue в блоке finally. В будущем планируют падать с ошибкой.

Из забавного

  1. Теперь группу отлавливаемых исключений в except и в except*(введен в версии 3.11, расскажу о нем в будущем) блоках можно писать без скобочек:
# Было
try:
    connect_to_server()
except (TimeoutError, ConnectionRefusedError):
    print('The network has ceased to be!')
	
# Стало
try:
    connect_to_server()
except TimeoutError, ConnectionRefusedError:
    print('The network has ceased to be!')

Лично меня скобочки не смущали, не совсем понял прикола, ну да ладно.

  1. Интерактивный интерпретатор теперь поддерживает цвета! Когда открывали его в последний раз? Признавайтесь.
  2. Консольный отладчик теперь можно удаленно натравить на работающий процесс. Им все же кто-то пользуется :)