Python Runtime gerçekte nasıl çalışır?


26

runtime libraryÖzellikle Python kavramını anlamada bazı problemlerim var . Bu yüzden merhaba bir dünya python programı yazdım ve yürütmeyi planlıyorum python ./hello_world.py.

Enter düğmesine basmam ve CPU'umda python kodumdan oluşturulan makine kodunun arasında hangi adımlar oluyor? Bunun Python çalışma zamanı sistemi ve / veya kütüphanesi ile ilgisi nedir?


Bu iki iş parçacığı Python çalışma zamanı hakkında harika bir fikir veriyor - Python yorumlanmış mı, derlenmiş mi, yoksa her ikisi de mi? & Is Python (Javascript veya PHP gibi) yorumlanır? . Çalışma zamanı ve çalışma zamanı kütüphanesi aynı değil . Bildiğim .NET dünyasına eşleme - Ortak Dil Çalışma Zamanı (CLR) ve Çerçeve / Temel Sınıf Kütüphanesi (FCL / BCL) aynı değildir .
RBT

Yanıtlar:


33

Oldukları gibi farklı olduğu için, tüm ciddi, modern programlama dillerinin paylaştığı bir avuç ortak kavram var. Bunlardan ikisi, yukarıdaki sorularınızın cevabının özüdür.

Enter düğmesine basmamla ve python kodumdan oluşturulan makine kodunu CPU'umda yürütmek arasında ne gibi adımlar oluyor?

Kod ayrıştırılır, analiz edilir ve bir tercümana beslenir. Bunların hepsi derleyici teorisi olarak bilinen çok önemli bir bilgisayar bilimi alanıyla ilgilidir . Bir derleyici, kodu bir dilden (kaynak kodunuz) başka bir dile (genellikle üst düzey bir dilden diğerine çeviren "transpiller" olmasına rağmen) makine koduna çeviren bir programdır. Bu yıllarca araştırma yaparak geçirebileceğiniz çok büyük bir konudur, ancak temel sürüm:

Derleyici , kaynak kodunuzu okuyan ve geçerli Python (sizin durumunuzda) kodu olarak anlam ifade edip etmediğini anlamak için dilin sözdizimi kurallarını uygulayan bir çözümleyici olan bir çözümleyici ile başlar . Olmazsa, ayrıştırıcı bir hata atar ve derleyici kurtarır, ancak yaparsa ayrıştırıcı Özet Sözdizimi Ağacı veya kısaca AST olarak bilinenleri çıkarır. AST, düğümlerinin her biri sözdiziminin bir öğesini içeren bir ağaç veri yapısıdır. Örneğin, dersem x = 5, bir ile bitebileceğini BinaryExpressionbir ile düğümün operatordeğeri =, bir Leftdeğeri ReferenceExpression(x)ve bir Rightdeğeri IntegerLiteralExpression(5). Bütün programınız böyle büyük bir ağaçla temsil edilebilir.

Ayrıştırıcı bir AST ürettiğinde, ikinci aşama semantik analizdir . Sade İngilizce'de bu "AST'nin ne anlama geldiğini bulmak" anlamına gelir. Geçerli bir ayrıştırma olsa bile yasadışı bir şey yapıp yapmadığınızı belirlemek için AST'yi kontrol eder (örneğin, 3 argümanlı bir 1 argüman işlevini çağırmaya çalışıyor) ve yaparsanız hataları yükseltir. Aksi takdirde, AST'yi analiz eder ve makinenin anlamasını kolaylaştırmak için düzenlemeler yapar.

Üçüncü aşama kod üretimidir. Tamamen analiz edilmiş, basitleştirilmiş, geçerli bir AST'ye sahip olduğunuzda, onu AST'ye giren ve çıktı dilinde kod üreten jeneratöre beslersiniz. Bu senin bitmiş ürünün.

Python ile derleyici yerine tercüman kullanır. Bir tercüman, derleyici ile aynı şekilde çalışır, tek bir farkla: kod oluşturma yerine, çıktıyı belleğe yükler ve doğrudan sisteminizde çalıştırır. (Bunun nasıl gerçekleştiğinin kesin ayrıntıları farklı diller ve farklı tercümanlar arasında çılgınca değişebilir.)

Bunun Python çalışma zamanı sistemi ve / veya kütüphanesi ile ilgisi nedir?

En basit dillerin dışında tümü, büyük bir yüzdelik kullanıcı için önemli olan ve kullanıcıların bir nedenden ötürü kendi başlarına uygulaması zor olacak olan önceden tanımlanmış bir dizi işlevle gelir. Kodları, bu üçüncü taraf kütüphanelere ihtiyaç duymadan bu fonksiyonları arayabilir. (Örneğin, Python'da printçıktı gönderir stdout. Kendi başınıza uygulamada iyi şanslar!) Bu işlevler genellikle, kodun çalışma zamanında çağırabileceği ortak bir kitaplıkta toplanır, bu yüzden bilinir. dil çalışma zamanı kitaplığı olarak veya kısaca "çalışma zamanı" nı seçin.


Yani kodum kodumu bittiğinde (ve elbette temizlikten sonra) biten her şeyi yapan ve biten başka bir programa (Python çalışma zamanı sistemi) beslenir.
hgiesel

@hgiesel Python'un durumunda, tercümanın çalışma zamanının bir parçası olduğuna inanıyorum. Bu her dil için geçerli değildir. Elbette, fakat yorumlanmış diller arasında oldukça yaygındır.
Mason Wheeler

5

Standart Python uygulaması bir bayt kodu sanal makinesidir. Bu araçlar bu makina koduna (işlemcinizin işlemkodu kümesinden işlem kodları) olduğu değil senin programından üretti. Opkodlar , sanal makine byte kodunu yorumlarken sadece sanal makineye derlenmiş olan opkodlardan seçilir .

Programınızın ilk önce bayt koduna nasıl dönüştürüldüğü biraz farklı bir sorudur, ancak kısa cevap "derleme yoluyla, herhangi bir diğer aşağı dil çevirisi gibi" dır.

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.