İçeriğe geç
BilgiKütüphanesi
Programlama

Python 3.15 Yayınlandı: Lazy Import, frozendict ve Daha Hızlı JIT

Python 3.15, 9 Ekim 2026'da yayınlandı. Açık lazy import söz dizimi, yerleşik frozendict ve sentinel tipleri, varsayılan UTF-8 kodlaması, yeni profiling paketi ve belirgin biçimde hızlanan deneysel JIT derleyici sürümün öne çıkan başlıkları.

İlk yayın: 4 dk okuma3 kaynak

Python'un yıllık ana sürümü 3.15, resmi "What's New" belgesine göre 9 Ekim 2026'da yayınlandı. Bu sürüm tek bir büyük özellikten çok, günlük kod yazımını ve üretimdeki performans analizini doğrudan etkileyen birçok somut iyileştirme getiriyor. Aşağıda en önemli değişiklikleri ve yükseltme öncesi kontrol etmeniz gerekenleri derledik.

Açık lazy import (PEP 810)

En çok konuşulacak yenilik, lazy adlı yeni yumuşak anahtar kelime. Bir modülü lazy ile içe aktardığınızda modül, adı ilk kez kullanılana kadar gerçekten yüklenmiyor:

lazy import json
lazy from pathlib import Path
 
print("Başlıyor...")           # json ve pathlib henüz yüklenmedi
data = json.loads('{"a": 1}')  # json burada yükleniyor

Bu özellik özellikle çok sayıda bağımlılığı olan CLI araçlarında ve kısa ömürlü betiklerde başlangıç süresini kısaltmak için tasarlandı. Kısıtlamalar da net: lazy yalnızca modül düzeyinde kullanılabiliyor; lazy from modul import * ve lazy from __future__ import ... biçimleri SyntaxError veriyor.

Yeni yerleşik tipler: frozendict ve sentinel

frozendict (PEP 814) değiştirilemez bir sözlük tipi. Tüm anahtar ve değerleri hashlenebilir olduğunda kendisi de hashlenebilir, yani küme elemanı ya da başka bir sözlüğün anahtarı olarak kullanılabilir. Önemli bir ayrıntı: frozendict, dict sınıfının alt sınıfı değil. isinstance(x, dict) kontrolüne dayanan kodlar bu tipi sözlük olarak görmeyecek.

a = frozendict(x=1, y=2)
a["z"] = 3  # TypeError: 'frozendict' object does not support item assignment

sentinel (PEP 661) ise "değer verilmedi" gibi durumları ifade etmek için kullanılan benzersiz işaret değerlerini standart hale getiriyor. Yıllardır _MISSING = object() gibi elle yazılan kalıpların yerini, okunaklı bir temsil sunan yerleşik bir tip alıyor.

UTF-8 artık varsayılan (PEP 686)

Python 3.15 ile birlikte varsayılan metin kodlaması, sistem ayarlarından bağımsız olarak UTF-8 oldu. encoding parametresi verilmeden yapılan open("dosya.txt") gibi çağrılar artık her platformda UTF-8 kullanıyor. Bu değişiklik özellikle Windows'ta yerel kod sayfasına bağlı olarak farklı davranan kodlar için bir sınıf hatayı ortadan kaldırıyor. Eski davranışa ihtiyaç duyan uygulamalar PYTHONUTF8=0 ortam değişkeni ya da -X utf8=0 seçeneğiyle geri dönebiliyor.

Comprehension içinde unpacking (PEP 798)

Liste, küme ve sözlük comprehension'ları ile generator ifadeleri artık * ve ** açma işlemlerini destekliyor. İç içe listeleri düzleştirmek tek satıra iniyor:

lists = [[1, 2], [3, 4], [5]]
[*L for L in lists]  # [1, 2, 3, 4, 5]

Profiling için yeni paket ve Tachyon (PEP 799)

Standart kütüphaneye profiling adlı yeni bir paket eklendi. profiling.tracing klasik deterministik profiler'ı, profiling.sampling ise Tachyon adlı yeni örnekleme tabanlı profiler'ı içeriyor. Belgelere göre Tachyon saniyede 1.000.000'a kadar örnekleme yapabiliyor ve çalışan bir sürece PID ile, kodda değişiklik gerektirmeden bağlanabiliyor. Bu, üretimdeki yavaşlıkları yeniden başlatma yapmadan incelemek için önemli bir kolaylık.

