Python yorumlanan mı yoksa derlenen bir dil midir?

Gokhan Yilmaz
3 min readMay 29, 2020

Bu flood’da , genelde Python diline yeni başlayan arkadaşların sıkça sorduğu Python derlenen mi yoksa yorumlanan bir dil midir sorusunun cevabını mümkün mertebe açıklamak istiyorum.

Python

Python, Guido Van Rossum tarafından Amsterdam’ da bir hobi projesi olarak 1990 yılında geliştirilmeye başlanmıştır. Piyasaya ilk olarak 1991 yılında sürülmüştür. Adını bilinenin aksine yılandan değil Guido van Rossum’un çok sevdiği, Monty Python adlı bir İngiliz komedi grubunun Monty Python’s Flying Circus adlı gösterisinden almıştır. Python, Nesne yönelimli(Object Oriented), dinamik tipli(Dynamic-typed) ve yüksek seviyeli(High-Level) açık kaynak bir programlama dili olarak karşımıza çıkmaktadır. Piyasada kullanılan en popüler programlama dilleri arasındadır. Buradan daha detaylı olarak inceleyebilirsiniz.

Kısa bir özetten sonra gelelim sorumuza:)

Python yorumlanan mı yoksa derlenen bir dil midir?

Eğer C veya C++ gibi bir dil ile program yazarsanız programınızı derlemeniz gerekir. Bu Derleme işlemi, yazdığınız kodun makine tarafından anlaşılabilir olmasını sağlar yani makine koduna çevirir. Makine kodu ise işlemci(CPU) tarafından doğrudan çalıştırılan talimatların en temel düzeydeki formudur. Başarılı bir derleme sonrasında çalıştırılabilir(executable) bir dosya oluşturulur. Bu dosyanın çalıştırılması(execute) durumunda ise kodunuz adım adım çalıştırılır.

Derleme süreci 4 aşamadan oluşur:

  • Ön işleme (Preprocessing)
  • Derleme (Compilation)
  • Çevirme (Assembly)
  • Bağlama (Linking)

Şimdi Python’ın nasıl bir dil olduğuna ve genelde kafa karıştıran bu durumuna açıklık getirelim. Python aslında her iki işlemi de yapmaktadır yani hem derler hem de yorumlar. Peki, ama nasıl? Python’a kodumuzu çalıştırmasını söylediğimizde kaynak kodumuz bir kaç adımdan geçecektir.

  1. Önce Bytecode’a derlenir.
  2. Derlemeden sonra sanal makineye(Python Virtual Machine) yönlendirilir.

Python Virtual Machine(PVM), Bytecode üzerindeki talimatların tek tek çalıştırılmasını sağlayan büyük bir döngüden(loop) ibarettir. Yani Python’ın runtime engine’idir. Kodumuzu gerçek anlamda çalıştıran bileşendir. Teknik olarak da python yorumlayıcısının son adımıdır.

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

p1 = Person("Allen", 27)

print(p1.name)
print(p1.age)

Yukarıdaki gibi bir kaynak kodumuz olduğunu var sayarsak süreci aşağıdaki gibi inceleyebiliriz.

Peki bytecode nedir açıklamak gerekirse, kaynak kodumuzun düşük seviyeli ve platform bağımsız(low-level platform-independent) temsilidir. (Not: Python Bytecode binary machine code değildir.) Bytecode, orijinal source code’dan çok daha hızlı bir şekilde çalıştırılabilmektedir. Python bunun için .pyc uzantılı bir dosya oluşturur. Programımız daha sonra çalıştırıldığında Python bu .pyc dosyasını yükleyecektir ve kaynak kodumuzda herhangi bir değişiklik olmadığı sürece de derleme(compilation) aşamasını atlayacaktır. Python değişikliği yakalamak için otomatik olarak kaynak kodun zaman bilgisini(timestamp) ve bytecode’u kontrol eder. Eğer kaynak kodda bir değişim olursa otomatik olarak bytecode’a çevirecektir ve daha sonra çalıştırmak istediğinizde bu bytecode üzerinden çalıştıracaktır. Ayrıca bu bytecode’u otomatik olarak sistem hafızasına yazacaktır ve derlenen bytecode daha sonra memory’den yorumlanacaktır.

Özetlemek gerekirse, aslında Python önce yazılan kodu bytecode’a derleyecek ve daha sonra bu bytecode’u yorumlayacaktır. Kodda yapılan her değişiklik sonrası ise tekrar bytecode üretilecektir. Umarım paylaşım yararlı olmuştur başka bir yazıda görüşmek üzere.

--

--