রিয়েল ওয়ার্ল্ড হাস্কেলের কোন অংশগুলি এখন অপ্রচলিত বা খারাপ অনুশীলন হিসাবে বিবেচিত?


107

রিয়েল ওয়ার্ল্ড হাস্কেলের 19 অধ্যায়ে এখন উদাহরণগুলির অনেকগুলি পরিবর্তনের কারণে ব্যর্থ Control.Exception

এটি আমাকে ভাবতে বাধ্য করে যে সম্ভবত এই বইয়ের কিছু উপাদান আসলে অপ্রচলিত এবং আর অধ্যয়ন করার মতো নয়, সর্বোপরি এটি 6 বছর হয়ে যাওয়ার পরে। আমার একমাত্র অন্য রেফারেন্স হ'ল লার্ন ইউ এ হাস্কেল ফর গ্রেট গুড , যদিও এটি দুর্দান্ত বই, এটি আরডাব্লুএইচ-এর তুলনায় অনেক বেশি বেসিক।

এর আগে যে বইটি পড়েছেন কেউ দয়া করে এর কোন অংশটি আর প্রাসঙ্গিক নয় সে বিষয়ে কিছু পরামর্শ দিতে পারেন? বিশেষত বইয়ের দ্বিতীয়ার্ধের অধ্যায়গুলি উদাহরণস্বরূপ, সফ্টওয়্যার লেনদেনের মেমরি, সমবর্তী প্রোগ্রামিং, সকেট প্রোগ্রামিং ইত্যাদি

সম্পাদনা: এটি ২০০৮ সালের ডিসেম্বরে প্রকাশিত বইয়ের সংস্করণ সম্পর্কে, যা আজকের একমাত্র পরিচিত সংস্করণ (নভেম্বর 2017)


2
রিয়েল ওয়ার্ল্ড হাস্কেলের অনলাইন সংস্করণ এএফআইকে সময়ে সময়ে আপডেট করা হবে। সম্ভবত আপনি হাস্কেল উইকিবুক-এ আরও দরকারী জিনিসগুলি খুঁজে পেতে পারেন ।
ভেক্টোরিওগ

@ ভেকটারওয়েগ এখন পর্যন্ত উইকিউবুকের বেশিরভাগ কাজ প্রবর্তক অধ্যায়গুলিতে (যা প্রায় পৃথকভাবে লায়াএইচ স্তর হিসাবে একই অংশটি আবৃত করে) এবং আরও উন্নত তত্ত্ব এবং টাইপ সিস্টেমের বিষয়গুলির কভারেজে সম্পন্ন হয়েছিল। প্রয়োগিত ইস্যুগুলির জন্য, যেমন আরডাব্লুএইচ সোয়াংয়ের পরবর্তী অধ্যায়ে দেখা যায়, আরডাব্লুএইচ আপাতত একটি ভাল পছন্দ; যদিও, একজন
উইকিউবুক

1
@ ভেকটারওয়েগ: মুদ্রণ এবং অনলাইন সংস্করণের মধ্যে আমি উল্লেখযোগ্য পার্থক্য লক্ষ্য করিনি। এছাড়াও, অনলাইন সংস্করণটি একেবারেই আপডেট হবে বলে মনে হয় না, ব্লুম ফিল্টার অধ্যায়টি দীর্ঘ সময়ের জন্য ভেঙে গেছে (কমপক্ষে ২০০৯)। বলা হচ্ছে, উইকিউবুকস, ইয়ে :)।
জেটা

1
@ সোয়াং নোট করুন যে এমনকি শিখুন আপনি একটি হাস্কেলে অপ্রচলিত উপাদান রয়েছে, এখন এটি Monadএকটি সাবক্লাস Applicative
jub0bs

1
বইয়ের সংস্করণ উল্লেখ করুন । সাধারণভাবে, আপনি যখন কোনও পণ্য সম্পর্কে কথা বলেন তখন সর্বদা সংস্করণ , প্ল্যাটফর্ম , ওএস , সংস্করণ ইত্যাদি উল্লেখ করুন !
নওয়াজ

উত্তর:


137

আরডাব্লুএইচ প্রধান বিষয়

