हास्केल रन टाइम प्रदर्शन के मुद्दों डीबगिंग के लिए कई शानदार टूल हैं की वजह से मुद्दों संकलन है, लेकिन क्या उपकरण/अंगूठे का नियम संकलन समय प्रदर्शन के मुद्दों डीबगिंग के लिए मौजूद हैं?डिबगिंग समय प्रदर्शन GHC की बाधा solver
विशेष रूप से, मेरे कुछ कोड में बाधा सॉल्वर हमेशा के लिए ले रहा है (1-2 सेकंड से कई मिनट तक)। मुझे पूरा यकीन है कि यह बाधाओं में प्रकार के परिवारों का उपयोग कैसे कर रहा है, लेकिन मुझे नहीं पता कि इस संदर्भ में किस प्रकार की चीजें महंगे हैं या यह देखने के लिए कि बाधा सॉल्वर अपना समय कहां खर्च कर रहा है। मेरा सबसे अच्छा अनुमान यह है कि टाइप सूचियों पर मेरे संचालन में से एक रैखिक के बजाय वर्गबद्ध समय ले रहा है।
चलो एक उदाहरण देखें कि मुझे बाधा हल करने का संदेह क्यों है।
class ExampleClass a where
type ExampleType a
f :: ExampleType a -> a
data ExampleData (xs :: [a]) = ...
instance
(Constraint1
, Constraint2
, ...
) => ExampleClass (ExampleData xs)
where
type ExampleType (ExampleData xs) = Int
f = undefined
जब मैं बहुत जल्दी GHCi में इस फ़ाइल
ghci> :l Example.hs
संकलन होता है लोड, बहुत 1 से भी कम समय दूसरा: मेरे फ़ाइलों में, मैं कोड की तरह दिखता है। फिर, मैं निम्न पंक्ति निष्पादित करें:
ghci> let test = f Int :: ExampleData
कोई वास्तविक गणना चल रहा है, लेकिन यह अभी भी एक बहुत लंबे समय लेता है। ExampleData
की घटना घोषणा में अधिक बाधाएं, जितनी देर लगती है। (वास्तव में बाद में परीक्षण का मूल्यांकन तुरंत होता है।) इन प्रदर्शन समस्याओं को डीबग करने का सबसे अच्छा तरीका यह है कि बाधाओं को एक-एक करके टिप्पणी करना और यह देखना कि कौन से प्रदर्शन प्रदर्शन को प्रभावित कर रहे हैं। लेकिन यह बहुत समय ले रहा है, और जब उन बाधाओं में जटिल प्रकार के परिवार शामिल होते हैं, तो यह वास्तव में जानकारीपूर्ण नहीं है।
तो, क्या इस समस्या को डीबग करने के लिए मैं एक बेहतर दृष्टिकोण ले सकता हूं?
संपादित करें: यह पता चला है कि मैंने bug in GHC खोजा है। बग से जुड़ी एक स्क्रिप्ट है जो दर्शाती है कि बाधा सॉल्वर रैखिक होने वाले इनपुट पर वर्गबद्ध समय ले रहा है।
मुझे लगता है कि आपने जीएचसी को प्रोफाइलिंग के साथ चालू करने और उसका उपयोग करने के साथ संकलन करने का प्रयास किया है? –
@ बॉयडस्टेफेनस्मिथर। मैंने कभी भी जीएचसी संकलित नहीं किया है, संकलन के साथ अकेले रहने दें। क्या इस सुविधा का उपयोग करने के बारे में कोई ट्यूटोरियल है? –
[बिल्डिंग जीएचसी] (http://ghc.haskell.org/trac/ghc/wiki/building) शायद एक अच्छा संसाधन है, और जीएचसी बेंचमार्किंग पर भी एक अनुभाग है हालांकि मुझे नहीं पता कि इसमें प्रोफाइलिंग शामिल है या नहीं। –