Python'un bir derleyicisi var! Sadece fark etmiyorsunuz çünkü otomatik olarak çalışıyor. Yine de orada olduğunu söyleyebilirsiniz: bakın .pyc
(veya .pyo
optimize edici açıksa) sizin için modüller için oluşturulan dosyalara bakın import
.
Ayrıca, yerel makinenin kodunu derlemez. Bunun yerine, sanal bir makine tarafından kullanılan bir bayt kodunu derler. Sanal makinenin kendisi derlenmiş bir programdır. Bu Java'nın nasıl çalıştığına çok benziyor; Öyle ki, aslında, Java Sanal Makinesi'nin bayt kodunu derleyen bir Python varyantı ( Jython ) var! Microsoft'un CLR'sini (.NET tarafından kullanılan) derleyen IronPython da var. (Normal Python bayt kodu derleyicisine bazen bu alternatiflerden ayırmak için CPython denir.)
Dilin eksik olduğu için C ++ 'ın derleme işlemini göstermesi gerekiyor; Bağlayıcınızın programınızı oluşturmak için bilmesi gereken her şeyi belirtmez, ayrıca derleme seçeneklerini de taşınabilir şekilde belirleyemez (bazı derleyiciler kullanmanıza izin verir #pragma
, ancak bu standart değildir). Bu yüzden işin geri kalanını makefiles ve muhtemelen auto cehennem (autoconf / automake / libtool) ile yapmanız gerekiyor. Bu gerçekten sadece C'nin nasıl yapıldığına dair bir giriştir. Ve C bunu böyle yaptı çünkü derleyiciyi basitleştirdi, bu da çok popüler olmasının temel nedenlerinden biriydi (herkes 80'lerde basit bir C derleyicisi atabilirdi).
Derleyicinin veya bağlayıcının çalışmasını etkileyebilecek, ancak C veya C ++ 'ın sözdiziminde belirtilmeyen bazı şeyler:
- bağımlılık çözünürlüğü
- dış kütüphane gereksinimleri (bağımlılık sırası dahil)
- iyileştirici seviyesi
- uyarı ayarları
- dil özellikleri
- linker eşlemeleri (hangi programın final programında nereye gittiği)
- hedef mimarisi
Bunlardan bazıları tespit edilebilir, ancak belirtilemezler; örneğin, hangi C ++ 'nın kullanımda olduğunu tespit edebilirim __cplusplus
, ancak kodun kendi kodunda kullanılan C ++ 98'in kendisi olduğunu belirtemem; Makefile'daki derleyiciye bir bayrak olarak göndermem veya bir diyalogda bir ayar yapmam gerekiyor.
Derleyicide otomatik olarak bağımlılık kayıtları üreten bir "bağımlılık çözünürlük" sistemi olduğunu düşünebilirsiniz, ancak bu kayıtlar yalnızca belirli bir kaynak dosyanın hangi başlık dosyalarını kullandığını söyler. Yürütülebilir bir programa bağlanmak için hangi ek kaynak kod modüllerinin gerekli olduğunu gösteremezler, çünkü C veya C ++ 'da verilen bir başlık dosyasının başka bir kaynak kod modülünün arabirim tanımı olduğunu göstermek için standart bir yol yoktur. Birden fazla yerde görünmesini istediğiniz satırları seçin, böylece kendinizi tekrar etmeyin. Dosya adlandırma kurallarında gelenekler vardır, ancak bunlar derleyici ve bağlayıcı tarafından bilinmez veya uygulanmaz.
Bunlardan birkaçı kullanılarak ayarlanabilir #pragma
, ancak bu standart değildir ve standarttan bahsediyordum. Bütün bunlar olabilir standart belirtilebilir, ancak geriye dönük uyumluluk yararına olmamıştır. Hakim bilgelik, dosya dosyalarının ve IDE'lerin kırılmadığı, bu yüzden onları düzeltmeyin.
Python, tüm bu dilde işler. Örneğin, import
açık bir modül bağımlılığı belirtir, bağımlılık ağacını belirtir ve modüller başlık ve kaynak dosyalara bölünmez (yani arayüz ve uygulama).