2013-08-20 8 views
16

मेरे पास एक TH-heavy फ़ाइल है जो संकलन के लिए लगभग 30 सेकंड लेती है। मेरे टेम्पलेट हास्केल के प्रदर्शन को डीबग करने में सहायता के लिए मैं कुछ तकनीकों का उपयोग कर सकता हूं?प्रोफाइलिंग टेम्पलेट हास्केल

+0

मुझे वास्तव में पता चला है कि, कहा गया फ़ाइल में, TH तुरंत चलता है और हर समय जीएचसी द्वारा उदाहरण संकल्प करने के लिए खर्च किया जाता है। हालांकि इस सवाल में अभी भी रुचि है। –

+2

शायद आप एक [Quasi] (http://hackage.haskell.org/packages/archive/template-haskell/2.8.0.0/doc/html/Language-Haskell-TH-Syntax.html#t:Quasi) बना सकते हैं कुछ मोनैड के लिए उदाहरण जो आईओ में रन टाइम पर चलता है, तो आप मानक प्रोफाइलिंग टूल का उपयोग कर सकते हैं। मोनैड में संशोधित जानकारी और स्थान (शायद TH द्वारा उत्पन्न किया गया) की एक सूची हो सकती है, ताकि आप अभी भी पुनः उपयोग कर सकें। – bennofs

उत्तर

2

यदि मैं सही ढंग से TH के संकलन प्रवाह को समझता हूं, तो सामान्य हैकेल फ़ंक्शंस को संकलित समय पर विभाजित करते समय निष्पादित किया जा रहा है। लेकिन आप निश्चित रूप से रनटाइम पर अपने आप पर दौड़ सकते हैं।

उदाहरण के लिए आपके पास TH-heavy फ़ाइल में $ (foo x y ...) जैसा कुछ है। एक और फाइल बनाएं और 'foo x y' पर कॉल करें लेकिन परिणाम को विभाजित न करें। फिर आप सामान्य रूप से 'foo' प्रोफाइल करने में सक्षम होंगे। अगर एएसटी पीढ़ी के चरण में बाधा है तो आप इसका पता लगाएंगे। आलस्य पर विचार करना मत भूलना।

0

जीएचसी 8 के रूप में, यह -fexternal-interpreter के साथ किया जा सकता है।

प्रोफाइलिंग के साथ TH फ़ंक्शन को परिभाषित करने वाली लाइब्रेरी को संकलित करें, फिर कोड को संकलित करें * जो THH फ़ंक्शन का उपयोग जीएचसी विकल्पों -fexternal-interpreter -opti+RTS -opti-p के साथ एक स्प्लिसे में करता है। इसे ghc-iserv-prof.prof नामक फ़ाइल का उत्पादन करना चाहिए।

इस दृष्टिकोण का लाभ है कि आप Q मोनैड की पूर्ण कार्यक्षमता का उपयोग कर सकते हैं।

* उसी पुस्तकालय परियोजना में एक बेंचमार्क सूट TH पुस्तकालय के रूप में (लेकिन एक अलग एचएस-स्रोत-डीआईआर में) भी काम करता है। यह एक ही पुस्तकालय में परिभाषित और उपयोग किए गए एक TH फ़ंक्शन के साथ भी काम कर सकता है, लेकिन मुझे लगता है कि आप तब व्याख्या किए गए कोड का प्रोफाइल करेंगे।

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