PyPy neden standart Python'a dahil edilmedi?


165

Ben bakıyordum PYPY ve ana hat Python dağılımları içine kabul edilmemiştir Sadece neden merak ediyorum. JIT derlemesi ve daha az bellek alanı gibi şeyler, tüm Python kodlarının hızlarını büyük ölçüde iyileştirmez mi?

Kısacası, PyPy'nin ayrı bir proje olarak kalmasına neden olan ana dezavantajları nelerdir?


4
Buna ek olarak, pypy'nin henüz numpy'ye desteği yoktur. morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html
rthiago

Ve numpy desteği sadece PyPy'ye geçmeden önce bilimsel bilgi işlem uygulamalarının ihtiyaç duyduğu yüzeyi çizer. İşte orijinal numpy yazarının bazı düşüncelerini: teknikdiscovery.blogspot.com/2011/10/…
Stuart Berg

3
Bence bu cevaplar ve yorumlar modası geçmiş
Marlon Abeykoon

Yanıtlar:


249

PyPy bir CPython çatalı değildir, bu yüzden asla doğrudan CPython ile birleştirilemez.

Teorik olarak Python topluluğu evrensel olarak PyPy'yi benimseyebilir, PyPy referans uygulaması yapılabilir ve CPython durdurulabilir. Ancak, PyPy'nin kendi zayıf yönleri vardır:

  • CPython, geleneksel olarak Python uygulamalarının CPU yoğun görevleri yerine getirme biçimi olan C ile yazılmış Python modülleriyle kolayca entegre edilebilir (örneğin SciPy projesine bakın).
  • PyPy JIT derleme adımının kendisi CPU zamanına mal olur - sadece derlenmiş kodun tekrar tekrar çalışmasıyla genel olarak daha hızlı hale gelir. Bu, başlatma sürelerinin daha yüksek olabileceği anlamına gelir ve bu nedenle PyPy, yapıştırıcı kodunu veya önemsiz komut dosyalarını çalıştırmak için etkili değildir.
  • PyPy ve CPython davranışı her bakımdan özdeş değildir, özellikle "uygulama ayrıntıları" (dil tarafından belirtilmeyen ancak pratik düzeyde hala önemli olan davranış) söz konusu olduğunda.
  • CPython, PyPy'den daha fazla mimaride çalışır ve gömülü mimarilerde PyPy için pratik olmayabilecek şekilde başarıyla uyarlanmıştır.
  • CPython'un bellek yönetimi için referans sayma şemasının muhtemelen PyPy'nin çeşitli GC sistemlerinden daha öngörülebilir performans etkileri vardır, ancak bu tüm "saf GC" stratejileri için mutlaka doğru değildir.
  • PyPy, aktif bir iş öğesi olmasına rağmen Python 3.x'i henüz tam olarak desteklememektedir.

PyPy harika bir projedir, ancak CPU yoğun görevlerde çalışma zamanı hızı her şey değildir ve birçok uygulamada birçok endişenin en azıdır. Örneğin, Django PyPy üzerinde çalışabilir ve bu da templating'i daha hızlı hale getirir, ancak CPython'un veritabanı sürücüleri PyPy'den daha hızlıdır; Sonuçta, hangi uygulamanın daha verimli olduğu, belirli bir uygulamadaki darboğazın nerede olduğuna bağlıdır.

Başka bir örnek: PyPy'nin oyunlar için harika olacağını düşünürsünüz, ancak PyPy'de kullanılanlar gibi çoğu GC stratejisi belirgin bir titremeye neden olur. CPython için, CPU-yoğun oyun malzemelerinin çoğu, PyGy'nin öncelikle bir C uzantısı olarak uygulandığından PyPy'nin yararlanamayacağı PyGame kütüphanesine yüklenir (yine de bkz: pygame-cffi). Hala PyPy'nin oyunlar için harika bir platform olabileceğini düşünüyorum, ama aslında kullanıldığını hiç görmedim.

PyPy ve CPython'un temel tasarım sorularına kökten farklı yaklaşımları var ve farklı ödünleşimler yapıyorlar, bu yüzden ikisi de her durumda diğerinden "daha iyi" değil.


4
PyPy'nin komut dosyalarını çalıştırmak için uygun olmadığı doğru değildir. Başlangıç ​​zamanı CPython ile hemen hemen aynıdır ve yorumlama hızı benzerdir.
Lucian

6
PyPy'nin artık artımlı bir GC ile geldiğini ve sonuç olarak oyunlar için potansiyel olarak daha uygun olduğunu belirtmek gerekir.
porgarmingduod

