Yorumlayıcı nedir?
Yorumlayıcı, programın tamamını önce ayrı bir makine kodu dosyasına çevirmek yerine kaynak kodu doğrudan çalıştıran, talimatlarını ilerledikçe uygulayan programdır. Standart Python ve Ruby uygulamaları birer yorumlayıcıdır.
Güncellendi: 24 Eylül 2026
- 1print("Hello")
- 2total = 2 + 3
- 3print(total)
- 4print("Done")
Her çalıştırma satırları yeniden çevirir. Yazım hatasını aç: yorumlayıcı yine de 3. satıra ulaşıp durmadan önce "Hello" yazdırır.
python3 hello.py yaz, çıktı ekrana gelir; ama sonra klasöre bak: yeni bir program dosyası oluşmamıştır. Gerçekte çalışan program python3'ün kendisiydi, yani Python yorumlayıcısı. hello.py dosyasını okudu, her ifadenin ne anlama geldiğini çözdü ve onu yaptı. Betiği yarın yeniden çalıştırırsan yorumlayıcı kaynağı yine baştan okur.
Yorumlayıcı nasıl çalışır
Yorumlayıcı, program bitene kadar tek bir döngüyü tekrarlar: sıradaki talimatı al, ne anlama geldiğini çöz, uygula, devam et. Çalışırken programın değişkenlerini kendi belleğinde tutar; total = price * 3 satırının birkaç satır önce atanmış bir price değerini kullanabilmesinin nedeni budur.
Bunu görmenin en net yolu, REPL (read, evaluate, print, loop: oku, değerlendir, yazdır, tekrarla) denen etkileşimli moddur. Dosya adı vermeden python3 yaz; her satır Enter'a bastığın anda çalışır:
>>> price = 4
>>> price * 3
12
Gerçek yorumlayıcılar bir hazırlık adımı ekler. Standart Python yorumlayıcısı CPython, önce dosyanın tamamını basit talimatlardan oluşan kompakt bir liste olan bytecode'a derler, sonra bu bytecode'u talimat talimat yürüten bir döngü çalıştırır. Tek bir satırın bytecode'unu yazdırabilirsin:
Python 3.12 şunu yazdırır (diğer sürümlerde ayrıntılar farklıdır):
0 0 RESUME 0
1 2 LOAD_NAME 0 (price)
4 LOAD_CONST 0 (3)
6 BINARY_OP 5 (*)
10 STORE_NAME 1 (total)
12 RETURN_CONST 1 (None)
Bu satırların her biri yorumlayıcı döngüsünün bir adımıdır: price değerini getir, 3 sabitini getir, ikisini çarp, sonucu total içine kaydet. Hiçbiri makine kodu değildir; her adımı, kendisi derlenmiş bir C programı olan yorumlayıcı uygular.
Hatalar satır çalıştığında ortaya çıkar
Yorumlayıcı ilerledikçe yürüttüğü için bir program, bir hataya çarpmadan önce gerçek iş yapabilir. Bunu çalıştır; çökmeden önce ilk iki satır yazdırılır:
Step 1: starting
Step 2: still fine
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
Sözdizimi hatası farklı davranır, çünkü CPython dosyanın tamamını, herhangi bir kısmını çalıştırmadan önce bytecode'a derler. 3. satırı print("Step 3:" 10) olarak değiştir (virgül eksik), hiçbir şey yazdırılmaz, Step 1 bile:
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Yani "yorumlayıcı kodu satır satır çalıştırır" sözü yalnızca yarı yarıya doğrudur. Dilbilgisi önce dosyanın tamamı için kontrol edilir; sıfıra bölmek ya da var olmayan bir adı kullanmak gibi diğer her şey ancak o satır çalıştığında bulunur. İlk tür için sözdizimi hatası sayfasına bak.
Derleyici ve yorumlayıcı farkı
Bir derleyici, programın tamamını çalışmadan önce ayrı bir dosyaya çevirir. Yorumlayıcı ise programı her seferinde kendisi çalıştırır. Pratikteki farklar bundan doğar:
| Derleyici | Yorumlayıcı | |
|---|---|---|
| İş ne zaman yapılır | Bir kez, program çalışmadan önce | Program her çalıştığında |
| Çıktı | Ayrı bir dosya (çalıştırılabilir dosya veya bytecode) | Ayrı bir program dosyası yok |
| Kullanıcılara ne verirsin | Derlenmiş programı | Kaynak kodu ve kullanıcının bilgisayarında kurulu yorumlayıcıyı |
| Hata kontrolü | Program çalışmadan önce tüm program için sözdizimi hataları ve, tipli dillerde, tip hataları | Sözdizimi genellikle önce kontrol edilir; diğer hatalar hatalı satır çalıştığında görünür |
| Düzenle ve çalıştır | Her değişiklikten sonra yeniden derle | Kaydet ve yeniden çalıştır |
| Hız | Daha hızlı, işlemci makine kodunu doğrudan çalıştırır | Daha yavaş, her talimat program çalışırken çözülür |
| Taşınabilirlik | Her işlemci ve işletim sistemi için yeniden derle | Aynı kaynak, yorumlayıcının bulunduğu her yerde çalışır |
| Tipik diller | C, C++, Rust, Go | Python, Ruby, PHP, Bash |
Hız farkı, sıkı aritmetik döngülerde gerçektir: aynı döngü derlenmiş C olarak CPython'dakinden kat kat hızlı çalışabilir. Çoğunlukla ağı, diski ya da kullanıcıyı bekleyen programlarda fark genellikle fark edilemeyecek kadar küçüktür.
Derlenen ya da yorumlanan olmak dilin bir özelliği değildir
Dil bir kurallar bütünüdür; derleyici ya da yorumlayıcı bu kuralları uygulayan bir programdır. Aynı dil iki şekilde de çalıştırılabilir ve popüler dillerin çoğu ikisini karıştırır:
- Python. CPython bytecode'a derler ve onu yorumlar. Başka bir uygulama olan PyPy, sık çalışan kodu program çalışırken makine koduna çeviren bir just-in-time (JIT) derleyici ekler.
- Java.
javackaynağı önceden bytecode'a derler. Java Sanal Makinesi sonra bu bytecode'u yorumlar ve en yoğun çalışan metotları JIT ile makine koduna derler. Java 11'den berijava Main.java, tek bir kaynak dosyayı önce bellekte derleyerek doğrudan çalıştırır. - JavaScript. Tarayıcılar ve Node.js, V8 gibi motorlar kullanır; bu motorlar kodu yorumlayarak başlar ve program çalıştıkça sık çalışan kısımları makine koduna derler.
- C ve C++. Neredeyse her zaman GCC, Clang ya da MSVC ile önceden derlenir.
python3 app.py # Python: interpreter, bytecode behind the scenes
node app.js # JavaScript: V8 interprets, then JIT-compiles
javac Main.java # Java step 1: compile to Main.class
java Main # Java step 2: the JVM runs the bytecode
Hangisi olursa olsun, yorumlayıcı ya da sanal makine programın çalışma zamanı ortamının bir parçasıdır: program nerede çalışacaksa orada kurulu olmalıdır.
Yaygın yanlış inanışlar
- "Yorumlayıcı her satırı makine koduna çevirir." Klasik bir yorumlayıcı programın için hiçbir zaman makine kodu üretmez. Bir talimatı okur ve yorumlayıcının içine zaten derlenmiş olan kodla onu yerine getirir. Çalışma zamanında makine kodu üretmek bir JIT derleyicinin işidir.
- "Yorumlanan dillerde derleme adımı yoktur." CPython, Ruby'nin YARV'si ve PHP önce bytecode'a derler. Bu adım otomatik ve görünmez olduğu için gözden kaçması kolaydır.
- "Yorumlanan, yavaş demektir." JIT derleme farkın büyük kısmını kapattı. V8, JavaScript'i Electron üzerine kurulu VS Code gibi büyük uygulamalar için yeterince hızlı çalıştırır.
- "Python yorumlayıcının adıdır." Python dilin adıdır. CPython, PyPy ve MicroPython onun için yazılmış farklı yorumlayıcılardır; hızları ve destekledikleri kütüphaneler farklı olabilir.
Sırada ne var
Karşılaştırmanın diğer yarısı için derleyicinin ne olduğunu ve kaynak kodu nasıl makine koduna çevirdiğini oku. Çalışma zamanı ortamı sayfası, yorumlayıcının yanında başka neler getirdiğini anlatır. Bir yorumlayıcıyı kendin denemek için bir Python betiği çalıştır ya da Python playground sayfasını aç.
Sıkça Sorulan Sorular
Python derleyici mi yorumlayıcı mı kullanır?
C++ yorumlayıcıyla mı derleyiciyle mi çalışır?
Hangisi daha hızlı, yorumlayıcı mı derleyici mi?
REPL nedir?
python3 ya da node yazmak bir REPL açar. Dosya oluşturmadan küçük bir fikri denemek için kullanışlıdır.Bir dil hem derlenen hem yorumlanan olabilir mi?
javac ile bytecode'a derlenir, sonra JVM tarafından yorumlanır ve JIT ile derlenir; Python ve JavaScript gibi diller için de hem yorumlayıcılar hem derleyiciler vardır.