2012-04-13 16 views
19

चाहे मैं रैकेट प्रोग्राम संकलित करता हूं या नहीं, रनटाइम प्रदर्शन में कोई फर्क नहीं पड़ता।रैकेट इंटरएक्टिव बनाम संकलित प्रदर्शन

क्या यह शुरुआत में फ़ाइल की लोडिंग है जिसे संकलन द्वारा बेहतर किया गया है? दूसरे शब्दों में, racket src.rkt चल रहा है फ्लाई पर एक जिट संकलन करता है, यही कारण है कि मैं बनाम इंटरैक्टिव संकलन में कोई अंतर नहीं देखता?

पूर्णांक अंकगणितीय के तंग loops के लिए भी, जहां मैंने सोचा कि कुछ अंतर होगा, प्रोफाइल समय बराबर हैं या नहीं, मैंने पहले raco make किया था।

क्या मुझे कुछ आसान याद आ रही है?

पीएस, मुझे लगता है कि मैं स्रोत फ़ाइल (.rkt) या .zo फ़ाइल के खिलाफ रैकेट चला सकता हूं। क्या रैकेट स्वचालित रूप से .zo का उपयोग करता है यदि कोई पाया जाता है कि .rkt फ़ाइल के अनुरूप है, या .zo फ़ाइल को स्पष्ट रूप से उपयोग करने की आवश्यकता है? किसी भी तरह से, यह उन प्रदर्शन संख्याओं में कोई फर्क नहीं पड़ता जो मैं देख रहा हूं।

उत्तर

18

हाँ, आप सही हैं।

रैकेट दो चरणों में कोड संकलित करता है: पहला, कोड बाइटकोड रूप में संकलित होता है, और फिर जब यह चलता है तो यह मशीन कोड में लगाया जाता है। जब आप किसी फ़ाइल को संकलित करते हैं, तो आप मूल रूप से बाइटकोड बनाते हैं जो बाद में इसे फिर से संकलित करने पर बचाता है। चूंकि आमतौर पर ऐसा कुछ नहीं होता है जो कोड के छोटे टुकड़ों के लिए बहुत समय लेता है, आपको रनटाइम में कोई ध्यान देने योग्य अंतर दिखाई नहीं देगा। एक चरम उदाहरण के लिए, आप संग्रह पेड़ में सभी *.zo फ़ाइलों को हटा सकते हैं और DrRacket प्रारंभ कर सकते हैं - कोड के टन होने के बाद से लॉट समय लगेगा, लेकिन एक बार यह शुरू होने के बाद, यह लगभग सामान्य रूप से चलता है । (यह "रन" पर क्लिक करने में धीमा भी होगा क्योंकि इससे कुछ फाइलें फिर से लोड और पुन: संकलित हो जाएंगी।) कोड के बड़े टुकड़ों के लिए एक और चिंता यह है कि संकलन प्रक्रिया मेमोरी खपत को उच्च कर सकती है, लेकिन यह कोड के छोटे टुकड़ों के साथ भी कोई मुद्दा नहीं है ।

प्रदर्शन में सुधार करने के संकेतों के लिए मार्गदर्शिका में Performace chapter भी देखें।

+0

बहुत बहुत धन्यवाद, एली। – Scott

11

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

नोट: एली ने एक ही समय में जवाब दिया। अधिक जानकारी के लिए उसकी प्रतिक्रिया देखें।

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