Bana Python'un yorumlanmış bir dil olduğunu anlamıştım ...
Bu popüler meme yanlış veya daha doğrusu, (doğal) dil seviyelerinin yanlış anlaşılması üzerine inşa edilmiştir: Benzer bir hata "İncil ciltli bir kitaptır" demek olacaktır. Bu benzetmeyi açıklayayım ...
"İncil" kitapların bir sınıfı (gerçek, fiziksel nesneler olarak tanımlanır) olma anlamında "bir kitap" tır; "İncil'in kopyaları" olarak tanımlanan kitapların ortak bir şeyi olduğu varsayılır (içerikler, farklı dillerde olsalar bile, farklı kabul edilebilir çeviriler, dipnot seviyeleri ve diğer ek açıklamalar) - ancak bu kitaplar mükemmel olmayan birçok açıdan farklılık göstermesine izin verilir. temel olarak kabul - ciltleme türü, ciltleme rengi, baskıda kullanılan yazı tipi (ler), varsa resimler, geniş yazılabilir kenar boşlukları ya da değil, yerleşik yer işaretlerinin sayıları ve türleri ve benzerleri, vb.
İncil'in tipik bir baskısının gerçekten ciltli bir ciltte olması oldukça olasıdır - sonuçta, genellikle tekrar tekrar okunması, çeşitli yerlere işaretlenmesi, verilen bölüm ve ayet işaretçileri aramasıyla başparmaklandırılmış bir kitaptır. , vb. ve iyi ciltli ciltleme, belirli bir kopyanın bu tür kullanım altında daha uzun süre dayanmasını sağlayabilir. Ancak, bunlar verilen bir gerçek kitap nesnesinin İncil'in bir kopyası olup olmadığını belirlemek için kullanılamayan sıradan (pratik) konulardır: ciltsiz baskılar mükemmel bir şekilde mümkündür!
Benzer şekilde, Python, bazı temel açılardan (sözdizimi, açıkça farklılık göstermelerine izin verilenlerin parçaları hariç çoğu anlambilim) benzer olması gereken bir dil uygulamaları sınıfını tanımlamak anlamında "bir dildir". hemen hemen her "uygulama" ayrıntısında - verildikleri kaynak dosyalarla nasıl başa çıktıklarını, kaynakları daha düşük seviyeli formlara (ve eğer öyleyse, hangi formu - derleyip derlemediklerini) ve formları diske veya başka bir yere), söz konusu formları nasıl yürüttüklerini vb.
Klasik uygulamaya, CPython, kısaca sadece "Python" olarak adlandırılır - ancak Microsoft'un IronPython'u (CLR kodlarını derleyen, yani ".NET"), Jython ile yan yana, birkaç üretim kalitesi uygulamasından sadece biri (JVM kodlarıyla derlenir), PyPy (Python'un kendisinde yazılır ve "tam zamanında" üretilen makine dili de dahil olmak üzere çok çeşitli "arka uç" formlarına derlenebilir). Bunların hepsi yüzeysel olarak farklı birçok kitap nesnesinin İncil olabileceği gibi Python (== "Python dilinin uygulamaları"). (== "İncil'in kopyaları").
Özellikle CPython ile ilgileniyorsanız: kaynak dosyaları Python'a özgü alt düzey bir formda derler ("bayt kodu" olarak bilinir), gerektiğinde otomatik olarak yapar (bir kaynak dosyaya karşılık gelen bayt kodu dosyası olmadığında veya bayt kodu dosyası kaynaktan daha eski veya farklı bir Python sürümü tarafından derlenmiş), genellikle bayt kodu dosyalarını diske kaydeder (ileride yeniden derlenmesini önlemek için). OTOH IronPython tipik olarak CLR kodlarını (bunları diske kaydedip kaydetmemeye bağlı olarak) ve Jython'dan JVM kodlarına (bunları diske kaydetme veya kaydetmeme) derler .class
.
Bu alt düzey formlar daha sonra "yorumlayıcılar" olarak da bilinen uygun "sanal makineler" tarafından yürütülür - CPython VM, .Net çalışma zamanı, Java VM (diğer adıyla JVM).
Yani, bu anlamda (tipik uygulamalar ne işe yarar), Python yalnızca C # ve Java ise: "önce yorumlanmış bir dildir": hepsinin önce bayt kodu üretmek, ardından bir VM / yorumlayıcı aracılığıyla yürütmek için tipik bir uygulama stratejisi vardır. .
Büyük olasılıkla, derleme sürecinin ne kadar "ağır", yavaş ve yüksek tören olduğuna odaklanılmaktadır. CPython, mümkün olduğu kadar hızlı, mümkün olduğunca az törenle derlemek için tasarlanmıştır - derleyici çok az hata kontrolü ve optimizasyonu yapar, böylece hızlı ve küçük miktarlarda bellek çalıştırabilir, bu da izin verir kullanıcının çoğu zaman bir derleme olduğunu bilmesine bile gerek kalmadan, gerektiğinde otomatik ve şeffaf olarak çalıştırılabilir. Java ve C # genellikle hataları daha kapsamlı bir şekilde kontrol etmek ve daha fazla optimizasyon yapmak için derleme sırasında daha fazla çalışma kabul eder (ve bu nedenle otomatik derleme yapmazlar). Siyah veya beyaz bir durum değil, gri tonların bir sürekliliği,