"PyPy teknik olarak doğru olmasına rağmen, Python Python içinde bir yeniden uygulama" PyPy, IMHO tanımlamak için oldukça yanıltıcı bir yoldur.
PyPy'nin iki önemli kısmı vardır.
- Çeviri çerçevesi
- Çevirmen
Çeviri çerçevesi bir derleyicidir. Çöp toplama ve JIT derleyicisi gibi yönleri otomatik olarak ekleyerek RPython kodunu C'ye (veya diğer hedeflere) derler . O olamaz keyfi Python kodunu, sadece RPython işlemek.
RPython, normal Python'un bir alt kümesidir; tüm RPython kodu Python kodudur, ancak tam tersi değildir. RPython'un resmi bir tanımı yoktur, çünkü RPython temel olarak sadece "PyPy'nin çeviri çerçevesi tarafından çevrilebilen Python'un alt kümesidir". Ancak çevrilmek için RPython kodu statik olarak yazılmalıdır (türler çıkarılır, bunları beyan etmezsiniz , ancak yine de değişken başına kesinlikle bir türdür) ve işlevleri bildirme / değiştirme / ya da çalışma zamanında.
Yorumlayıcı RPython ile yazılmış normal bir Python yorumlayıcısıdır.
RPython kodu normal Python kodu olduğundan, herhangi bir Python yorumlayıcısında çalıştırabilirsiniz. Ama PyPy'nin hız iddialarının hiçbiri onu bu şekilde çalıştırmaktan gelmiyor; bu sadece hızlı bir test döngüsü içindir, çünkü tercümanı çevirmek uzun zaman alır .
Bu anlaşıldığında, PyPyPy veya PyPyPyPy hakkındaki spekülasyonların aslında bir anlamı olmadığı hemen anlaşılmalıdır. RPython ile yazılmış bir tercümanınız var. Python'u hızlı bir şekilde çalıştıran C koduna çevirirsiniz. Burada süreç durur; tekrar işleyerek hızlanacak başka RPython yok.
Peki "PyPy'nin CPython'dan daha hızlı olması nasıl mümkün" de oldukça açık hale geliyor. PyPy, bir JIT derleyicisi de dahil olmak üzere daha iyi bir uygulamaya sahiptir (genellikle JIT derleyicisi olmadan o kadar hızlı değildir, bu da PyPy'nin sadece JIT derlemesine duyarlı programlar için daha hızlı olduğu anlamına gelir). CPython hiçbir zaman Python dilinin son derece optimize edilmiş bir uygulaması olarak tasarlanmamıştır (ancak farkı izlerseniz bunu oldukça optimize edilmiş bir uygulama yapmaya çalışırlar ).
PyPy projesinin gerçekten yenilikçi kısmı, karmaşık GC şemalarını veya JIT derleyicilerini elle yazmamalarıdır. Tercümanı RPython'da nispeten basit bir şekilde yazarlar ve tüm RPython Python'dan daha düşük seviyededir, hala nesne yönelimli bir çöp toplanmış dildir, C'den çok daha yüksektir. Daha sonra çeviri çerçevesi otomatik olarak GC ve JIT gibi şeyler ekler. Çeviri çerçevesi çok büyükancak PyPy python yorumlayıcısı için eşit derecede geçerlidir, ancak uygulamalarını değiştirerek performansı iyileştirmek için deneylerde çok daha fazla özgürlüğe izin verir (GC hatalarını tanıtmak veya JIT derleyicisini değişikliklerle başa çıkmak için güncellemeksizin). Ayrıca, bir Python3 yorumlayıcıyı kullanmaya başladıklarında otomatik olarak aynı faydaları elde edecekleri anlamına gelir. Ve PyPy çerçevesiyle yazılmış diğer çevirmenler (lehçenin değişen aşamalarında bir sayı vardır). Ve PyPy çerçevesini kullanan tüm tercümanlar, çerçevenin desteklediği tüm platformları otomatik olarak destekler.
Bu nedenle, PyPy projesinin gerçek yararı, dinamik bir dil için verimli bir platformdan bağımsız yorumlayıcı uygulamanın tüm bölümlerini (mümkün olduğunca) ayırmaktır. Ve sonra, birçok tercümanda tekrar kullanılabilecek tek bir yerde iyi bir uygulama geliştirin. Bu "Python programım şimdi daha hızlı çalışıyor" gibi acil bir kazanç değil, ama gelecek için büyük bir olasılık.
Ve Python programınızı daha hızlı çalıştırabilir (belki).