Мэдээ

Python 3.15 албан ёсоор гарлаа: "lazy import" түлхүүр үг, frozendict төрөл ба JIT компиляторын бодит үсрэлт

TOGTOKHTOGTOKH·2026 оны аравдугаар сарын 10·0 үзсэн·
Python 3.15 албан ёсоор гарлаа: "lazy import" түлхүүр үг, frozendict төрөл ба JIT компиляторын бодит үсрэлт

CPython үндсэн хөгжүүлэлтийн баг дэлхийн хамгийн алдартай програмчлалын хэлнүүдийн нэг болох Python-ий шинэ тогтвортой хувилбар Python 3.15.0-ийг албан ёсоор нийтэд цацлаа. Нийт 1,012 хувь нэмэр оруулагчийн 5,643 коммит бүхий энэхүү хувилбар нь өнгөрсөн жилийн 3.14 хувилбараас хойш хийгдсэн хамгийн далайцтай шинэчлэл болж байна.

Хэрэв та CLI хэрэгслүүд, микросервис, өгөгдлийн сангийн pipeline эсвэл AI агент хөгжүүлдэг бол Python 3.15-д орсон шинэчлэлүүд таны өдөр тутмын кодын гүйцэтгэл болон архитектурт шууд нөлөөлөх болно. Шинэ хувилбарын хамгийн онцлох боломжуудыг хамтдаа тоймлон харцгаая.


1. PEP 810: "lazy import" — Startup хугацааг хэд дахин хэмнэнэ

Python хөгжүүлэгчдийн олон жилийн турш тулгарч ирсэн хамгийн том асуудлын нэг бол програмын эхлэх хугацаа (startup time) байсан юм. Өргөн хүрээний санг дуудахад тухайн файлыг бүхэлд нь уншиж, бүх хамаарлыг санах ойд байршуулах шаардлага гардаг байв. Жишээ нь, энгийн CLI хэрэгсэл зөвхөн --help гэсэн тушаалыг хэвлэхийн тулд хэдэн арван хүнд модолийг импортлох гэж 200-500мс саатдаг байсан билээ.

Python 3.15 нь энэ асуудлыг хэлний түвшинд lazy түлхүүр үгээр шийдэж байна:

lazy import numpy as np
lazy import tomllib

def parse_config(raw_data: str):
    # tomllib модулийг зөвхөн энэ мөрөнд дуудагдах үед л санах ойд ачаална
    return tomllib.loads(raw_data)

Энэ нь хэрхэн ажилладаг вэ?

  • Энгийн import хийх үед тухайн модуль шууд sys.modules-т бүртгэгддэг.
  • Харин lazy import хийх үед уг модуль sys.lazy_modules дотор хүлээгдэж, кодын гүйцэтгэлийн явцад тухайн сангийн ямар нэг функц, хувьсагчид хандах хүртэл ачаалагдахгүй.
  • Python 3.14-д орсон Type Annotation-ий хойшлуулалтын логиктой хоршин ажилладаг тул төрөл зааж (x: tomllib.TOMLDecodeError) бичихэд ч импорт дуудагдахгүй.

Энэхүү шинэчлэлийн ачаар микросервисүүдийн Cold Start хугацаа болон CLI аппликейшнуудын хариу үйлдэл үзүүлэх хурд үлэмж хэмжээгээр богиносож байна.


2. Суулгагдсан frozendict ба sentinel төрлүүд

Python-ий үндсэн санд олон жил хүсэн хүлээсэн хоёр шинэ суурь өгөгдлийн төрөл албан ёсоор нэмэгдлээ:

frozendict (PEP 814)

Өөрчлөгддөггүй (immutable), hashable толь бичгийн төрөл үндсэн хэлэнд шууд суурилагдлаа. Өмнө нь хөгжүүлэгчид гуравдагч сангууд эсвэл хүнд шийдэл ашигладаг байсан бол одоо тохиргооны объект (configuration), кэшийн түлхүүрүүд, утас хоорондын (thread-safe) найдвартай өгөгдөл солилцоонд frozendict-ийг стандартын дагуу ашиглаж болно.

config = frozendict({"env": "production", "port": 8080})
# config["port"] = 9000  # TypeError алдаа заана

sentinel (PEP 661)

