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ı.
İçindekiler
- Açık lazy import (PEP 810)
- Yeni yerleşik tipler: frozendict ve sentinel
- UTF-8 artık varsayılan (PEP 686)
- Comprehension içinde unpacking (PEP 798)
- Profiling için yeni paket ve Tachyon (PEP 799)
- JIT derleyici belirgin şekilde hızlandı
- Free-threading tarafında ilerleme
- Daha anlaşılır hata mesajları ve renkli çıktı
- Yükseltmeden önce kontrol edin
- Sonuç
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ükleniyorBu ö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 assignmentsentinel (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.serveriçindekiCGIHTTPRequestHandlerve--cgiseçeneği,importlib.abc.Loader.load_module()(yerineexec_module()),glob.glob0()veglob.glob1()(yerineroot_dirileglob.glob()),sre_compile,sre_constantsvesre_parsemodülleri,pathlib.PurePath.is_reserved()(yerineos.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
Rust Nedir? Çöp Toplayıcısız Bellek Güvenliği Sağlayan Sistem Programlama Dili
Rust, C ve C++ kadar hızlı çalışırken bellek hatalarını derleme anında ortadan kaldıran bir sistem programlama dilidir. Sahiplik (ownership) ve ödünç alma (borrowing) kuralları sayesinde çöp toplayıcı olmadan bellek güvenliği ve korkusuz eşzamanlılık sunar. Bugün Linux çekirdeğinden bulut altyapılarına kadar üretimde kullanılıyor.
27 Eki 20264 kaynakCODE1 DKPython Öğrenmek İçin Kaynaklar ve Deneyler
Python programlama dilini öğrenmek isteyenler için çeşitli kaynaklar ve deneyler sunulmaktadır. Hangi kaynakların nasıl kullanılacağına dair bilgiler içeren makale, yazılıma yeni başlayanlar için yol gösterici olacaktır.
31 Ağu 20268 kaynakCODE1 DKPHP Sürümleri ve Yayın Süreci
PHP, sürekli gelişen ve güncellenen bir programlama dilidir. Bu yazıda, PHP sürümlerinin nasıl yönetildiği ve yayın süreçlerinin nasıl işlediği ele alınacaktır.
18 Ağu 20268 kaynak