এটা পুরানো. আরডাব্লুএইচ লেখা হয়েছিল জিএইচসি-র 6.8 সংস্করণে ব্যবহৃত হয়েছিল। 6.8 ব্যবহৃত বেস সংস্করণ 3.0.xx 6.10.1 ইতিমধ্যে ব্যবহৃত 4.0.0.0 ব্যবহার করেছে, যা অনেক পরিবর্তন প্রবর্তন করেছে । এবং এটি কেবল 6.8 থেকে 6.10 এ লাফিয়ে। জিএইচসির বর্তমান সংস্করণটি 7.10 is মনদেবগুলি পরিবর্তন করা হয়েছে। বর্তমানে একটি আলোচনা আছে মুছে ফেলার জন্য returnথেকেMonad , তাই Monadরিয়াল পৃথিবী মধ্যে Haskell উদাহরণস্বরূপ সত্যিই বাস্তব জগতে র সাথে সিঙ্কের বাইরে থাকবে।

বলা হচ্ছে, এটি এখনও সাধারণ নির্দেশিকাগুলির জন্য একটি দরকারী সংস্থান। তবে মনে রাখবেন যে প্রকাশের পরে অনেকগুলি গ্রন্থাগার পরিবর্তিত হয়েছে।

আরডাব্লুএইচ পড়ার সময় আপনি যা কিছু পড়তে পারেন তা হ'ল স্টিফেন ডেইহেলের লেখা "হোয়াট আই উইশ আই নু উইল লার্নিং হাস্কেল" । এটি অতিরিক্ত অন্তর্দৃষ্টি সরবরাহ করে, তবে সচেতন থাকুন, কিছু বিভাগ সত্যই নতুন আগত বান্ধব নয়।

সাধারণ মন্তব্য

  • মন্তব্য পড়ুন। প্রদত্ত অনুচ্ছেদ / বিভাগটি এখনও প্রাসঙ্গিক এবং / অথবা কার্যকরী কিনা তা তাদের মধ্যে সাধারণত তথ্য থাকে।
  • আপনি যে লাইব্রেরি / ফাংশনগুলি ব্যবহার করতে চান তার ডকুমেন্টেশন পড়ুন। এমনকি আপনি অলস হলেও কমপক্ষে প্রকারগুলি জেনে নিন know

অধ্যায়গুলিতে মন্তব্য

এটি আরডাব্লুএইচ পড়ার সময় আমি যে কয়েকটি বিষয় লক্ষ্য করেছি তার কেবলমাত্র একটি দ্রুত পর্যালোচনা। এটা সম্ভবত অসম্পূর্ণ।

অধ্যায় 2. এফটিপি বনাম প্রকার ও কার্যাদি

জিএইচসি 7.10 থেকে

ভাঁজযোগ্য-ট্র্যাভারেবল-প্রস্তাবের কারণে প্রকারটি পরিবর্তনnull করা হয়েছে । যেমন অন্য অনেক ফাংশন , এবং অনেক অন্যান্য যা পূর্বে শুধুমাত্র জন্য সংজ্ঞায়িত করা হয়েছে এ আরও সাধারণ দিয়ে প্রতিস্থাপিত করা হয়েছে রূপগুলো।foldrfoldl[a]PreludeFoldable t => t a

অধ্যায় ১১. পরীক্ষা এবং গুণগত নিশ্চয়তা

হাসেল-প্ল্যাটফর্ম ২০১০ বা ২০০৮ এর শেষের দিক থেকে।

যদিও এটি একটি পাদটীকাতে উল্লেখ করা হয়েছে , ততক্ষণে কুইকচেক পাঠাগারটি সংস্করণ 1 থেকে 2 সংস্করণে পরিবর্তিত হয়েছে For উদাহরণস্বরূপ, generateএখন Gen aপরিবর্তে এটি ব্যবহার করে StdGenএবং পুরানো কার্যকারিতাটি generateভিতরে রয়েছে Test.QuickCheck.Gen.unGen

সন্দেহের সাথে ডকুমেন্টেশন চেক করুন ।

অধ্যায় 14. মনডস এবং অধ্যায় 15. স্নাতকের সাথে প্রোগ্রামিং

কোড ভঙ্গ: Applicative m => Monad m

জিএইচসি 10.১০ এর হিসাবে Applicativeএটি এখন একটি সুপার ক্লাস, এটি Monadএমন কিছু যা 2007 সালে পরিকল্পনা করা হয়নি।

জিএইচসি 7.10 Applicative-তে Monad, সম্ভবত একটি প্রচুর ব্যবহারকারীর কোড ভঙ্গ করে একটি সুপার ক্লাসে পরিণত হবে । এই রূপান্তরটি সহজ করতে, প্রয়োগকারী-মোনাড প্রস্তাব ( এএমপি ) এর সংজ্ঞা সংঘর্ষে জেএইচসি এখন সতর্কতা তৈরি করে ।

