हास्केल का निर्माण और मावेन के समान विरूपण साक्ष्य वातावरण


20

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

हास्केल पक्ष पर, हम cabalपरियोजना का निर्माण करने के लिए उपयोग कर रहे हैं । हमारी परियोजना को अनुकूलन के बिना बनाने में लगभग 10-15 मिनट लगते हैं। कंपाइलर ऑप्टिमाइज़ेशन चालू होने में कुछ घंटे लगते हैं, जो दर्दनाक है।

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


आपके प्रश्न का उत्तर नहीं है, लेकिन, क्या आप -j विकल्प के साथ "कैबल बिल्ड / इंस्टाल" करते हैं?
डैनियल डिआज कैरेट

हां, लेकिन मुझे ज्यादा स्पीडअप नहीं दिखता। निर्माण के समय सीपीयू का उपयोग लगभग 15% -20% है। मुझे यकीन है नहीं जहां समस्या है: cabal, GHC, Test.Frameworkया लिंकर।
ऑक्सी

इस SO उत्तर के अनुसार stackoverflow.com/questions/27173910/… मुख्य कारण हास्केल निष्पादन की मूल प्रकृति है।
डैनियल डिआज कैरेट

मैं ज्यादातर विकास की बात कर रहा हूं। यह सच है कि बाइनरी विभिन्न ओएस, सीपीयू आर्किटेक्चर और यहां तक ​​कि संकलक संस्करणों के कारण असंगति पैदा कर सकता है। लेकिन, जब मैं एक ही मशीन, एक ही ओएस और हर दिन एक ही संकलक पर विकसित कर रहा हूं तो मुझे इतना समय क्यों बर्बाद करना चाहिए?
ऑक्सी

ऐसा लगता है कि हैलिकॉन
लुबोमी सेडला

जवाबों:


2

आप निक्स का उपयोग करने पर विचार कर सकते हैं , जो हास्केल के लिए अच्छे समर्थन के साथ एक सामान्य उद्देश्य, क्रॉस-प्लेटफॉर्म पैकेज मैनेजर है।

निक्स के पास पैकेजों को परिभाषित करने के लिए एक कस्टम प्रोग्रामिंग भाषा है (जो कि शुद्ध, कार्यात्मक और आलसी होने के लिए ऐसा होता है)। नए पैकेजों को परिभाषित करना और मौजूदा लोगों को विस्तारित करना बहुत आसान है (उदाहरण के लिए, निर्भरता को बदलने के लिए, एक अलग गिट रेपो, आदि से स्रोत प्राप्त करें)।

पैकेज की पहचान हैश द्वारा की जाती है, जिसमें निर्भरता शामिल होती है। इसलिए कई संस्करण, या अलग-अलग निर्भरता वाले एक ही संस्करण, बिना संघर्ष के साथ-साथ रह सकते हैं। निक्स एक "बाइनरी कैश" सर्वर पर वांछित हैश देख सकता है, यह देखने के लिए कि क्या उन विशेष निर्भरता वाले विशेष पैकेज पहले से ही बनाए गए हैं; यदि हां, तो यह संकलन के बजाय बिल्ड उत्पाद डाउनलोड करेगा।

वर्तमान में, nixpkgs रिपॉजिटरी में हैक / के अधिकांश / सभी, कई GHC संस्करण (7.10.1, 7.8.4 और कुछ JS बैकएंड) शामिल हैं और एक cabal2nixउपयोगिता जो .cabal फाइलों से निक्स पैकेज बनाने का एक बहुत अच्छा काम करती है। इसमें Nix- आधारित "हाइड्रा" CI सर्वर भी है, जिसका उपयोग आप SCM कमिट के आधार पर बिल्ड ट्रिगर को करने के लिए कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.