SORU
7 NİSAN 2010, ÇARŞAMBA


PyPy -- Nasıl CPython yenebilir?

Google Open Source Blog:

PyPy Python bir reimplementation olduğunu Python, gelişmiş teknikleri kullanarak daha iyi performans elde etmek için denemek için CPython daha. Zor iş yıllar nihayet karşılığını aldı. Hızımızı sonuçlar genellikle CPython, değişen yendi için biraz daha yavaş olmak gerçek kadar 2x speedups uygulama kodu, kadar speedups için Küçük kriterler üzerinde 10x.

Bu nasıl mümkün olabilir? Hangi Python uygulaması PyPy uygulamak için kullanıldı mı? 1**? Ve ne bir PyPyPy veya PyPyPyPy yenerek şansını puanları?

(Not kim niye böyle bir şey istesin?) ile ilgili

CEVAP
10 Ocak 2012, Salı


"PyPy Python bir reimplementation olduğunu Python" PyPy açıklamak için oldukça yanıltıcı bir şekilde, teknik olarak doğru olsa da ne DEMELİ.

PyPy iki ana bölümü vardır.

  1. Çeviri çerçevesi
  2. Tercüman

Çeviri çerçevesinde bir derleyici. DerlerRPythonkod C aşağı (veya diğer hedefler), otomatik açıdan ekleyerek çöp toplama ve JİT derleyici gibi.olamazkeyfi Python kodu işlemek, RPython sadece.

RPython normal Python bir alt kümesidir; tüm RPython kodu Python kod, ama tersi değil. RPython temelde sadece çünkü RPython resmi bir tanımı yok "PyPy çeviri çerçevesi tarafından tercüme edilebilir Python alt". Ama çevrilmesi için RPython kod olmalıstatik olarak yazılmış(türleri algılanır bildirmeniz yok, ama yine de kesinlikle değişken başına bir tür), ve şeyler yapamazsın bildirmek gibi işlevleri zamanında/sınıflar ya da değiştirme.

Tercüman daha sonra normal bir Python yorumlayıcısı RPython ile yazılmıştır.

RPython kodu normal Python kod olduğu için, herhangi bir Python yorumlayıcısı çalıştırabilirsiniz. Ama PyPy hız iddiaların hiçbiri bu şekilde çalışmasını gel; bu tercüman tercüme alır, çünkü bu sadece hızlı bir test döngüsü içinuzunzaman.

Bunu anladıktan sonra, hemen PyPyPy veya PyPyPyPy hakkında spekülasyonlar aslında hiçbir anlam ifade etmeyen açık olmalı. Tercüman RPython ile yazılmış. Hızlı bir şekilde Python yürüten C kodunu çevirmek. Orada işlemini durdurur; yeniden işleme hızlandırmak için daha fazla RPython var.

"Nasıl CPython" de oldukça belirgin hale gelir. daha olası PyPy için hızlı olmak. PyPy bir daha iyi uygulanması da dahil olmak üzere bir JİT derleyici (bu genellikle oldukça hızlı olmadan JİT derleyici, inanıyorum ki bu süreç PyPy sadece hızlı programları duyarlı JİT-derleme). CPython hiç Python dili (bir çok çıkarmaya çalışıyorlar . bu son derece optimize bir uygulama olacak şekilde tasarlanmıştır ^em>optimize edilmişuygulama, aradaki farkı izleyin).


PyPy proje çok yenilikçi bit elle sofistike GC düzenleri ya da JİT Derleyiciler yazmak kalmamasıdır. Tercüman RPython nispeten delikanlı yazıyorlar, ve tüm RPython Python daha düşük seviyede olduğu için hala nesneye dayalı çöp toplama dil, C. Sonra çeviri çerçevesinde çok daha yüksek seviyedeotomatik olarakekler GC ve JİT gibi şeyler. Çeviri bir çerçevebüyükçaba, ama eşit derecede iyi geçerlidir için PyPy python yorumlayıcısı ancak değiştirirler bunların uygulanması, izin verdiği için çok daha fazla özgürlük içinde deney performansı arttırmak (olmadan endişesi tanıtan GC hataları veya güncelleme JİT derleyici baş değişiklikler). Bu da Python3 bir tercüman uygulamak için, otomatik olarak aynı yararları almak anlamına gelir. Ve başka bir tercüman PyPy çerçeve ile yazılmış olan Polonya aşamaları değişen vardır (). Ve tüm tercümanlar PyPy çerçeve kullanarak otomatik olarak tüm platformlar çerçevesi tarafından desteklenen destekler.

PyPy projenin gerçek fayda (mümkün olduğu kadar) dinamik bir dil için platform bağımsız ve etkili bir tercüman uygulama, tüm parçaları ayırmak için. Ve sonra yeniden kullanılan birçok tercümanlar arasında bir yerde güzel bir uygulama ile geldi. Böyle acil bir galibiyet değil "Python program daha hızlı çalışır şimdi", ama büyük bir umudu var gelecek için.

Ve Python programınızı daha hızlı (belki) çalıştırabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DroidModderX ROOT Master

    DroidModderX

    14 ŞUBAT 2011
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • John Lynn

    John Lynn

    8 Ocak 2010