रियल वर्ल्ड हास्केल के कौन से हिस्से अब अप्रचलित हैं या बुरा अभ्यास माना जाता है?


107

रियल वर्ल्ड हास्केल के अध्याय 19 में बहुत सारे उदाहरण अब बदलने के कारण विफल हो गए हैं Control.Exception

इससे मुझे लगता है कि शायद इस पुस्तक में कुछ सामान वास्तव में अप्रचलित है और अब और अध्ययन करने लायक नहीं है, आखिरकार 6 साल हो गए हैं। मेरा केवल अन्य संदर्भ है, लर्न यू हस्कल फॉर ग्रेट गुड , हालांकि यह एक महान पुस्तक है, यह आरडब्ल्यूएच के साथ तुलना में बहुत अधिक बुनियादी है।

क्या कोई जिसने पहले किताब पढ़ी है, वह कुछ सलाह दे सकता है कि उसके कौन से हिस्से अब प्रासंगिक नहीं हैं? विशेष रूप से पुस्तक के उत्तरार्ध में अध्याय, उदाहरण के लिए, सॉफ्टवेयर लेनदेन स्मृति, समवर्ती प्रोग्रामिंग, सॉकेट प्रोग्रामिंग आदि।

EDIT: यह उस पुस्तक के संस्करण के बारे में है जिसे दिसंबर 2008 को प्रकाशित किया गया था, जो कि आज (नवंबर 2017) का एकमात्र ज्ञात संस्करण है


2
AFAIK रियल वर्ल्ड हास्केल के ऑनलाइन संस्करण को समय-समय पर अपडेट किया जाएगा। हो सकता है कि आपको हास्केल विकीबूक में अधिक उपयोगी सामान मिले ।
वेकटोरवेग

@Vektorweg विकीबूक पर अब तक का अधिकांश काम परिचयात्मक अध्यायों में किया गया था (जो लगभग उसी जमीन को LYAH स्तर के रूप में कवर करता है, हालांकि एक अलग टेक के साथ) और अधिक उन्नत सिद्धांत और टाइप सिस्टम विषयों की कवरेज में। लागू मुद्दों के लिए, जैसा कि आरडब्ल्यूएच स्वांग के बाद के अध्यायों में देखा गया है, आरडब्ल्यूएच अब के लिए एक बेहतर विकल्प है; हालांकि,
विकीबूक

1
@Vektorweg: मैंने प्रिंट और ऑनलाइन संस्करण के बीच महत्वपूर्ण अंतर नहीं देखा। इसके अलावा, ऑनलाइन संस्करण बिल्कुल भी अपडेट नहीं लगता है, ब्लूम फ़िल्टर अध्याय लंबे समय तक टूट गया है (कम से कम 2009)। यह कहा जा रहा है, विकीबक्स, याय :)।
जीटा

1
@ सिवांग ध्यान दें कि लर्न यू यू हास्केल में अप्रचलित सामान शामिल है, अब Monadयह एक उपवर्ग है Applicative
जुब्स

1
कृपया पुस्तक के संस्करण का उल्लेख करें । सामान्य तौर पर, जब आप किसी उत्पाद के बारे में बात करते हैं , तो हमेशा संस्करण , प्लेटफ़ॉर्म , ओएस , संस्करण आदि का उल्लेख करें !
नवाज

जवाबों:


137

आरडब्ल्यूएच का मुख्य मुद्दा

ये पुराना है। RWH को GHC के टाइम वर्जन 6.8 पर लिखा गया था। 6.8 का उपयोग आधार संस्करण 3.0.xx 6.10.1 ने पहले से ही 4.0.0.0 का उपयोग किया, जिसने कई बदलाव पेश किए । और वह सिर्फ 6.8 से 6.10 की छलांग है। जीएचसी का वर्तमान संस्करण 7.10 है। मोनाड बदल दिए गए हैं। वर्तमान में इसे हटाने कीreturnMonad चर्चा चल रही है , इसलिए Monadरियल वर्ल्ड हास्केल में उदाहरण वास्तव में वास्तविक दुनिया के साथ सिंक से बाहर हो जाएगा।

यह कहा जा रहा है, यह अभी भी सामान्य दिशानिर्देशों के लिए एक उपयोगी संसाधन है। लेकिन ध्यान रखें कि इसके जारी होने के बाद से कई पुस्तकालय बदले गए।

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

सामान्य टिप्पणियाँ

  • टिप्पणियाँ पढ़ें। वे आम तौर पर जानकारी रखते हैं कि क्या दिए गए पैराग्राफ / अनुभाग अभी भी प्रासंगिक है और / या काम कर रहे हैं।
  • उन पुस्तकालयों / कार्यों का प्रलेखन पढ़ें जिनका आप उपयोग करना चाहते हैं। भले ही आप आलसी हों, कम से कम प्रकार जानें।

अध्यायों के लिए टिप्पणी

यह कुछ चीजों का एक त्वरित अवलोकन है जो मैंने आरडब्ल्यूएच को पढ़ते समय देखा था। यह शायद अधूरा है।

अध्याय 2. एफटीपी के प्रकार और कार्य

