PEP 3000

Başlığı:PEP 3000 – Python 3000
Adresi:http://www.python.org/dev/peps/pep-3000/
Yazarı:Guido Van Rossum
Yazılma Tarihi:5 Nisan 2006
Son Değişiklik:18 Mart 2008
Türkçesi:Fırat Özgül

Not

Çevirmenin Notu: PEP’in açılımı “Python Enhancement Proposal”, yani “Python’u Geliştirme Önerileri”dir. Adından da anlaşılacağı gibi PEP’lerin işlevi Python’un gelişimine ışık tutmaktır. PEP’ler Python topluluğuna çeşitli konularda bilgi vermenin yanısıra, Python’a ilişkin bir özelliği veya özellik önerisini de tarif eder. PEP’ler genellikle teknik bir dil kullanılarak yazılır. Aşağıdaki metin, yukarıda adresi verilen PEP 3000’in çevirisidir.

Özet

Bu PEP Python 3000’in geliştirilmesine ilişkin bir kılavuz niteliğindedir. Tercihen, ilk olarak süreç üzerinde uzlaşılmalı, özellikler konusu ancak süreç kararlaştırılıp kesinleştirildikten sonra irdelenmeye başlanmalıdır. Ama uygulamada özelliklerle sürecin bir arada ele alındığına şahit olacağız. Çoğunlukla belirli bir özellik üzerinde yürütülen tartışmalar, sürecin de sorgulanmasına yol açacaktır.

Adlandırma

Python 3000, Python 3.0 ve Py3K aynı şeyin adıdır. Projenin ismi Python 3000 veya kısaca Py3k’dır. Asıl Python sürümü Python 3.0 olarak adlandırılacak, “python3.0 -V” komutunun çıktısı da bu olacaktır. Dosya adlandırmalarında ise, Python 2.x sürümlerinde tutulan yol benimsenecektir. Çalıştırılabilir dosya için yeni bir ad önermek veya Python kaynak dosyalarının uzantısını değiştirmek istemiyorum.

PEP’lerin Numaralandırılması

Python 3000’e ilişkin PEP’ler PEP 3000 ile başlar. 3000-3099 arası PEP’ler üst-PEP’ler olup; bunlar sürece ilişkin veya bilgi amaçlı PEP’lerdir. 3100-3999 arası PEP’ler özellikler üzerinedir. PEP 3000 (şu anda okuduğunuz PEP) ise özel bir duruma sahiptir: PEP 3000, Python 3000’e ilişkin bütün üst-PEP’lerin üst-PEP’idir. (Başka bir deyişle bu PEP, süreçlerin nasıl tanımlanacağına ilişkin süreci tarif eder). PEP 3100 de özel bir PEP’tir: Bu PEP; asıl Python 3000 sürecine girilmeden önce Python 3000 içinde yer alması kararlaştırılmış (ya da yer alması ümit edilen) özellikleri içeren bir “yapılacaklar listesi” gibidir. Son olarak, PEP 3099 ise, değişmeyecek özellikleri sıralar.

Takvim

Python 2.6 ve 3.0’a ilişkin sürüm takvimini içeren PEP 361’e bakınız. Bu sürümlerin yayınlanma tarihleri başabaş gitmektedir.

Not: Standart kitaplık gelişiminin 3.0a1’den sonra süratlenmesi beklenmektedir.

Python 2.x ve 3.x sürümlerinin bir süre birbirine paralel gitmesini bekliyorum. Python 2.x sürümleri, hata düzeltmelerini içeren geleneksel 2.x.y sürümlerine kıyasla daha uzun bir süre boyunca yayınlanmaya devam edecektir. Normalde 2.(x+1) sürümü çıktığı anda 2.x için hata düzeltme sürümü yayınlamayı bırakıyoruz. Ama 3.0 (son sürüm) çıktıktan sonra bile en az bir veya iki 2.x sürümünün yayınlanacağını tahmin ediyorum. Hatta bu durum 3.1 veya 3.2 sürümlerine kadar devam edebilir. Bunun ne kadar devam edeceği 2.x desteğinin sürdürülmesine yönelik olarak topluluktan gelen taleplere, 3.0 sürümünün kabul görüp kararlı bir hale gelmesine ve gönüllülerin tahammül sınırlarına bağlıdır.

Python 3.0’dan sonra, Python 3.1 ve 3.2’nin çıkışının 2.x serisine kıyasla çok daha çabuk olacağını tahmin ediyorum. Topluluk 3.x sürümlerine alıştıktan sonra 3.x sürüm yayınlama döngüsü rayına oturacaktır.