63

Birincisi, Python 2.x ile % 100 uyumlu değildir ve 3.x için sadece ön desteğe sahiptir .

Birleştirilebilecek bir şey de değil - PyPy tarafından sağlanan Python uygulaması, oluşturdukları bir çerçeve kullanılarak oluşturuldu, bu da son derece havalı, ancak mevcut CPython uygulamasıyla tamamen farklı. Tam bir yedek olması gerekir.

Bazı vardır çok somut farklılıklar PYPY ve CPython, nasıl olmanın büyük bir biri arasındaki uzatma modülleri standart kütüphaneye ötesine gitmek isterseniz, büyük bir anlaşma, - desteklenmektedir.

PyPy'nin evrensel olarak daha hızlı olmadığını da belirtmek gerekir.


54

Bkz Guido van Rossum tarafından bu videoyu . Aynı soruyu 12 dakika 33 saniyede anlatıyor.

Özellikleri:

  • Python 3 uyumluluğu eksikliği
  • uzatma desteği eksikliği
  • tutkal kodu olarak uygun değil
  • hız her şey değildir

Sonuçta, o karar verecek olan ...


3
Videonun ilgili bölümüne doğrudan bağlantı İLE bağlantı için +1! Ayrıca komik bir şekilde doğru Guido van Rossum resmi olmayan anket için +1 "Üretimde kaç kişi PyPy kullanıyor? ... eller yok? Öksürük Eh, sanırım hala [CPython için) umut var."
Trevor Boyd Smith

15

Bunun bir nedeni, PyPy sitesine göre şu anda yalnızca 32 ve 64 bit Intel x86 mimarisinde çalışırken CPython diğer platformlarda da çalışıyor olabilir. Bunun nedeni muhtemelen PyPy'deki platforma özgü hız geliştirmeleridir. Hız iyi bir şey olsa da, insanlar genellikle dil uygulamalarının olabildiğince "platformdan bağımsız" olmasını ister.


6
Bir ARM arka ucunun "neredeyse orada" olduğunu ve bir PowerPC arka ucunun WIP olduğunu unutmayın. Ayrıca, bunun yalnızca JIT derleyicisine atıfta bulunduğunu ve JIT'in yeni bir mimariye taşınmasının yalnızca nispeten basit ve düşük seviyeli bir IR için kod üretecinin uygulanmasını gerektirdiğini unutmayın.

1
2018 itibariyle, PyPy artık daha fazla mimaride x86 (Linunx, Windows, MacOS ve BSD'lerde 32/64 bit), aynı zamanda Linux'ta daha yeni ARM donanımı (VFPv3 ile ARMv6 veya ARMv7), büyük ve küçük endian PPC64 ve s390x varyantları.
Frédéric Grosshans

7

Daha fazla bilgi için David Beazley'nin bu açılış konuşmasını izlemenizi tavsiye ederim . Sorunuza PyPy'nin doğası ve incelikleri hakkında netlik vererek cevap verir.


6

Burada söylenen her şeye ek olarak PyPy, hatalar açısından CPython kadar kaya gibi sağlam değildir. SymPy ile, son birkaç yıl içinde hem yayınlanmış versiyonlarda hem de gecelerde PyPy'de yaklaşık bir düzine böcek bulduk.

Öte yandan, CPython'da şimdiye kadar sadece bir hata bulduk ve bu bir yayın öncesi oldu.

Ayrıca, Python 3 desteğinin eksikliğini azaltmayın. Çekirdek Python topluluğunda hiç kimse artık Python 2'yi bile önemsemiyor. Python 3.4'te Python 3'ün beşinci büyük sürümü olacak olan bir sonraki büyük şeyler üzerinde çalışıyorlar. PyPy adamları hala bunlardan birini alamadılar. Bu yüzden yarışmacı olmaya başlamadan önce yapacakları bazı şeyler var.

Beni yanlış anlamayın. PyPy harika. Ama yine de çok önemli şekillerde CPython'dan daha iyi olmaktan çok uzak.

Bu arada, PyPy'de SymPy kullanıyorsanız, daha küçük bir bellek alanı (veya bir hızlanma) görmezsiniz. Bkz. Https://bitbucket.org/pypy/pypy/issues/1447/ .


2
2018 itibariyle, farklı sempatik kullanımlarda kabaca bir büyüklük sırası hızları gördüğümü doğrulayabilirim
Frédéric Grosshans

1
@ FrédéricGrosshans ilginç. Tekrar karşılaştırmayı denemek zorunda kalacağım.
asmeurer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.