चूंकि जीएचसी 7.10

फोल्डेबल-ट्रैवर्सेबल-प्रपोजल के कारण इसके प्रकार nullमें बदलाव किया गया है । के रूप में ऐसी कई अन्य कार्यों , और कई अन्य जो पहले केवल के लिए परिभाषित किया गया में अधिक सामान्य के साथ प्रतिस्थापित किया गया है वेरिएंट।foldrfoldl[a]PreludeFoldable t => t a

अध्याय 11. परीक्षण और गुणवत्ता आश्वासन

हास्केल-प्लेटफॉर्म 2010 या 2008 के अंत से।

यद्यपि यह एक फुटनोट में उल्लेख किया गया है , क्विकचेक पुस्तकालय संस्करण 1 से संस्करण 2 तक कई तरीकों से बदल गया है। उदाहरण के लिए, generateअब Gen aइसके बजाय का उपयोग करता है StdGen, और पुराने की कार्यक्षमता generateमें है Test.QuickCheck.Gen.unGen

संदेह में, प्रलेखन की जांच करें ।

अध्याय 14. मोनाड्स और अध्याय 15. भिक्षुओं के साथ प्रोग्रामिंग

कोड ब्रेकिंग: Applicative m => Monad m

जीएचसी 7.10 के रूप में, Applicativeअब एक सुपरक्लास है Monad, जो 2007 में योजनाबद्ध नहीं था।

जीएचसी 7.10 में, Applicativeएक सुपरक्लास बन जाएगा Monad, जो संभावित रूप से बहुत सारे उपयोगकर्ता कोड को तोड़ देगा। इस परिवर्तन को कम करने के लिए, जीएचसी अब चेतावनियों को उत्पन्न करता है जब परिभाषाओं में आवेदन-मोनाड प्रस्ताव ( एएमपी ) के साथ संघर्ष होता है ।

7.8.1 रिलीज नोट देखें ।

State/ Writer/ Readerसंन्यासी

में विल वास्तविक स्थिति खड़े हो जाओ कृपया इकाई? अनुभाग, लेखक का दावा है

आदेश में एक परिभाषित करने के लिए Monadउदाहरण के लिए, हम के लिए एक उचित प्रकार निर्माता के साथ-साथ परिभाषाओं प्रदान करने के लिए (>>=)और return। यह हमें वास्तविक परिभाषा की ओर ले जाता है State

-- file: ch14/State.hs
newtype State s a = State
    runState :: s -> (a, s)
}

यह अब सच नहीं है, क्योंकि Stateइसके दोस्तों को अब इसके माध्यम से लागू किया जाता है

type State  s = StateT  s Identity
type Writer w = WriterT w Identity
type Reader r = ReaderT r Identity

इसलिए वे अपने मोनड ट्रांसफार्मर द्वारा परिभाषित किए गए हैं।

अध्याय 17. सी के साथ इंटरफेस: एफएफआई

समग्र अध्याय ठीक है, लेकिन जैसा कि कोई टिप्पणी में या यूरास शुमोविच के ब्लॉग पर पढ़ सकता है, निम्नलिखित कोड में अंतिम भाग खराब अभ्यास है:

pcre_ptr <- c_pcre_compile pattern (combineOptions flags) errptr erroffset nullPtr
if pcre_ptr == nullPtr
    then do
        err <- peekCString =<< peek errptr
        return (Left err)
    else do
        reg <- newForeignPtr finalizerFree pcre_ptr -- release with free()
        return (Right (Regex reg str))

के रूप में malloc()उपयोग किया जाना चाहिए free(), newसाथ delete, allocateसाथ deallocate, एक हमेशा सही समारोह का उपयोग करना चाहिए।

टीएल; डीआर आपको हमेशा उसी एलोकेटर के साथ मेमोरी को फ्री करना चाहिए जिसने इसे आपके लिए आवंटित किया है।

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

अध्याय 19. त्रुटि से निपटने

त्रुटि हैंडलिंग पूरी तरह से 6.8 से 6.10 में बदल गई, लेकिन आपने देखा कि पहले से ही। बेहतर प्रलेखन पढ़ें ।

अध्याय 22. विस्तारित उदाहरण: वेब क्लाइंट प्रोग्रामिंग

कुछ उदाहरण तोड़े जाने लगते हैं। इसके अलावा, अन्य HTTP पुस्तकालय उपलब्ध हैं।

अध्याय 25. रूपरेखा और अनुकूलन

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

mean :: [Double] -> Double
mean xs = sum xs / fromIntegral (length xs)

अध्याय 24 और अध्याय 28 (समवर्ती और समानांतर प्रोग्रामिंग और एसटीएम)

जबकि अध्याय 24. समवर्ती और मल्टीकोर प्रोग्रामिंग और अध्याय 28। सॉफ्टवेयर लेनदेन स्मृति अभी भी प्रासंगिक हैं, हस्केल में साइमन मार्लो की पुस्तक समानांतर और समवर्ती प्रोग्रामिंग केवल समवर्ती और समानांतर प्रोग्रामिंग पर केंद्रित है और हाल ही में (2013) है। आरडब्ल्यूएच में जीपीयू प्रोग्रामिंग और रेपा पूरी तरह से गायब हैं।

