Профиль: Аноним (вход | регистрация) неRU opennet.me  
OpenNET

[ новости /+++ | форум | теги |    ]

Выпуск языка программирования Python 3.15

10.10.2026 12:59 (MSK)

После года разработки опубликован значительный выпуск языка программирования Python 3.15. Среди изменений: включение по умолчанию UTF-8, отложенная загрузка модулей, оптимизация экспериментального JIT-компилятора, типы frozendict и sentinel, файлы конфигурации для инициализации при запуске, расширение возможностей для профилирования, сборка в режиме "-fno-omit-frame-pointer" и встроенная текстовая игра "whatsnewt". Новая ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.

Среди новшеств, добавленных в Python 3.15 (1, 2, 3):

  • Модернизирован экспериментальный JIT-компилятор, который теперь позволяет добиться в среднем ускорения на 11-12% на платформе macOS AArch64 и на 7-8% на платформе x86_64 Linux в тестах pyperformance по сравнению со стандартным интерпретатором. При этом в отдельных тестах при включении JIT изменение производительности варьируется от ускорения на более чем 100%, до замедления на 15%. Помимо оптимизации производительности и улучшения генерации машинного кода в новой версии в JIT переработан механизм трассировки, который теперь учитывает реальные последовательности выполнения кода, а не только их прогнозирует, что позволило значительно расширить поддержку операций на уровне байткода. Осуществлён переход на ветку LLVM 21. В генерируемом коде некоторые операции со стеком заменены на работу с использованием регистров CPU. Добавлена поддержка раскрутки стека (unwinding) для GDB и GNU backtrace().
  • В качестве кодировки по умолчанию задействована UTF-8, независимо от системы в которой выполняется код. Все операции ввода/вывода теперь обрабатывают текстовые данные как последовательности UTF-8, если явно не указана кодировка. Для использования параметров текущей локали или иной кодировки следует указывать аргумент "encoding" (например, "open('test.txt', encoding='locale')"). Отключить режим UTF-8 на уровне интерпретатора можно через опцию командной строки "-X utf8=0" или переменную окружения "PYTHONUTF8=0".
  • Добавлено ключевое слово "lazy" для отложенной загрузки модулей, при помощи которой можно ускорить запуск приложений с большим числом зависимостей. При отложенной загрузке модули загружаются непосредственно перед первым обращением к импортируемым именам в коде. До фактической загрузки для модулей создаётся легковесный прокси-объект "types.LazyImportType", отслеживающий обращение к модулям. В случае проблем с загрузкой модуля, например, если модуль не найден, исключение генерируется в момент попытки первого использования, а не во время импорта. Для принудительного отключения отложенной загрузки предусмотрена опция командной строки "-X lazy_imports" и переменная окружения PYTHON_LAZY_IMPORTS, а также функции sys.set_lazy_imports() и sys.get_lazy_imports(). Для выборочной фильтрации модулей, к которым применяется отложенная загрузка, добавлена функция sys.set_lazy_imports_filter().
    
       lazy import json
       lazy from pathlib import Path
    
       print("Starting up...")  # будет запущено не дожидаясь импорта json и pathlib.
    
       data = json.loads('{"key": "value"}')  # перед вызовом будет импортирован модуль json
       p = Path(".")  # перед вызовом будет импортирован модуль pathlib
    
  • Добавлен встроенный тип sentinel для создания уникальных строковых объектов, значения которых не повторяются, при копировании сохраняют идентичность и поддерживают сериализацию.
  • Добавлен встроенный тип frozendict, позволяющий создавать неизменяемые словари, которые можно инициализировать набором значений в момент создания объектов, но нельзя дополнять и изменять в процессе работы. Объекты с типом frozendict сохраняют порядок вставки элементов и могут хэшироваться для использования в качестве ключей в словарях.
  • Добавлена возможность распаковки списочных включений (comprehensions) для списков, множеств, словарей и выражений-генераторов, используя операторы "*" и "**" для совмещения произвольного числа словарей или итерируемых объектов в одну плоскую структуру.
    
       >>> lists = [[1, 2], [3, 4], [5]]
       >>> [*L for L in lists]  # эквивалентно указанию "[x for L in lists for x in L]"
       [1, 2, 3, 4, 5]
    
       >>> sets = [{1, 2}, {2, 3}, {3, 4}]
       >>> {*s for s in sets}  # эквивалентно "{x for s in sets for x in s}"
       {1, 2, 3, 4}
    
       >>> dicts = [{'a': 1}, {'b': 2}, {'a': 3}]
       >>> {**d for d in dicts}  #  эквивалентно "{k: v for d in dicts for k,v in d.items()}"
       {'a': 3, 'b': 2}
    
       >>> gen = (*L for L in lists)  # эквивалентно "(x for L in lists for x in L)"
       >>> list(gen)
       [1, 2, 3, 4, 5]
    
  • Добавлена возможность определения файлов конфигурации для безопасной инициализации пакетов при запуске интерпретатора Python, позволяющих использовать .start-файлы вместо .pth-файлов для выполнения кода на стадии до выполнения запускаемого содержимого. В .start-файлах указываются лишь точки входа в формате pkg.mod:callable, на основе которых Python находит и вызывает указанные функции без аргументов. Подобный подход решает проблему с отслеживанием скрытого выполнения кода при использовании файлов .pth, допускающих выполнение произвольного кода при запуске.
  • Улучшен вывод сообщений об ошибках. Реализован вывод рекомендаций при попытке обратиться к несуществующему атрибуту или удалить его. Например, интерпретатор даст знать, если атрибут отсутствует в объекте, но имеется во вложенном объекте или свойстве. При обнаружении несуществующего типа, имеющегося в JavaScript, Java, Ruby или C#, интерпретатор предложит эквивалент для Python.
    
       >>> print(container.area)
       ...
       AttributeError: 'Container' object has no attribute 'area'. Did you mean '.inner.area' instead of '.area'?
    
       >>> 'hello'.toUpperCase()
       ...
       AttributeError: 'str' object has no attribute 'toUpperCase'. Did you mean '.upper'?
    
  • Добавлен отдельный модуль profiling для доступа ко всем встроенным возможностям профилирования кода в одном пространстве имён (profiling.tracing и profiling.sampling). Реализован новый статистический профилировщик Tachyon (profiling.sampling), позволяющий анализировать производительность с практически нулевыми накладными расходами и поддерживающий профилирование на уровнях байткода и сопрограмм (async/await). В отличие от профилировщика profiling.tracing, в profiling.sampling периодически оценивается состояние стека вызовов, а не анализируется каждый вызов функции.
  • В модуле typing расширены возможности аннотирования типов при помощи классов TypedDict и TypeForm. В TypedDict добавлена поддержка аргументов closed и extra_items для более строгого контроля над структурой словаря. В TypeForm предложена новая форма аннотирования значений, связанных с типами (например, "int", "str | None", классы TypedDict и "list[int]").
    
       from typing import Any, TypeForm
    
       def cast[T](typ: TypeForm[T], value: Any) -> T: ...
    
  • В C API добавлен набор функций PyBytesWriter_* для создания бинарных объектов при разработке расширений на языке Си. Новый API позволяет добавлять данные в уже созданный байтовый буфер и обеспечивает автоматическое выделение памяти и изменение размера буфера. В C API также стабилизирован ABI для сборок без глобальной блокировки интерпретатора (GIL) и реализована защита от проблем, возникающих при завершении работы интерпретатора во время работы многопоточных C-расширений.
  • При сборке активированы флаги "-fno-omit-frame-pointer" и "-mno-omit-leaf-frame-pointer", включающие использование процессорного регистра %rbp в качестве базового указателя на кадр стека, содержащий адреса возврата и переменные функции (frame pointer). Использование указателя на кадры стека позволяет использовать дополнительные возможности для трассировки и профилирования системы.
  • Добавлена встроенная игра с текстовым интерфейсом, знакомящая разработчика с новыми возможностями Python 3.15. В игре предложено 18 головоломок, связанных с новшествами Python 3.15, для решения которых требуется написать и запустить код, использующий эти новшества. Для запуска игры следует выполнить команду "uvx --python 3.15 whatsnewt".