দেখুন 7.8.1 রিলিজ নোট

State/ Writer/ ReaderMonads

ইন উইল বাস্তব রাষ্ট্র দাঁড়ানো দয়া একসংখ্যা? বিভাগ, লেখকদের দাবি

একটি 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

সুতরাং তারা তাদের monad ট্রান্সফরমার দ্বারা সংজ্ঞায়িত করা হয়।

অধ্যায় 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. বর্ধিত উদাহরণ: ওয়েব ক্লায়েন্ট প্রোগ্রামিং

এর কয়েকটি উদাহরণ ভেঙে গেছে বলে মনে হচ্ছে। এছাড়াও, অন্যান্য এইচটিটিপি লাইব্রেরি উপলব্ধ।

অধ্যায় 25. প্রোফাইলিং এবং অপ্টিমাইজেশন

সাধারণ প্রোফাইলিং কৌশলগুলি এখনও একইরকম এবং উদাহরণ (নীচে দেখুন) আপনার প্রোগ্রামে দেখা দিতে পারে এমন সমস্যাগুলির জন্য দুর্দান্ত কেস স্টাডি। তবে আরডাব্লুএইচ মাল্টি-থ্রেডযুক্ত প্রোফাইল অনুপস্থিত, যেমন থ্রেডস্কোপের মাধ্যমে। এছাড়াও, অলস আইও পুরো বই জুড়েই উদ্বিগ্ন নয়, যতদূর আমি জানি।

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

অধ্যায় 24 এবং অধ্যায় 28 (সমবর্তী এবং সমান্তরাল প্রোগ্রামিং এবং এসটিএম)

যদিও অধ্যায় 24. সমসাময়িক এবং মাল্টিকোর প্রোগ্রামিং এবং অধ্যায় 28. সফটওয়্যার লেনদেনের মেমরির এখনো প্রাসঙ্গিক, সাইমন মধ্যে Marlow এর বই সমান্তরাল এবং Haskell মধ্যে কংকারেন্ট প্রোগ্রামিং সমবর্তী এবং সমান্তরাল প্রোগ্রামিং এর উপর একমাত্র দৃষ্টি নিবদ্ধ করে এবং সুন্দর সাম্প্রতিক হয় (2013)। আরডাব্লুএইচ-তে জিপিইউ প্রোগ্রামিং এবং রেপা সম্পূর্ণ অনুপস্থিত।

অধ্যায় 26. উন্নত লাইব্রেরি ডিজাইন: একটি ব্লুম ফিল্টার তৈরি করা

অন্যান্য অধ্যায়গুলির মতো, নকশা গ্রন্থাগারের সাধারণ দিকনির্দেশগুলি এখনও ভালভাবে লিখিত এবং প্রাসঙ্গিক। তবে কিছু পরিবর্তন (?) এর কারণে STফলাফল আর সংকলন করা যায় না।

অধ্যায় 27. নেটওয়ার্ক প্রোগ্রামিং

এটি এখনও বেশিরভাগ আপ টু ডেট। সর্বোপরি, নেটওয়ার্ক প্রোগ্রামিং এত সহজে পরিবর্তন হয় না। যাইহোক, কোডটি অবহিত ফাংশনগুলি ব্যবহার করে bindSocketএবং sClose, যা দ্বারা bindএবং close(পছন্দসই যোগ্য আমদানির মাধ্যমে) প্রতিস্থাপন করা উচিত । মনে রাখবেন এটি খুব নিম্ন-স্তরের, আপনি আরও বেশি বিশেষায়িত উচ্চ-স্তরের গ্রন্থাগারটি ব্যবহার করতে চাইতে পারেন।

পরিশিষ্ট A. জিএইচসি এবং হাস্কেল লাইব্রেরি ইনস্টল করা

হাসেল প্ল্যাটফর্মটি চালু হওয়ার আগে জিএইচসি 6.8 সর্বশেষ সংস্করণ ছিল। অতএব, পরিশিষ্টটি আপনাকে জিএইচসি এবং ক্যাবল হাতে পেতে বলে tells না। পরিবর্তে, haskell.org ডাউনলোড পৃষ্ঠায় দেওয়া নির্দেশাবলী অনুসরণ করুন ।

এছাড়াও, পরিশিষ্টটি আপনাকে ক্যাবল স্যান্ডবক্সগুলি সম্পর্কে জানায় না, যা ক্যাবল ১.১৮ এ প্রবর্তিত হয়েছিল এবং আপনাকে নির্ভরতা নরক থেকে মুক্তি দেয় । এবং অবশ্যই, stackপুরোপুরি অনুপস্থিত।

অনুপস্থিত বিষয়বস্তু

কিছু বিষয় আরডব্লুএইচ তে মোটেও আলোচিত হয় না। এর মধ্যে পাইপ এবং কন্ডউইটের মতো স্ট্রিমিং লাইব্রেরি এবং লেন্সও অন্তর্ভুক্ত রয়েছে

এই বিষয়গুলির জন্য এখানে বেশ কয়েকটি সংস্থান রয়েছে, তবে সেগুলি কী সে সম্পর্কে আপনাকে ধারণা দেওয়ার জন্য এখানে পরিচয়ের কয়েকটি লিঙ্ক রয়েছে। এছাড়াও, আপনি যদি ভেক্টর ব্যবহার করতে চান তবে vectorsপ্যাকেজটি ব্যবহার করুন ।

Control.Applicative

আরডাব্লুএইচ বিভিন্ন পয়েন্টে Control.Applicativeএর ব্যবহার (<$>)করে, তবে মোটেও ব্যাখ্যা দেয় না Control.ApplicativeLYAH এবং Typeclassopedia উপর বিভাগে ধারণ Applicative। প্রদত্ত যে Applicativeএকটি সুপারক্লাস হয় Monad(উপরে দেখুন), এটা হৃদয় দ্বারা যে বর্গ শিখতে পরামর্শ দেওয়া হচ্ছে।

অধিকন্তু, বিভিন্ন অপারেটার Control.Applicative(এবং typeclass নিজেই) এখন অংশ Prelude, তাই নিশ্চিত করুন যে আপনার অপারেটরদের সঙ্গে সংঘর্ষ না তা নিশ্চিত করুন <$>, <*>এবং অন্যদের।

লেন্সসমূহ

স্ট্রিমিং লাইব্রেরি

সাধনী দ্বারা প্রয়োগকরণ

  • ক্যাবলের 1.18 সংস্করণ, যা স্যান্ডবক্সগুলি প্রবর্তন করেছিল
  • stack, হাস্কেল প্রকল্পগুলির উন্নয়নের জন্য একটি ক্রস প্ল্যাটফর্ম প্রোগ্রাম
  • ghc-mod, ভিএম, ইমাস, সাব্লাইম টেক্সট এবং অন্যান্য সম্পাদকদের জন্য একটি ব্যাকএন্ড

নতুন / হারিয়ে যাওয়া ভাষার এক্সটেনশান এবং জিএইচসি পরিবর্তন

  • রানটাইম টাইপ পলিমারফিজম ( :i ($)দুর্দান্ত পরিবর্তন হয়েছে)
  • -XTypeInType
  • -XDataKinds
  • -XGADT
  • -XRankNTypes
  • -XGenericNewtypeDeriving
  • -XDeriveFunctor
  • extension. after এর পরে ঘটে যাওয়া অন্য কোনও এক্সটেনশন

ধন্যবাদ, আমি ঠিক এই পরে যা করেছি :), আপনি আমাকে রাজ্য মনড ইস্যুটির কথা মনে করিয়ে দিন, এটির আর কোনও রাষ্ট্রীয় মান নির্মাতা নেই, আমি যখন এটি পড়ছিলাম তখন এটি নির্ধারণ করার জন্য আমাকে কিছুটা মাথা চুলকিয়ে নিয়েছিল।
সোয়াং

@ সোয়াং: এটি এখনও সম্পূর্ণ থেকে অনেক দূরে। সম্ভবত ব্রায়ান বা ডন পরিবর্তিত বৈশিষ্ট্যগুলি সম্পর্কে আরও জানুন। যে কোনও উপায়ে, এখনও সাধারণ নির্দেশিকা রয়েছে।
জিটা

1
উচ্চ-স্তরের নেটওয়ার্কিংয়ের জন্য, আমি নেটওয়ার্ক-সরল পছন্দ করি ।
লাম্বদা পরী

"ট্রান্সডুসারস", করোটিনস এবং স্ট্রিমিং লাইব্রেরি পাইপ, কন্ডউইটের মধ্যে একটি সম্পর্ক রয়েছে।
সিএমসিডিগ্রাগনকাই

এইচডিবিসি ব্যবহার কি পুরানো হিসাবে বিবেচিত হয়?
জানুস ট্রয়লসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.