2009-04-29 2 views
75

जैसा कि मैं हास्केल सीख रहा हूं, मुझे लगता है कि language extensions वास्तविक जीवन कोड में उपयोग किया गया है। एक नौसिखिया के रूप में, क्या मुझे उनका उपयोग करना सीखना चाहिए, या क्या मुझे उन सभी कीमतों से बचना चाहिए? मैं देखता हूं कि यह हास्केल   98 के साथ संगतता को तोड़ता है और केवल बहुत अधिक जीएचसी कोड को सीमित करता है। हालांकि, अगर मैं हैकेज पर संकुल ब्राउज़ करता हूं, तो मैं देखता हूं कि उनमें से अधिकतर जीएचसी-वैसे भी हैं।क्या मुझे जीएचसी हास्केल एक्सटेंशन का उपयोग करना चाहिए या नहीं?

तो, भाषा एक्सटेंशन का उपयोग करने के लिए समुदाय का एक दृष्टिकोण क्या है?

और यदि एक्सटेंशन का उपयोग ठीक है, तो मैं उन एक्सटेंशन को अलग कैसे कर सकता हूं जिन्हें मैं "सुरक्षित रूप से" (जो अगले हास्केल मानक का हिस्सा बनने की संभावना है) उन लोगों से अलग कर सकता हूं जो अधिकतर "प्रयोगात्मक" हैं? उदाहरण के लिए, मुझे लगता है कि -XDisambiguateRecordFields अच्छा और उपयोगी है, लेकिन क्या भविष्य में इसे समर्थित होने की संभावना है?

+0

मैं व्यक्तिगत रूप से इस संगतता के बारे में चिंता नहीं करता; जीएचसी इतना अच्छा है कि यह मुख्यधारा है - यहां तक ​​कि उन लोगों के लिए भी जो मुख्यधारा (हास्केलर्स) के अनुरूप होने से इनकार करते हैं। – MasterMastic

उत्तर

69

कुछ जीएचसी एक्सटेंशन हैं जो बिना रहने के लिए बहुत अच्छे हैं। मेरे पसंदीदा में

  • Multiparameter प्रकार कक्षाएं
  • Scoped प्रकार चर
  • उच्चतर रैंक प्रकार
  • सामान्यीकृत बीजीय डेटा प्रकार (GADTs) कर रहे हैं
इनमें से

वास्तव में आवश्यक एक multiparameter है कक्षाएं टाइप करें।

कुछ जीएचसी एक्सटेंशन बहुत सट्टा और प्रयोगात्मक हैं, और आप सावधानी के साथ उपयोग करना चाह सकते हैं। एक स्थिर और विश्वसनीय विस्तार की पहचान के लिए एक अच्छा तरीका है अगर यह Haskell Prime में शामिल किए जाने, जो उत्तराधिकारी होने की आशा की जाती है के लिए उम्मीद है देखने के लिए है हास्केल 98.

मैं दूसरे डॉन स्टीवर्ट के सुझाव हर एक्सटेंशन का उपयोग कर चिह्नित किया जाना चाहिए कि स्रोत फ़ाइल में LANGUAGE प्रगा। कमांड-लाइन विकल्पों का उपयोग कर एक्सटेंशन सक्षम करें।

+2

धन्यवाद! मैं एक्सटेंशन सक्षम करने के लिए कमांड लाइन विकल्पों से बचूंगा। – sastanin

+0

मैं कल्पना नहीं कर सकता कि बहु पैरामीटर प्रकार कक्षाएं या उच्च रैंक प्रकार नहीं हैं .. – alternative

+6

क्या यह उत्तर Haskell 2010 के लिए अद्यतन नहीं किया जाना चाहिए? – Henrik

19

आम तौर पर लोग जीएचसी एक्सटेंशन का भारी उपयोग करते हैं, क्योंकि वे बहुत उपयोगी हैं और हास्केल 98 काफी पुराना है। एक बार अद्यतित होने के बाद मानक लोग इससे चिपकने के लिए और अधिक प्रयास कर सकते हैं।

आप अगले मानक here के लिए प्रस्तावों की स्थिति पा सकते हैं।

+0

उत्तर और लिंक के लिए धन्यवाद। मुझे लगता है कि खारिज प्रस्ताव से बचा जाना चाहिए। – sastanin

+0

ठीक है, अस्वीकृति के कारणों की एक विस्तृत श्रृंखला हो सकती है, इसलिए यदि आप वास्तव में विवरण में कुछ और खोदना चाहते हैं। लेकिन यह अंगूठे का एक अच्छा नियम है। –

51

हां, उचित एक्सटेंशन का उपयोग करें।

लेकिन उन्हें जानबूझकर सक्षम करने के लिए सुनिश्चित करें - केवल तभी जब आप तय करते हैं कि आपको उनकी आवश्यकता है। इसे प्रति-मॉड्यूल आधार पर {-# LANGUAGE Rank2Types #-} (उदाहरण के लिए) के माध्यम से करें।

4

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

(*) "भविष्य के सबूत" के विपरीत के रूप में

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