2011-12-08 21 views
6

CPython'da, import, py dosyasını bir pyc dosyasına derlemek ve dosyayı geçerli karede yürütmek anlamına gelir ve bir dahaki sefere de CPython pyc dosyasını yeniden derlemeden doğrudan yükler. Ironpython'da ithalattan ne haber? Sanırım ironpython pisi gibi bir formata sahip değil. İthalat her zaman derliyor mu?Ironpython'da bir modülü içe aktarırken ne olur?

+0

Hala kimse cevap vermiyor mu? Görünüşe göre kendime cevap vermek zorundayım ... – zchenah

cevap

7

Evet, IronPython her modda içe aktarılan modülü yeniden derler. Aslında iki kere.

Karmaşık.

İlk geçişte, Python kodu AST'ye ayrıştırılır, AST bir DLR ifade ağacına dönüştürülür ve ifade ağacı saklanır. Bunu yürütme zamanı geldiğinde, ifade ağacı basit bir yığın tabanlı yorumlayıcı için bir dizi komut olarak derlenir ve modül kodu bu tercüman üzerinde yürütülür. Koşarken hızlı değil ama çok az başlangıç ​​zamanı var.

Bir parça kod bir süre çalıştıktan sonra, IronPython ne kadar yavaş olduğundan, ifade ağacına geri döner ve kodu .NET temsilcisine yeniden derler. Bu, MSIL ve sonra .NET JIT tarafından yerel kod dönüştürülür anlamına gelir. Bu kod yürütmek için hızlı, ancak oluşturmak için zaman alır.

Bu dönüştürme, işlev başına (hatta döngü başına) temel alınır, böylece bir modülden bir işlevi tekrar tekrar ve geri kalanını kullanmazsanız, yalnızca yaygın olarak kullanılan işlev tam IL kodundan geçecektir. nesil ve JITting. Bununla birlikte, bu derlemenin hiçbiri diske kaydedilmez. IronPython ile birlikte gelen pyc.py programı kodu önceden girebilir, ancak çalışma zamanında oluşturulan kod, pyc.py tarafından oluşturulan koddan farklı olduğu için otomatik olarak yapılmaz. Çalışma zamanı kodu genellikle toplanabilir, pyc.py tarafından oluşturulan kod ise - ve çalışma zamanında tahsil edilemeyen kod üretilmesi bellek sızıntılarına neden olur. pyc.py birkaç adımı kaydederek ithalatı daha hızlı yapmalıdır, ancak ne kadar emin değilim.

+0

Çok teşekkür ederim! – zchenah

İlgili konular