Uyumluluk ve Geçiş

Python 3.0 ile Python 2.x arasında geriye dönük bir uyumluluk olmayacaktır.

Python 2.6 ile yazılmış kodların Python 3.0 altında hiçbir değişikliğe uğramadan çalışacağının teminatı yoktur. Hatta bir kodun bir bölümünün dahi çalışacağı söylenemez. (Tabii ufak da olsa çalışacak kısımlar vardır, ama ana işlevinden yoksun olarak...)

Python 2.6 ileriye dönük uyumluluğu şu iki şekilde sağlayacaktır:

  • Python 2.6 sürümünde, Python 3.0’da artık çalışmayacak özellikler hakkında (mesela range() fonksiyonunun dönüş değerinin liste olduğunu varsayarak) dinamik şekilde (yani çalışma esnasında) uyarı verecek olan bir “Py3k uyarı kipi” yer alacaktır.
  • Py3k’ya ait pek çok özellik (normalde 2.x’te hata verecek sözdizimleridir bunlar) Python 2.6’ya geri taşınacak, bu özellikler ya __future__ modülü aracılığıyla ya da eski ve yeni sözdizimi yan yana kullanılarak etkinleştirilebilecektir.

2.6 sürümündeki ileriye dönük uyumluluk özelliklerinin yerine veya bunlara ek olarak ayrı bir kaynak kod dönüştürme aracı da olacaktır [1]. Bu araç, bağlamdan bağımsız olarak kaynaktan kaynağa dönüştürme işlemi yapabilecek, örneğin apply(f, args) fonksiyonunu f(*args) şekline dönüştürebilecektir. Ancak tabii ki bu araç veri akışı analizi veya tip çıkarsaması yapamaz. Yani bu araç yukarıdaki gibi bir apply fonksiyonu gördüğünde, bunun o bildiğimiz eski gömülü fonksiyon olduğunu varsayacaktır.

Python 2.6 ve 3.0 sürümlerini birlikte desteklemesi gereken bir proje için önerilen geliştirme modeli aşağıdaki gibidir:

  1. Neredeyse tam kapsamlı, kusursuz birim testleri hazırlayın.
  2. Projenizi Python 2.6’ya aktarın.
  3. Py3k uyarı kipini açın.
  4. Uyarı kalmayıncaya kadar test edin ve kodu düzenleyin.
  5. Bu kaynak kodunu 3.0 sürümünün sözdizimine dönüştürmek için 2to3 aracını kullanın. Çıktıyı elle düzenlemeyin!
  6. Dönüştürülmüş kaynak kodunu 3.0 sürümü altında test edin.
  7. Eğer sorunla karşılaşırsanız, düzeltmeleri kaynak kodunun 2.6 sürümü üzerinde yapın ve 3. basamağa geri dönün.
  8. Sürümü yayınlama vakti geldiğinde 2.6 ve 3.0 için ayrı tar dosyaları (veya sürümler için hangi arşivleme biçimini kullanıyorsanız onu) hazırlayın.

Programınızın 2.6 sürümü için vereceğiniz desteği salt bakım seviyesine getirene kadar 3.0 kaynak kodunun düzenlenmesi tavsiye edilmez (yani 2.6 kodunu bakım dalına aktaracağınız ana kadar).

Not: Geçiş sürecine ilişkin konuları ayrıntılı olarak tarif eden bir üst-PEP’e ihtiyacımız var.

Gerçekleme Dili (Implementation)

Python 3000 C dilinde gerçeklenecek, yeni sürüm, Python 2 kod tabanından evrilecektir. Bu yaklaşım, baştan aşağı yeniden yazmanın tehlikeleri hakkındaki (Joel Spolsky[2] ile paylaştığım) görüşlerimden kaynaklanmaktadır. Python 3000 Python 2 üzerinde yapılmış nispeten orta düzeyli bir iyileştirme çalışması olduğu için dili baştan aşağı yeniden yazmaya kalkışmazsak çok şey kazanırız. Ben bir yandan da sıfırdan gerçekleme çalışmalarına girişilmesine karşı değilim, ama benim kendi çabalarım en iyi bildiğim dile ve gerçeklemeye yönelik olacaktır.

Üst-Katkılar

Bu PEP için yapılacak ilave metin önerileri, yazarı tarafından memnuniyetle karşılanacaktır. Yukarıda anılan ve anılmayan konulara ilişkin taslak şeklindeki üst-PEP’ler ise daha da makbule geçecektir!

Telif Hakkı

Bu belge kamuya açılmıştır.