अध्याय 26. उन्नत पुस्तकालय डिजाइन: ब्लूम फ़िल्टर का निर्माण

अन्य अध्यायों की तरह, डिज़ाइन लाइब्रेरी के सामान्य दिशानिर्देश अभी भी अच्छी तरह से लिखित और प्रासंगिक हैं। हालाँकि, कुछ परिवर्तनों (?) के विषय में ST, परिणाम अब संकलित नहीं किए जा सकते हैं।

अध्याय 27. नेटवर्क प्रोग्रामिंग

यह अभी भी ज्यादातर अद्यतित है। आखिरकार, नेटवर्क प्रोग्रामिंग इतनी आसानी से नहीं बदलती है। हालांकि, कोड पदावनत कार्यों का उपयोग करता है bindSocketऔर sClose, जिसे प्रतिस्थापित किया जाना चाहिए bindऔर close(अधिमानतः योग्य आयात के माध्यम से)। ध्यान रखें कि यह बहुत निम्न-स्तर का है, आप अधिक विशिष्ट उच्च-स्तरीय लाइब्रेरी का उपयोग करना चाह सकते हैं।

परिशिष्ट A. जीएचसी और हास्केल पुस्तकालयों की स्थापना

HHCell प्लेटफॉर्म पेश किए जाने से पहले GHC 6.8 अंतिम संस्करण था। इसलिए, परिशिष्ट आपको हाथ से जीएचसी और काबाल प्राप्त करने के लिए कहता है। मत करो। इसके बजाय, haskell.org डाउनलोड पृष्ठ पर दिए गए निर्देशों का पालन करें ।

इसके अलावा, परिशिष्ट आपको कैबेल सैंडबॉक्स के बारे में नहीं बताता है, जो कि कैबल 1.18 में पेश किए गए थे और आपको निर्भरता नरक से मुक्त करते हैं । और हां, stackपूरी तरह से गायब है।

छुटे हुए तथ्य

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

उन विषयों के लिए कई संसाधन हैं, लेकिन यहां आपको परिचय के लिए कुछ लिंक दिए गए हैं ताकि आप जान सकें कि वे किस बारे में हैं। इसके अलावा, यदि आप वैक्टर का उपयोग करना चाहते हैं, तो vectorsपैकेज का उपयोग करें ।

Control.Applicative

आरडब्ल्यूएच का उपयोग करता है Control.Applicativeके (<$>)कई बिंदुओं पर है, लेकिन यह स्पष्ट नहीं करता Control.Applicativeसब पर। LYAH और टाइपक्लासोपेडिया में अनुभाग होते हैं Applicative। यह देखते हुए कि (ऊपर देखें) Applicativeका एक सुपरक्लास है Monad, यह उस वर्ग को दिल से सीखने की सिफारिश की जाती है।

इसके अलावा, के कई ऑपरेटरों Control.Applicative(और typeclass ही) अब का हिस्सा हैं Prelude, तो सुनिश्चित करें कि आपके ऑपरेटरों के साथ संघर्ष नहीं करना <$>, <*>और अन्य।

लेंस

पुस्तकालयों को स्ट्रीम करना

टूलींग

  • काबाल का संस्करण 1.18, जिसने सैंडबॉक्स पेश किया
  • stack, हास्केल परियोजनाओं के विकास के लिए एक क्रॉस-प्लेटफॉर्म कार्यक्रम
  • ghc-mod, vim, emacs, उदात्त पाठ और अन्य संपादकों के लिए एक बैकएंड

नए / अनुपलब्ध भाषा एक्सटेंशन और GHC परिवर्तन

  • रनटाइम प्रकार बहुरूपता ( :i ($)काफी बदल गया है)
  • -XTypeInType
  • -XDataKinds
  • -XGADT
  • -XRankNTypes
  • -XGenericNewtypeDeriving
  • -XDeriveFunctor
  • 6.6 के बाद हुआ कोई अन्य विस्तार

धन्यवाद, यह वही है जो मैं :) के बाद था, आप मुझे राज्य के मानद मुद्दे की याद दिलाते हैं, इसका अब कोई राज्य मूल्य निर्माता नहीं है, जब मैं इसे पढ़ रहा था, तो यह पता लगाने के लिए मुझे कुछ सिर खुजाना पड़ा।
swang

@ स्वांग: यह अभी भी पूरी तरह से दूर है। शायद ब्रायन या डॉन को बदली हुई विशेषताओं के बारे में अधिक पता है। किसी भी तरह से, सामान्य दिशानिर्देश अभी भी पकड़ में हैं।
जीटा

1
उच्च-स्तरीय नेटवर्किंग के लिए, मैं नेटवर्क-सरल पसंद करता हूं ।
लैंबडा फेयरी

"ट्रांसड्यूसर", कोराउटाइन और स्ट्रीमिंग लाइब्रेरी पाइप, नाली के बीच एक संबंध है।
CMCDragonkai

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