cProfile geriye dönük uyumluluk için takma ad olarak kalıyor; eski profile modülü ise kullanımdan kaldırıldı ve 3.17'de tamamen silinecek. Bunu destekleyen bir değişiklik de PEP 831: desteklenen platformlarda frame pointer'lar artık varsayılan olarak açık. Bu sayede profiler ve debugger'lar yığın izlerini daha güvenilir çıkarabiliyor.

JIT derleyici belirgin şekilde hızlandı

Deneysel JIT derleyici hâlâ deneysel statüde, ancak bu sürümde ciddi bir güncelleme aldı. Resmi belgede pyperformance ile ölçülen sonuçlar şöyle veriliyor:

  • x86-64 Linux'ta standart yorumlayıcıya göre geometrik ortalamada %7-8 iyileşme,
  • AArch64 macOS'ta tail-calling yorumlayıcıya göre %11-12 hızlanma,
  • tekil benchmark'larda yaklaşık %15 yavaşlamadan %100'ün üzerinde hızlanmaya kadar uzanan bir aralık.

Bu kazanımların arkasında çalışan yolları kaydeden yeni bir tracing ön yüzü, temel register allocation, daha fazla sabit yayılımı ve referans sayımı eleme gibi optimizasyonlar var. JIT ile CPython derlerken artık LLVM 21 gerekiyor; son kullanıcıların LLVM kurmasına gerek yok.

Free-threading tarafında ilerleme

Free-threaded (GIL'siz) yapı için iki önemli adım var. PEP 803 ile abi3t adlı kararlı ABI tanımlandı; C eklentileri artık free-threaded CPython için de kararlı ABI'yi hedefleyebiliyor. Ayrıca resmi macOS kurulum paketleri free-threading desteğini varsayılan olarak kuruyor ve ham bellek ayırma işlemlerinde varsayılan ayırıcı artık mimalloc.

Daha anlaşılır hata mesajları ve renkli çıktı

Hata mesajları yine iyileşti. Örneğin bir listede olmayan bir metot çağrıldığında Python artık 'list' object has no attribute 'push'. Did you mean '.append'? gibi doğrudan öneriler sunuyor. argparse, ast, calendar, difflib, sqlite3 ve timeit gibi pek çok komut satırı aracı da renkli çıktı desteği kazandı.

Yükseltmeden önce kontrol edin

3.15, uzun süredir kullanımdan kaldırılmış birçok API'yi tamamen siliyor. Belgede listelenenlerden bazıları:

  • http.server içindeki CGIHTTPRequestHandler ve --cgi seçeneği,
  • importlib.abc.Loader.load_module() (yerine exec_module()),
  • glob.glob0() ve glob.glob1() (yerine root_dir ile glob.glob()),
  • sre_compile, sre_constants ve sre_parse modülleri,
  • pathlib.PurePath.is_reserved() (yerine os.path.isreserved()).

Davranış değişiklikleri de var: yıl yönergesi olmadan %d içeren bir formatla çağrılan strptime() artık ValueError fırlatıyor, NamedTuple("Point", x=int, y=int) biçimindeki anahtar kelime söz dizimi ise artık desteklenmiyor. Ayrıca asyncio policy sistemi 3.16'da kaldırılacak; şimdiden asyncio.run(..., loop_factory=...) kullanımına geçmek iyi bir fikir.

Pratik öneri: Projenizin test paketini önce 3.15 ile -W error::DeprecationWarning seçeneğiyle çalıştırın ve UTF-8 varsayılanının dosya okuma/yazma davranışınızı değiştirip değiştirmediğini özellikle Windows ortamlarında kontrol edin.

Sonuç

Python 3.15; lazy import ile başlangıç süresini, frozendict ve sentinel ile kod okunabilirliğini, Tachyon ile üretim profilini ve yenilenen JIT ile ham performansı aynı anda iyileştiren dengeli bir sürüm. Kaldırılan API'ler ve varsayılan UTF-8 geçişi nedeniyle büyük projelerde aceleci bir yükseltme yerine kontrollü bir geçiş planı yapmak en sağlıklı yol. Tüm ayrıntılar için resmi What's New in Python 3.15 belgesine göz atabilirsiniz.

Benzer İçerikler