Yorumlayıcı
- İngilizcesi
- Interpreter
- Okunuşu
- intörpritır
Kısaca
Yorumlayıcı, tüm programı önce ayrı bir çalıştırılabilir dosyaya çevirmek yerine kaynak kodu doğrudan, adım adım çalıştıran bir programdır.
Yorumlayıcı (interpreter) nedir?
Yorumlayıcı, önce bağımsız bir çalıştırılabilir dosya üretmek yerine bir programı kodunu okuyarak ve her talimatı ilerledikçe yerine getirerek yürütür. Ona bir betik verirsiniz ve hemen çalışmaya başlar. Python, Ruby, PHP, JavaScript ve Bash gibi kabuk dilleri genellikle yorumlayıcılarla çalıştırılır; bu yüzden onlara sıklıkla yorumlanan diller denir.
Modern yorumlayıcıların çok azı ham kaynak metnini satır satır çalıştırır. Çoğu önce kodu bir ağaca çözümler ve birçoğu ardından onu, yorumlayıcının ana döngüsünün yürüttüğü, bir sanal makine için kompakt bir talimat kümesi olan bytecode'a derler. CPython bu şekilde çalışır ve V8 gibi JavaScript motorları, sık çalışan kodu program çalışırken yerel makine koduna dönüştüren tam zamanında (JIT) derlemeyle daha da ileri gider. Birçok yorumlayıcı ayrıca bir satır yazıp sonucu hemen gördüğünüz etkileşimli bir istem olan REPL'i (read-eval-print loop) sunar.
Yorumlayıcı, bir konferansta konuşmayı yapılırken cümle cümle çeviren bir sözlü çevirmen gibidir; derleyici ise bir kitabın tamamını yayımlanmadan önce çeviren bir çevirmen gibidir. Yorumlama, düzenle-ve-çalıştır döngüsünü hızlı kılar ve aynı betiğin yorumlayıcının kurulu olduğu her makinede çalışmasını sağlar; bedeli ise daha yavaş yürütme ve yalnızca hatalı satır gerçekten çalıştığında ortaya çıkan hatalardır.
Yorumlayıcı ile derleyici bir uygulamayı tanımlar, bir dili değil. Aynı dil her iki yolla da ele alınabilir: Java, JVM'in sonra yorumladığı ve JIT ile derlediği bytecode'a derlenir ve Python'ın hem CPython yorumlayıcısı hem de önceden (ahead-of-time) derleyicileri vardır. Dolayısıyla “yorumlanan dil”, katı bir kural değil, bir dilin genellikle nasıl çalıştırıldığının kısaltmasıdır.
Önemli noktalar
- Yorumlayıcı, önce ayrı bir çalıştırılabilir dosya üretmeden kodu doğrudan çalıştırır.
- Çoğu yorumlayıcı kodu çözümler ve ham metin yerine bir sanal makinede bytecode çalıştırır.
- Yorumlayıcı içindeki JIT derlemesi, sık çalışan kodu çalışma zamanında hızlı makine koduna dönüştürür.
- Yorumlanan kodu değiştirmek ve test etmek hızlıdır, ancak genellikle derlenmiş koddan daha yavaş çalışır.
- Derlenmiş ya da yorumlanmış olmak bir uygulamayı tanımlar, dilin kendisini değil.
Örnek
# Read each instruction and carry it out immediately
program = ["push 2", "push 3", "add", "print"]
stack = []
for line in program:
op, *args = line.split()
if op == "push":
stack.append(int(args[0]))
elif op == "add":
stack.append(stack.pop() + stack.pop())
elif op == "print":
print(stack[-1]) # 5Sık sorulan sorular
Yorumlayıcı ile derleyici arasındaki fark nedir?
Derleyici, tüm programı önceden makine koduna gibi başka bir biçime çevirir ve sonucu daha sonra çalıştırırsınız. Yorumlayıcı ise programı çevirerek doğrudan yürütür; bu yüzden ayrı bir derleme adımı yoktur.
Python yorumlanan bir dil midir?
Standart uygulama olan CPython, kaynak kodu bytecode'a derler ve ardından bu bytecode'u bir sanal makinede yorumlar. Bir geliştirici açısından yorumlanan bir dil gibi davranır, çünkü .py dosyasını doğrudan çalıştırırsınız.
REPL nedir?
REPL, yani read-eval-print loop, birçok yorumlayıcının sunduğu etkileşimli bir istemdir. Bir ifadeyi okur, değerlendirir, sonucu yazdırır ve bir sonrakini bekler; bu da denemeler yapmak için kullanışlıdır.
Sık karşılaştırılanlar
İlgili sayfalar
- DerleyiciProgramlamanın Temelleri, s. 12Derleyici, bir programlama dilinde yazılmış kaynak kodu, bilgisayarın çalıştırabileceği makine kodu gibi daha alt seviyeli bir biçime çeviren programdır.
- PythonProgramlama Dilleri, s. 26Python, okunaklı sözdizimiyle bilinen; veri bilimi, otomasyon ve web arka uçlarında yaygın kullanılan, genel amaçlı ve dinamik tipli bir programlama dilidir.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- TranspilerWeb Geliştirme, s. 49Transpiler, kaynak kodu bir dilden ya da dil sürümünden benzer soyutlama düzeyindeki bir başkasına, örneğin TypeScript'ten JavaScript'e çeviren araçtır.
- Shellİşletim Sistemleri, s. 28Shell, kullanıcının yazdığı ya da bir betikte yazılı komutları okuyup işletim sisteminden çalıştırmasını isteyen, genellikle metin arayüzlü bir programdır.
- RubyProgramlama Dilleri, s. 28Ruby, geliştirici mutluluğu için tasarlanmış, okunaklı sözdizimi ve Ruby on Rails web çatısıyla tanınan, dinamik ve nesne yönelimli bir dildir.
- JIT derlemeProgramlamanın Temelleri, s. 30JIT derleme, programın en sık çalışan kısımlarını çalışma anında makine koduna çevirerek yorumlayıcının hızlı açılışını derlenmiş kodun hızıyla birleştirir.
- Programlama DiliProgramlama Dilleri, s. 25Programlama dili, bilgisayarın yerine getirebileceği talimatları yazmak için kesin kuralları olan biçimsel bir dildir; Python, JavaScript, Java ya da C gibi.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin