SORU
9 Aralık 2011, Cuma


PyPy kendisi çevirmek?

Bu düz alıyorum? PyPy yorumlayıcı aslında kendisi ve yorumlamakkendisi tercüme edebilir misiniz?

Burada geçerli benim anladığım şu:

  • RPython. araç zinciri kısmen açıklama ve çevirmek için bir nevi önişlenmiş bir sürümü almak için tercüme programı yürütme içerir.
  • PyPy tercüman, CPython üzerine çalışan, kısmen yorumlamak yürütürkendisikontrol dışı çeviri yapar RPython onun yarısı, eller noktası?

Eğer bu doğruysa, o zaman bu şimdiye kadar gördüğüm zihin-bükme çoğu şeylerden biridir.

CEVAP
20 Aralık 2011, Salı


PyPy çeviri süreci aslında duyduğundan çok daha az kavramsal olarak özyinelemeli.

Gerçekten tüm Python fonksiyon/sınıf/diğer nesneleri işleyen bir Python programıdır (değilKaynak kod Python) ve C çıkışları kodu. Ama tabii ki sadece süreç değilherhangi birPython nesneleri; sadece eğer--tercüme RPython kod yazarsanız ne olsun özellikle şu formları işleyebilir.

Çeviri araçları Python bir program olduğu için, belli ki PyPy. python yorumlayıcısı içeren herhangi bir Python yorumlayıcısı üzerinde çalıştırabilirsiniz. Bu özel bir şey değil yani.

RPython nesneleri çevirir beri RPython ile yazılmış olan PyPy. python yorumlayıcısı çevirmek için kullanabilirsiniz.

Ama hangi çeviri çerçevesinde kendini, kaçamazsındeğilRPython. Sadece PyPy. python yorumlayıcısı kendisi RPython.

Şeyler sadece ilginç çünkü RPython kodu da Python kodu (ama tam tersi), ve çünkü RPython gelmez hiç "gerçekten var" kaynak dosyaları, ama sadece bellek içinde çalışan bir Python süreci ille de içeren diğer non-RPython kod (yok "saf-RPython" ithalat ya da işlev tanımlarını, örneğin, çünkü çevirmen çalışır işlevleri varzatentanımlanmış ve ithal edilmiş).

Çeviri araç zinciri bellek Python kodu nesneler üzerinde çalışır unutmayın. Python yürütme modeli bu anlamına gelirbazı Python kodu çalıştırmadan önce diye bir şey yok. Eğer çok basitleştirmek eğer çeviri işlemine başlamadan biraz şunun gibi düşünün:

from my_interpreter import main
from pypy import translate

translate(main)

Hepimizin bildiği gibi, sadece main ithal Python kodu, diğer tüm modülleri my_interpreter ithalatı da dahil olmak üzere çok sayıda çalıştırmak için gidiyor. Ama çeviri süreci analiz etmeye başlarfonksiyon nesneHiç görüyor ve umursamıyor, main ile gelip idam edildi her neyse main;.

Bunu düşünmek için bir yolu olmasıdır "RPython programlama" "RPython bir program oluşturur ve çeviri süreci besleyen bir Python programı yazmak" anlamına geliyor. Bu nispeten kolay anlar ve biraz benzer başka kaç Derleyiciler iş (örneğin bir yol düşünmek programlama C olduğunu aslında yazılı bir C ön işlemci program üretir bir C programı, daha sonra fed için bir C derleyicisi).

Şeyler sadece tüm 3 bileşenleri (RPython programı, RPython programı, ve çeviri sürecini oluşturan bir Python programı) yüklenir, çünkü PyPy bu durumda kafa karıştırıcıaynı Python yorumlayıcısı. Bu demek değil şu an için işlevleri RPython zaman denilen bazı tartışmalar ve zaman adlı diğer değişkenler için arayın yardımcı işlevler çeviri çerçeve parçası olarak üreten RPython programı, ve birçok diğer garip şeyler. Yani durum alır oldukça bulanık kenarlarında ve mutlaka bölmek kaynağı hatları temiz bir şekilde içine "RPython için tercüme", "Python üreten benim RPython programı" ve "teslim RPython program için çeviri çerçeve".


PyPy tercüman, CPython üzerine çalışan, kısmen yürütür kendisi yorumlar

Burada atıfta bence sen ne çeviri sırasında, Özet yorumu yapmak için the flow object space PyPy kullanılmasıdır. Hatta bu ilk başta göründüğü kadar çılgın ve zihin-bükme değil. PyPy bu bölüm hakkında çok az bilgim var, ama anladığım kadarıyla:

PyPy bir onları görevlendirerek bir Python yorumlayıcısı işlemlerini uygular "nesne alan tüm temel uygulaması işlemleri inşa içerir.", Ama farklı nesne alanlarda farklı efektler için takın, ve onlar sürece aynı "boşluk" arayüzü yorumlayıcı hala "" Python kodu. yapabilecektir nesne uygulayabilirsiniz

PyPy çeviri araç zinciri işleyen RPython kod nesneleri bir tercüman tarafından yürütülen olabilir Python kodudur. PyPy yeniden kullanır çevirisi parçası olarak kendi Python yorumlayıcısı bir parçası araç zinciri, akışı nesne uzay takarak. "Yürütme" kodu ile bu nesne alanı, tercüman değil aslında yürütmek işlemler kod, yerine üretir akış grafikleri, HANGİ TESTLERİ sıralar Ara temsil kullanılan birçok diğer Derleyiciler; sadece basit bir makine kontrol edebileceğim temsil kod, ileri işlenmiş. Bu (R)Python kodu nesneleri çeviri sürecinin sonuna giriş dönüştü.

Çeviri süreci ile çevrilmiş bu olağan birşey PyPy. Python yorumlayıcısı yana, aslında "" akış nesne alanı ile. kendisi yorumlar Ama gerçekten anlamı Python fonksiyonları işleme bir Python programı olması, olanları işleme yapmak da dahil olmak üzere. Kendisi artık kendisi için bir dekoratör uygulamak, ya da sarıcı sınıf bir şal kendisini bir örneği (veya sınıfın kendisi wrap) sahip daha zihin-bükme değil.


Biraz var aslında, boşboğazlık etmedim. Yardımcı olur umarım, her neyse, yanlış bir şey söylemedim umarım. lütfen eğer varsa bana doğru.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • Easy Learn Tutorial

    Easy Learn T

    10 Kasım 2012
  • HuskyStarcraft

    HuskyStarcra

    4 HAZİRAN 2009