Функцийн аргументад өгөгдөл дамжуулаагүйг (None биш, ямар ч утга өгөөгүйг) илэрхийлэхэд хөгжүүлэгчид ихэвчлэн _MISSING = object() хэлбэрийн хуурамч объектууд үүсгэдэг байсан. Харин PEP 661-ээр тусгай sentinel("MISSING") бүтцийг авчирч, төрөл тодорхойлох болон дибаг хийхэд илүү цэвэр, албан ёсны шийдэл болголоо.


3. Tracing JIT Компилятор: Бодит үр дүн эхэллээ

Python 3.13-т анх орж ирсэн Туршилтын JIT (Just-In-Time) компилятор нь анхандаа туршилтын загвар маягтай, бодит хурдны өсөлт төдийлөн харуулж чаддаггүй байв.

Python 3.15 хувилбарт JIT архитектурт шинэ Tracing Frontend-ийг нэвтрүүлснээр:

  • x86-64 Linux орчинд стандарт хөрвүүлэгчтэй харьцуулахад дунджаар 7-8%-ийн хурдны өсөлт;
  • AArch64 (Apple Silicon / ARM) macOS орчинд tail-calling хөрвүүлэгчээсээ 11-12%-ийн хурдны бодит өсөлт тус тус бүртгэгдсэн байна.

JIT нь цаашид Python-ийн CPU-intensive ачааллуудад хурд нэмэх гол суурь багана болж тогтворжиж байна.


4. No-GIL (Free-Threading) чиглэл дэх том алхам: Stable ABI

Python-ийн олон цөмт (multi-core) гүйцэтгэлийг боодог Global Interpreter Lock (GIL)-ийг халах ажил тууштай урагшилж байна.

Python 3.15 нь Free-threaded хувилбаруудад зориулсан Stable ABI (Application Binary Interface)-ийг албан ёсоор баталгаажууллаа. Энэ нь C/C++ болон Rust дээр бичигдсэн сангууд (жишээ нь NumPy, PyTorch, Polars гэх мэт) Python-ийн шинэчлэл бүрд дахин бүрэн хөрвүүлэгдэх шаардлагагүйгээр No-GIL орчинд тогтвортой, найдвартай ажиллах нөхцөлийг бүрдүүлж байна. Түүнчлэн албан ёсны macOS binary файлуудад free-threading дэмжлэгийг анхдагчаар суулгаж өгдөг болжээ.


5. Бусад чухал өөрчлөлтүүд

  • UTF-8 анхдагч кодчилол (PEP 686): Windows үйлдлийн систем дээр ажилладаг хөгжүүлэгчдэд байнга толгойн өвчин болдог байсан cp1252 зэрэг legacy encoding асуудал түүх болж, бүх платформууд дээр файлыг анхдагчаар UTF-8-аар уншиж бичдэг боллоо.
  • Comprehensions дотор задлах (PEP 798): List, set, dictionary comprehension дотор unpacking оператор (*, **) ашиглах боломжтой болов. Жишээ нь: [*group for group in matrix] эсвэл олон dict нэгтгэхэд илүү хялбар болжээ.
  • Tachyon статистик профайлер (PEP 799): Системийн хэмжээнд нарийвчлалтай шинжилгээ хийх өндөр давтамжит статистик sampling profiler үндсэн санд нэмэгдэв.
  • Terminal гаралтад өнгө нэмэгдэв: Алдааны мессежүүд болон traceback одоо терминал дээр илүү тодорхой, өнгө ялгасан байдлаар харагдана.

Хөгжүүлэгчид хэрхэн туршиж эхлэх вэ?

Хэрэв та төслүүддээ Astral-ийн uv хэрэгслийг ашигладаг бол дараах ганц тушаалаар Python 3.15-ыг шууд суулгаж, төсөлдөө туршиж үзэх боломжтой:

uv python install 3.15
uv run --python 3.15 app.py

Ruff, ty зэрэг томоохон хөгжүүлэлтийн хэрэгслүүд ч 3.15 хувилбарын lazy import синтакс болон шинэ дүрмүүдийг бүрэн дэмжиж шинэчлэгдсэнээ зарласан байна.

Дүгнэж хэлэхэд, Python 3.15 нь зөвхөн хэлний өнгө төрхийг өөрчилсөн төдий биш, бодит бүтээмж, эхлэлтийн хурд, системийн олон утаст боловсруулалтын ирээдүйг шийдсэн хөгжүүлэгчдийн хувьд нэн чухал үсрэлт болж чадлаа.


Эх сурвалж: Python Software Foundation (CPython 3.15.0 Release Notes), Astral Blog, InfoWorld

Сэтгэгдэл

Ачаалж байна...