2011-12-08 19 views
6

सीपीथॉन में, मुझे लगता है कि आयात का मतलब है कि पीई फ़ाइल को पीईसी फाइल में संकलित करें और फ़ाइल को वर्तमान फ्रेम में निष्पादित करें, और अगली बार सीपीथन सीधे संकलन किए बिना पीईसी फाइल लोड करेगा। Ironpython में आयात के बारे में क्या? मुझे लगता है कि ironpython में एक पीईसी-जैसी प्रारूप नहीं है। क्या आयात करते समय हर बार संकलित होता है?लोहेपीथॉन में मॉड्यूल आयात करते समय क्या होता है?

+0

अभी भी कोई जवाब नहीं देता? ऐसा लगता है कि मुझे इसे जवाब देना है ... – zchenah

उत्तर

7

हां, आयरनपीथन प्रत्येक रन पर आयातित मॉड्यूल को पुन: संकलित करता है। दो बार, वास्तव में।

यह जटिल है।

पहले पास पर, पायथन कोड को एएसटी में पार्स किया जाता है, एएसटी को डीएलआर अभिव्यक्ति पेड़ में परिवर्तित किया जाता है, और अभिव्यक्ति वृक्ष संग्रहित होता है। जब इसे निष्पादित करने का समय होता है, तो अभिव्यक्ति वृक्ष को सरल स्टैक-आधारित दुभाषिया के लिए निर्देशों के एक सेट में संकलित किया जाता है और उस दुभाषिया पर मॉड्यूल कोड निष्पादित किया जाता है। दौड़ते समय यह तेज़ नहीं है, लेकिन यह बहुत कम समय शुरू हो गया है।

कोड के एक टुकड़े थोड़ी देर के लिए चलने के बाद, आयरनपीथन यह कितना धीमा हो जाता है, अभिव्यक्ति के पेड़ पर वापस जाता है, और कोड को .NET प्रतिनिधि में पुन: संकलित करता है। इसका मतलब है कि यह एमएसआईएल में परिवर्तित हो जाता है और उसके बाद मूल कोड .NET JIT द्वारा परिवर्तित हो जाता है। यह कोड निष्पादित करने के लिए तेज़ है, लेकिन बनाने में समय लगता है।

यह रूपांतरण प्रति-फ़ंक्शन (या यहां तक ​​कि प्रति-लूप) आधार पर किया जाता है, ताकि यदि आप बार-बार एक मॉड्यूल से एक फ़ंक्शन का उपयोग करते हैं और शेष में से कोई भी नहीं, केवल एक सामान्य रूप से उपयोग किया जाने वाला फ़ंक्शन पूर्ण आईएल कोड से गुज़र जाएगा पीढ़ी और जेटिंग।

हालांकि, इस संकलन में से कोई भी डिस्क पर सहेजा नहीं गया है। IronPython के साथ शामिल pyc.py प्रोग्राम कोड को प्रीकंपाइल कर सकता है, लेकिन यह स्वचालित रूप से नहीं किया जाता है क्योंकि रनटाइम पर उत्पन्न कोड pyc.py द्वारा उत्पन्न कोड से अलग है। रनटाइम कोड आम तौर पर एकत्रित होता है, जबकि pyc.py द्वारा उत्पन्न कोड नहीं है - और रनटाइम पर गैर-संग्रहित कोड उत्पन्न करने से स्मृति रिसाव होता है। pyc.py कुछ चरणों को बचाकर आयात को तेजी से बनाना चाहिए, लेकिन मुझे यकीन नहीं है कि कितना।

+0

बहुत बहुत धन्यवाद! – zchenah

संबंधित मुद्दे