Дополнительно можно отметить начало альфа-тестирования ветки Python 3.16, которая будет находиться на стадии альфа-выпусков в течение семи месяцев, во время которых будут добавляться новые возможности и производиться исправление ошибок (в соответствии с новым графиком разработки работа над новой веткой начинается за пять месяцев до релиза предыдущей ветки и к моменту очередного релиза достигает стадии альфа-тестирования). После этого в течение трёх месяцев будет проводиться тестирование бета-версий, во время которого добавление новых возможностей будет запрещено и всё внимание будет уделяться исправлению ошибок. Последние два месяца перед релизом ветка будет находиться на стадии кандидата в релизы, на которой будет выполнена финальная стабилизация.

  1. Главная ссылка к новости (https://blog.python.org/2026/1...)
  2. OpenNews: В CPython реализована официальная поддержка архитектуры RISC-V
  3. OpenNews: Брешь в инфраструктуре Python, позволявшая подменить ссылки на релизы на сайте python.org
  4. OpenNews: Динамика изменения кодовой базы проекта Python
  5. OpenNews: CPython может сделать Rust обязательной сборочной зависимостью к версии 3.17
  6. OpenNews: Выпуск языка программирования Python 3.14
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/66438-python
Ключевые слова: python
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (28) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (3), 13:42, 10/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    > В качестве кодировки по умолчанию задействована UTF-8

    А что до этого было в третьебидоне?

     
     
  • 2.6, сиська (?), 14:19, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • –7 +/–
    как обычно - мусорный, однобайтный ansi, скорей всего
     
  • 2.7, Аноним (7), 14:19, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +4 +/–
    Кодировка бралась из системной локали
     
  • 2.8, User (??), 14:32, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +5 +/–
    "Ничего". Удивительно, да? Создатели языка считали, что если программист явным образом не изъявил желание написав encoding="utf-8", то параметр определяется платформой\пользователем.
    Хочет человек работать с koi8r - пусть работает, да. Но так как племя молодое, незнакомое о существовании чего-либо отличного от - не в курсе, пришлось вот приколачивать руками.
     
     
  • 3.24, Аноним (24), 15:38, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • –3 +/–
    > Но так как племя молодое, незнакомое о существовании чего-либо отличного от - не в курсе, пришлось вот приколачивать руками.

    Это были тёмные времена, хорошо что они позади. Вот ещё потихоньку отмирают сишные динозавры с мантрой "строка - это массив байт", забирая с собой целую эпоху уязвимостей. В ходе эволюции программирования всякие странные "плавники" и "ложноподии" отращивались, пришло время подчистить тупиковые ветки.

     
     
  • 4.26, Аноним (26), 15:49, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +4 +/–
    А что такое строка, если не массив байт?
     
     
  • 5.36, xPhoenix (ok), 18:07, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    На размышление даётся строка Unicode, где каждый символ закодирован либо одним либо двумя байтами.
     
  • 4.29, User (??), 16:07, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Ну, пожалуй что спорить и не буду, хорошо.
    И что "позади" - хорошо, и что "отмирают" - замечательно.

    Но в общем-то "были" и вполне объективно пенять змеюке что в 2008 гвоздями не приколотили я, пожалуй, не буду - там и без того весело было.

     
  • 4.35, Аноним (35), 17:43, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    >Вот ещё потихоньку отмирают сишные динозавры с мантрой "строка - это массив байт", забирая с собой целую эпоху уязвимостей.

    "Пользуясь случаем обосру ка я Си". Ничего у тебя не получится. Объективно конкурента чистому Си нет. Си и железо, как муж и жена, просто by design. Человек пишуший на низком уровне поймёт эту аналогию. Rust же настолько развит, что составляет конкуренцию, такому же развитому языку, как C++.

     

  • 1.4, Ivan_83 (ok), 13:49, 10/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/–
    > Добавлена встроенная игра с текстовым интерфейсом

    Ну вот и стало понятно куда оно дальше будет расти.
    Потом дюкнюхема встроят и надо будет бегать баги отсреливать, потом ещё чтонить из квейка, поле непаханное для прогресса ЯП!

     
     
  • 2.5, Ivan_83 (ok), 13:49, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Но следующей должна быть змейка, как же без этого :)
     
     
  • 3.9, Аноним (9), 14:35, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    А потом Doom?
     
     
  • 4.13, BrainFucker (ok), 14:43, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Было такое выражение doom scrolling, а это будет doom coding.
     
  • 3.11, BrainFucker (ok), 14:42, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Кстати, в советских игровых автоматах вроде как эту игру именно Питоном называли.
     

  • 1.10, inferrna (ok), 14:41, 10/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/–
    Версию 3.16 перепишут с нуля на расте.
    Запомните этот твит.
     
     
  • 2.21, dannyD (?), 15:26, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    ты забыл указать "кто" - m$ )))
     
  • 2.25, Аноним (24), 15:46, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Тем кто пишет на C++ биндинги что на раст, что на жутком си - всё едино.
     
  • 2.27, пох.. (?), 15:55, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    начнут переписывать. Но дальше CoC.md не уйдут.
     
  • 2.37, xPhoenix (ok), 18:09, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Скорей бы. О, сколько нас открытий чудных ждёт, когда код CPython как следует начнут пентестить...
     

  • 1.12, BrainFucker (ok), 14:43, 10/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/–
    А для кого новый синтаксический сахар в язык сейчас добавляют, если руками мало кто теперь будет кодить?
     
  • 1.15, Ivan_83 (ok), 14:50, 10/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/–
    > Добавлено ключевое слово "lazy" для отложенной загрузки модулей, при помощи которой можно ускорить запуск приложений с большим числом зависимостей.

    Лучше бы они сделали delay multithread загрузку.
    Типа приложение стартонуло а потом в отдельных потоках оно эти ненужноимпорты подтягивает чтобы когда они потребуются - уже были.

    С lazy это будет постоянное лагалово в непредсказуемых местах.

     
     
  • 2.17, Аноним (17), 15:02, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Пока не смотрел на 3.15, но вангану еще бОльшую проблему. Если раньше ошибка импорта была в начале загрузки модуля, то теперь ее надо будет ловить в непредсказуемом месте.
     
     
  • 3.18, Ivan_83 (ok), 15:08, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Я не пишу на питоне но у нас в продукте проблема с тем что импорт подгружает биндинг к С либе очень долго, при этом далеко не всегда к этому биндингу обращаются сразу после реалоада воркера.
     
  • 3.19, User (??), 15:12, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    а в новость смотрел?
    "В случае проблем с загрузкой модуля, например, если модуль не найден, исключение генерируется в момент попытки первого использования, а не во время импорта. Для принудительного отключения отложенной загрузки предусмотрена опция командной строки "-X lazy_imports" и переменная окружения PYTHON_LAZY_IMPORTS"(Ц)
     
  • 2.30, Горящая вата (?), 16:14, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    > С lazy это будет постоянное лагалово в непредсказуемых местах

    На твоей коре 2 дуба? Может быть

     
     
  • 3.34, Ivan_83 (ok), 17:33, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Да если бы это лечилось железом.
    Впрочем, там профайлером тоже не проходились.
     

  • 1.22, Аноним (22), 15:32, 10/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/–
    >После года разработки опубликован значительный выпуск языка программирования Python 3.15. Среди изменений: включение по умолчанию UTF-8

    Питонщики чо за хрень. 2026 год твою мать. Юникод давно стандарт.

     
     
  • 2.31, Аноним (31), 16:15, 10/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    >> Python now uses UTF-8 as the default encoding, independent of the system’s environment. This means that I/O operations without an explicit encoding,
    > Питонщики чо за хрень. 2026 год твою мать. Юникод давно стандарт.

    Эт да, считать что если юзверь выставил что-то другое, то он наверное лучше знает что ему нужно и его не обязательно осчастлививать прогрессом ... ну что со старых прдунов-лдиттов взять? Хорошо что их ушли - прогресс теперь будет семимильными шагами скакать!

    Хотя ж все таки недоработочка:
    > To retain the previous behaviour, Python’s UTF-8 mode may be disabled with the
    > PYTHONUTF8=0 environment variable or the -X utf8=0 command-line option.

    Зачем эти ненужные компромиссы? Пущай лучше все свои скрипты правят с явным указанием кодировки!

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    XSQUARE
    Inferno Solutions
    Hosting by Hoster.ru
    Хоcтинг: