এই উত্তরটি ইলিশিয়াস দ্বারা উত্থাপিত বিষয়গুলির প্রতিক্রিয়া হিসাবে, পয়েন্ট-পয়েন্ট:
- এটি ব্যবহার করা কুৎসিত। f (fooBar '' Asdf) ঠিক দেখতে সুন্দর দেখাচ্ছে না। অতিমাত্রায়, নিশ্চিত, তবে এটি অবদান রাখে।
আমি রাজী. আমার মনে হয় $ () ভাষাটির মতো দেখতে দেখতে বেছে নেওয়া হয়েছিল - হাস্কেলের পরিচিত প্রতীক প্যালেটটি ব্যবহার করে। যাইহোক, আপনার ম্যাক্রো স্প্লাইসিংয়ের জন্য ব্যবহৃত প্রতীকগুলিতে আপনি যা চান / ঠিক তা চান না। এগুলি অবশ্যই খুব বেশি মিশ্রিত হয় এবং এই অঙ্গরাগ দিকটি বেশ গুরুত্বপূর্ণ। আমি স্প্লাইসগুলির জন্য {{} of এর চেহারা পছন্দ করি কারণ এগুলি বেশ দৃশ্যত পৃথক।
- এটি লিখতে এমনকি খারাপ। উদ্ধৃতি কখনও কখনও কাজ করে তবে অনেক সময় আপনাকে ম্যানুয়াল এএসটি গ্রাফটিং এবং নদীর গভীরতানির্ণয় করতে হয়। [এপিআই] [১] বড় এবং অযথাযুক্ত, সবসময় এমন অনেকগুলি কেস থাকে যা আপনার যত্ন নেয় না তবে তবুও প্রেরণ করা প্রয়োজন এবং আপনি যে কেসগুলি যত্নবান সেগুলি একাধিক অনুরূপ তবে অভিন্ন আকারে উপস্থিত হওয়ার প্রবণতা রয়েছে (ডাটা) বনাম নতুন টাইপ, রেকর্ড-স্টাইল বনাম সাধারণ নির্মাণকারী এবং আরও অনেক কিছু)। এটি বিরক্তিকর এবং লেখার পুনরাবৃত্তি এবং যান্ত্রিক না হওয়ার পক্ষে যথেষ্ট জটিল। [সংস্কার প্রস্তাব] [২] এর কয়েকটিকে সম্বোধন করে (আরও ব্যাপকভাবে প্রযোজ্য উক্তি তৈরি করা)।
আমি এটির সাথেও একমত, তবে, "টিএইচ নতুন নির্দেশাবলীর জন্য" র মতামতের কয়েকটি হিসাবে পর্যবেক্ষণ করা হয়েছে, বক্সের বাইরে এএসটি উদ্ধৃতি দেওয়ার ভাল অভাব একটি সমালোচনামূলক ত্রুটি নয়। এই ডাব্লুআইপি প্যাকেজে, আমি গ্রন্থাগার আকারে এই সমস্যাগুলি সমাধান করতে চাই: https://github.com/mgsloan/quasi-extras । এখন পর্যন্ত আমি স্বাভাবিকের চেয়ে আরও কয়েকটি জায়গায় স্প্লিকিংয়ের অনুমতি দিচ্ছি এবং এটিএসটিতে প্যাটার্নটি মেলাতে পারি।
- মঞ্চ সীমাবদ্ধতা নরক। একই মডিউলে সংজ্ঞায়িত ফাংশনগুলি স্প্লাইস করতে সক্ষম না হওয়াই এটির ছোট্ট অংশ: অন্যটি পরিণতি হ'ল যদি আপনার একটি শীর্ষ স্তরের স্প্লাইস থাকে তবে মডিউলে এটির পরে সমস্ত কিছু তার আগে সুযোগের বাইরে থাকবে scope এই বৈশিষ্ট্যযুক্ত অন্যান্য ভাষা (সি, সি ++) আপনাকে জিনিসগুলি ঘোষণা করার জন্য এগিয়ে দেওয়ার অনুমতি দিয়ে এটিকে কার্যক্ষম করে তোলে তবে হাস্কেল তা করেন না। যদি আপনার স্প্লাইড ঘোষিত ঘোষণাগুলি বা তাদের নির্ভরতা এবং নির্ভরশীলদের মধ্যে চক্রীয় রেফারেন্সের প্রয়োজন হয় তবে আপনি সাধারণত স্ক্রুযুক্ত হন।
আমি চক্রীয় টিএইচ সংজ্ঞাটি আগে অসম্ভব হয়ে উঠার সমস্যাটি নিয়ে এসেছি ... এটি বেশ বিরক্তিকর। একটি সমাধান রয়েছে, তবে এটি কুৎসিত - চক্রীয় নির্ভরতার সাথে জড়িত জিনিসগুলিকে একটি টিএইচ প্রকাশের মধ্যে আবদ্ধ করুন যা উত্পন্ন সমস্ত ঘোষণার সাথে সম্মিলিত হয়। এই ঘোষণার জেনারেটরগুলির মধ্যে একটি হ'ল স্কেল কোড গ্রহণ করে এমন একটি কোয়া-কোটার হতে পারে।
- এটি নীতিবিরোধী। আমি এর দ্বারা যা বোঝাতে চাইছি তা হল বেশিরভাগ সময় আপনি যখন কোনও বিমূর্ততা প্রকাশ করেন তখন সেই বিমূর্তনের পিছনে কোনও না কোনও নীতি বা ধারণা থাকে। অনেক বিমূর্ততার জন্য, তাদের পিছনে নীতিটি তাদের প্রকারে প্রকাশ করা যেতে পারে। আপনি যখন কোনও ধরণের শ্রেণি সংজ্ঞায়িত করেন, আপনি প্রায়শই এমন আইন তৈরি করতে পারেন যা দৃষ্টান্তগুলি পালন করা উচিত এবং ক্লায়েন্টরা ধরে নিতে পারে। আপনি যদি কোনও ডেটাটাইপ (সীমানার মধ্যে) দিয়ে উদাহরণ ঘোষণার ফর্মটিকে বিমূর্ত করতে জিএইচসি'র [নতুন জেনেরিক বৈশিষ্ট্য] [3] ব্যবহার করেন, আপনি "যোগফলের ধরণের জন্য, এটি এই জাতীয় কাজের জন্য, পণ্যের ধরণের জন্য, এটি এর মতো কাজ করে" বলতে হবে "। তবে টেমপ্লেট হাস্কেলটি কেবল বোবা ম্যাক্রো। এটি ধারণাগুলির স্তরে বিমূর্ততা নয়, তবে এএসটিগুলির স্তরে বিমূর্ততা, যা সহজ, তবে কেবল বিনীতভাবে, সরল পাঠের স্তরে বিমূর্তির চেয়ে।
আপনি যদি এর সাথে নীতিহীন কিছু করেন তবে এটি কেবল তাত্ত্বিক নয়। পার্থক্যটি হ'ল বিমূর্তকরণের জন্য সংকলক বাস্তবায়িত প্রক্রিয়াগুলির সাথে আপনার আরও আস্থা আছে যে বিমূর্ততাটি ফাঁস নয়। সম্ভবত ভাষা নকশাকে গণতন্ত্রকরণ কিছুটা ভীতিজনক মনে হচ্ছে! টিএইচ লাইব্রেরির স্রষ্টাদের তাদের সরবরাহ করা সরঞ্জামগুলির অর্থ এবং ফলাফলগুলি পরিষ্কারভাবে ডকুমেন্ট এবং স্পষ্টভাবে সংজ্ঞায়িত করতে হবে। নীতিগত TH এর একটি ভাল উদাহরণ হ'ল ডেরিভ প্যাকেজ: http://hackage.haskell.org/package/derive - এটি একটি ডিএসএল ব্যবহার করে যাতে অনেকগুলি ডেরাইভেশন / স্পেসিফিকেশন / প্রকৃত ডেরাইভেশন এর উদাহরণ।
- এটি আপনাকে জিএইচসির সাথে সংযুক্ত করে। তত্ত্বগতভাবে অন্য একটি সংকলক এটি বাস্তবায়ন করতে পারে তবে বাস্তবে আমি সন্দেহ করি যে এটি কখনও ঘটবে। (এটি বিভিন্ন ধরণের সিস্টেম এক্সটেনশনের বিপরীতে যা এ মুহূর্তে কেবলমাত্র এইচএইচসি দ্বারা প্রয়োগ করা যেতে পারে, আমি সহজেই অন্য রাস্তাগুলি দ্বারা রাস্তায় নেমে অবশেষে প্রমিতকরণের কল্পনা করতে পারি))
এটি বেশ ভাল পয়েন্ট - টিএইচআইপিটি বেশ বড় এবং চতুর। পুনরায় বাস্তবায়ন করা দেখে মনে হচ্ছে এটি শক্ত হতে পারে। তবে, হাস্কেল এএসটিগুলির প্রতিনিধিত্ব করার সমস্যাটি কাটানোর কেবলমাত্র কয়েকটি উপায় রয়েছে। আমি কল্পনা করি যে এইচএডিটিগুলি অনুলিপি করা, এবং অভ্যন্তরীণ এএসটি উপস্থাপনায় রূপান্তরকারী লেখার ফলে আপনি সেখানকার পথটি ভালভাবে অর্জন করতে পারেন। এটি হ্যাশেল-এসআরসি-মেটা তৈরির (তুচ্ছ নয়) প্রচেষ্টার সমতুল্য। এটি সহজেই টিএইচ এএসটি প্রিন্ট করে এবং সংকলকের অভ্যন্তরীণ পার্সার ব্যবহার করে পুনরায় প্রয়োগ করা যেতে পারে।
যদিও আমি ভুল হতে পারি, আমি কোনও বাস্তবায়ন দৃষ্টিকোণ থেকে টিএইচকে সংকলক বর্ধনের জটিল হিসাবে দেখছি না। এটি আসলে "এটিকে সহজ রাখার" এবং মৌলিক স্তরটি না থাকার কিছুটা তাত্ত্বিকভাবে আবেদনযোগ্য, স্ট্যাটিকালি যাচাইযোগ্য টেম্প্লেটিং সিস্টেম হতে পারে benefits
- এপিআই স্থিতিশীল নয়। যখন জিএইচসিতে নতুন ভাষার বৈশিষ্ট্য যুক্ত করা হয় এবং তাদের সমর্থন করার জন্য টেমপ্লেট-হ্যাশেল প্যাকেজ আপডেট করা হয়, তখন এটি বেশিরভাগ টিএইচ ডেটাটাইপগুলিতে পিছনে-অসামঞ্জস্যপূর্ণ পরিবর্তনগুলির সাথে জড়িত। আপনি যদি চান আপনার টিএইচ কোডটি GHC এর একাধিক সংস্করণের সাথে সামঞ্জস্যপূর্ণ হয় তবে আপনাকে খুব সতর্কতা অবলম্বন করা এবং সম্ভবত ব্যবহার করা দরকার
CPP
।
এটিও একটি ভাল পয়েন্ট, তবে কিছুটা নাটকীয়। যদিও ইদানীং এপিআই সংযোজন হয়েছে, সেগুলি ব্যাপকভাবে ভাঙ্গা প্ররোচিত হয়নি। এছাড়াও, আমি মনে করি যে আমি আগে উল্লেখ করা উচ্চতর এএসটি উদ্ধৃতি দিয়ে, আসলে যে APIটি ব্যবহার করা দরকার তা খুব হ্রাস করা যেতে পারে। যদি কোনও নির্মাণ / মিলের জন্য পৃথক ফাংশন প্রয়োজন হয় না এবং পরিবর্তে আক্ষরিক হিসাবে প্রকাশ করা হয়, তবে বেশিরভাগ এপিআই অদৃশ্য হয়ে যায়। তদুপরি, আপনার লেখা কোডটি হাস্কেলের মতো ভাষার জন্য এএসটি উপস্থাপনায় আরও সহজে পোর্ট হবে।
সংক্ষেপে, আমি মনে করি যে TH একটি শক্তিশালী, আধা-অবহেলিত সরঞ্জাম tool কম ঘৃণা লাইব্রেরির আরও প্রাণবন্ত ইকো-সিস্টেমের দিকে পরিচালিত করতে পারে, আরও ভাষার বৈশিষ্ট্য প্রোটোটাইপগুলি প্রয়োগের জন্য উত্সাহিত করে। এটি লক্ষ্য করা গেছে যে টিএইচ একটি অতিশক্তিযুক্ত সরঞ্জাম, এটি আপনাকে / করতে / প্রায় কোনও কিছু করতে দেয়। অরাজকতা! ঠিক আছে, আমার মতামত যে এই শক্তি আপনাকে তার সীমাবদ্ধতাগুলির বেশিরভাগটি অতিক্রম করতে এবং যথেষ্ট নীতিগত মেটা-প্রোগ্রামিং পদ্ধতির পক্ষে সক্ষম এমন সিস্টেম তৈরি করতে পারে। "যথাযথ" বাস্তবায়ন অনুকরণ করার জন্য কুৎসিত হ্যাকগুলির ব্যবহার মূল্যবান, কারণ এইভাবে "যথাযথ" বাস্তবায়নের নকশা ধীরে ধীরে স্পষ্ট হয়ে উঠবে।
আমার ব্যক্তিগত আদর্শ সংস্করণের সংস্করণে, ভাষা বেশিরভাগই সংকলকটির বাইরে এই বিভিন্নগুলির লাইব্রেরিতে স্থানান্তরিত করে। বৈশিষ্ট্যগুলি গ্রন্থাগার হিসাবে প্রয়োগ করা হয়েছে তা বিশ্বস্ততার সাথে বিমূর্ত করার ক্ষমতা তাদের পক্ষে খুব বেশি প্রভাবিত করে না।
বয়লারপ্লেট কোডটির সাধারণ হাস্কেল উত্তর কী? বিমূর্ততা। আমাদের প্রিয় বিমূর্ততা কি? ফাংশন এবং টাইপক্লাস!
টাইপ ক্লাসগুলি আমাদের পদ্ধতিগুলির একটি সেট নির্ধারণ করতে দেয়, তারপরে সেই শ্রেণীর জেনেরিকের সমস্ত ধরণের ফাংশনে ব্যবহার করা যেতে পারে। তবে এগুলি ব্যতীত, ক্লাসগুলি বয়লারপ্লেট এড়াতে সহায়তা করার একমাত্র উপায় হ'ল "ডিফল্ট সংজ্ঞা" দেওয়া offering এখন এখানে একটি নীতিহীন বৈশিষ্ট্যের উদাহরণ!
সর্বনিম্ন বাঁধাই সেটগুলি ঘোষিত / সংকলক চেকযোগ্য নয়। এটি অসাবধানতার সংজ্ঞা হতে পারে যা পারস্পরিক পুনরাবৃত্তির কারণে নীচে নেমে আসে।
মহান সুবিধা এবং ক্ষমতা এই উত্পাদ হবে সত্ত্বেও, আপনি সুপারক্লাস ডিফল্ট, অনাথ দৃষ্টান্ত কারণে নির্দিষ্ট করতে পারেন না http://lukepalmer.wordpress.com/2009/01/25/a-world-without-orphans/ এই আমাদের ঠিক দেওয়া হবে করুণভাবে সংখ্যার শ্রেণিবিন্যাস!
পদ্ধতির খেলাপিগুলির জন্য টিএইচ-এর মতো সক্ষমতার পিছনে যাওয়ার ফলে http://www.haskell.org/haskellwiki/GHC.Generics দেখা দেয় । এটি দুর্দান্ত স্টাফ হিসাবে, আমার জেনারিকগুলি ব্যবহার করে ডিবেগিং কোডটি কেবলমাত্র অসম্ভব ছিল, কারণ প্রকারের প্রেরণার আকার এবং এএসটি হিসাবে এটিএসটির মতো জটিল। https://github.com/mgsloan/th-extra/commit/d7784d95d396eb3abdb409a24360beb03731c88c
অন্য কথায়, এটি টিএইচ প্রদত্ত বৈশিষ্ট্যগুলির পরে চলে গেছে, তবে এটির ভাষার একটি সম্পূর্ণ ডোমেন, নির্মাণের ভাষাটি একটি প্রকারের সিস্টেমের উপস্থাপনে তুলতে হয়েছিল। আমি আপনার সাধারণ সমস্যার জন্য এটি ভালভাবে কাজ করতে দেখতে পাচ্ছি, জটিল সমস্যাগুলির জন্য, এটি টিএচ হ্যাকেরির চেয়ে অনেক বেশি ভয়ঙ্কর চিহ্নগুলির একটি গাদা পাওয়া বলে বলে মনে হচ্ছে।
TH আপনাকে আউটপুট কোডের মান-স্তরের সংকলন-সময় গণনা দেয়, অন্যদিকে জেনেরিকস কোডের প্যাটার্ন ম্যাচিং / পুনরাবৃত্তি অংশটি টাইপ সিস্টেমে তুলতে বাধ্য করে। যদিও এটি ব্যবহারকারীকে কয়েকটি মোটামুটি কার্যকর উপায়ে সীমাবদ্ধ করে, আমি মনে করি না জটিলতা এটির পক্ষে উপযুক্ত।
আমি মনে করি যে টিএইচ এবং লিসপ-এর মতো রূপান্তরকে প্রত্যাখ্যানের ফলে উদাহরণের ঘোষণার মতো আরও নমনীয়, ম্যাক্রো-প্রসারণের পরিবর্তে পদ্ধতি-খেলাপির মতো বিষয়ের দিকে অগ্রাধিকার দেখা দিয়েছে। অস্বীকারহীন ফলাফলের দিকে পরিচালিত করতে পারে এমন বিষয়গুলি এড়ানোর শৃঙ্খলা বুদ্ধিমানের কাজ, তবে আমাদের এড়িয়ে যাওয়া উচিত নয় যে হাস্কেলের সক্ষম টাইপ সিস্টেমটি অন্যান্য পরিবেশের (জেনারেট কোডটি পরীক্ষা করে) তুলনায় আরও নির্ভরযোগ্য মেটাপোগ্রামিংয়ের অনুমতি দেয়।