হাস্কেলের টাইপ সিস্টেমটি কি কার্যকরী প্রোগ্রামিং বোঝার ক্ষেত্রে বাধা? [বন্ধ]


33

আমি অন্যান্য ভাষাগুলিতে আমি যে অন্তর্দৃষ্টি অর্জন করব তা প্রয়োগ করে (গ্রোভি, পাইথন, জাভাস্ক্রিপ্ট মূলত।) এই প্রত্যাশা নিয়ে আমি ফাংশনাল প্রোগ্রামিং বোঝার উদ্দেশ্যে হাস্কেল অধ্যয়ন করছি)

আমি হাস্কেলকে বেছে নিই কারণ আমার ধারণা ছিল যে এটি অত্যন্ত নিখুঁতভাবে কার্যকরী, এবং রাষ্ট্রের উপর কোনও নির্ভরতার সুযোগ দেয় না।

আমি হাস্কেল শিখতে পছন্দ করি নি কারণ আমি অত্যন্ত কঠোর ধরণের সিস্টেম নেভিগেট করতে আগ্রহী ছিলাম।

আমার প্রশ্নটি হ'ল: একটি শক্তিশালী টাইপ সিস্টেমটি কি একটি অত্যন্ত খাঁটি কার্যকরী ভাষার প্রয়োজনীয় উপ-পণ্য হয়, বা এটি হ্যাস্কেলের কোনও বিশেষ সম্পর্কযুক্ত নকশার পছন্দ?


6
আপনি যদি স্পষ্টভাবে কিছু লিখতে না চান তবে আপনার স্পষ্টভাবে কিছু লিখতে হবে না। হাস্কেল নিজস্বভাবে কেবল সূক্ষ্ম সূচনা করতে পারে। এবং এটি এমন নয় যে আপনি একটি একক ভেরিয়েবলের সম্ভাব্য দুটি অসম্পূর্ণ প্রকার সংরক্ষণ করতে যাচ্ছেন।
আনন

4
@ তবে হ্যাঁ, তবে আপনার তালিকা অবশ্যই একজাতীয় হতে হবে। আমাকে বিশ্বাস করুন, এই ধরণের জিনিসটি এমনকি প্রকারের অনুক্রমের সাথেও যেতে পারে।
এরিক উইলসন

13
@ ফারমবয় এবং সম্ভবত ব্যবহারে ভুল কী? জাভা সত্যিই আপনাকে সম্ভবত সমস্ত ক্লাসে ব্যবহার করতে বাধ্য করে, যা করা অদ্ভুত জিনিস।
বিকল্প

3
এবং যদি আপনি সত্যিই কোনও ভিন্নজাতীয় তালিকা ব্যবহার করতে চান তবে অবশ্যই আপনি বীজগণিত ডেটা ধরণের ব্যবহার করতে পারেন।
বিকল্প

1
@ ম্যাথেক্সিক এই মুহুর্তে আমরা সত্যিই আমার মূল প্রশ্নটির ট্র্যাক হারিয়ে ফেলেছি, যা একটি পুরোপুরি বৈধ প্রশ্ন ছিল।
এরিক উইলসন

উত্তর:


40

আমি বিশ্বাস করি যে হাস্কেলের টাইপ সিস্টেমটি বোঝা কার্যকরী প্রোগ্রামিং বোঝার জন্য একটি পরিবর্ধক।

খাঁটি ক্রিয়ামূলক প্রোগ্রামিংয়ের বিষয়টি হ'ল পার্শ্ব-প্রতিক্রিয়াগুলির অভাবে, যা আপনাকে সমস্ত ধরণের জিনিসকে স্পষ্টভাবে করতে দেয়, খাঁটি কার্যকরী প্রোগ্রামিং আপনার প্রোগ্রামগুলির কাঠামোকে আরও সুস্পষ্ট করে তোলে।

হাস্কেল আপনাকে কার্পেটের নীচে জিনিসগুলি কাঁপানো থেকে বিরত রাখে, আপনাকে আপনার প্রোগ্রামের কাঠামোটি স্পষ্টভাবে মোকাবেলা করতে বাধ্য করে এবং এটি আপনাকে এই কাঠামোগুলি বর্ণনা করতে একটি ভাষা শেখায়: প্রকারের ভাষা। প্রকারভেদগুলি, বিশেষত সমৃদ্ধ প্রকারগুলি যেমন হ্যাস্কেল, বোঝা আপনাকে যে কোনও ভাষায় উন্নত প্রোগ্রামার করে তুলবে।

যদি হাস্কেল দৃ strongly়ভাবে টাইপ না করা থাকে তবে মনড, প্রয়োগমূলক ফান্টেক্টর এবং এর মতো ধারণাগুলি প্রোগ্রামিংয়ে কখনও প্রয়োগ করা হত না।


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

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

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

33

সর্বাধিক গতিশীল টাইপযুক্ত কার্যকরী ভাষাটি তর্কযোগ্যভাবে স্কিম। এটি বলেছিল, হাস্কেলের টাইপ সিস্টেমটি এর বিশুদ্ধতার সূচক। এটি "একজন কীভাবে বিশুদ্ধতা পরিমাপ করে?" এর একটি প্রশ্ন। হাস্কেলের টাইপ সিস্টেম আপনাকে সহজেই এর মধ্যে অপরিষ্কার ক্রিয়াকলাপ বন্ধ করতে দেয় IO। এটি করতে, আপনার একটি স্ট্যাটিক টাইপ সিস্টেম দরকার।

তবে ধরা যাক হাস্কেলের টাইপ সিস্টেমটির কার্যকরী প্রোগ্রামিংয়ের সাথে কোনও সম্পর্ক নেই। এই ধরণের সিস্টেমটি এই শিক্ষামূলক প্রচেষ্টায় আপনাকে সহায়তা করবে না এমন দাবি করা এখনও হুবরিসের উচ্চতা হতে পারে। সি ++ এবং ওসিএএমএল-এর টাইপ সিস্টেমের তুলনায় হাস্কেলের টাইপ সিস্টেমটি সমৃদ্ধ এবং জটিল এবং আরও আকর্ষণীয়।

এটা কি কোনও বাধা? না, আমি মনে করি এটি একটি সম্পদ। IOউদাহরণস্বরূপ হাস্কেলের অলসতা কীভাবে মোকাবেলা করতে হবে তা বিবেচনা করার চেষ্টা করুন ।


8
একবার আপনার অভ্যাস হয়ে গেলে +1 হাস্কেলের টাইপ সিস্টেমটি আপনার বন্ধু হতে পারে।
ল্যারি কোলেম্যান

"এটি করার জন্য আপনার একটি স্ট্যাটিক টাইপ সিস্টেম দরকার"। সত্যি?
জন হ্যারোপ

1
"সি ++ এবং ওসিএএমএল টাইপ সিস্টেমের সাথে তুলনা করলে আরও আকর্ষণীয়"। আপনি কি ওসিএএমএল-এর প্রথম-শ্রেণীর উচ্চ-অর্ডার মডিউলগুলি এবং কাঠামোগতভাবে টাইপ করা ইনফ্রেড অবজেক্ট সিস্টেম এবং পলিমারফিক ভেরিয়েন্টগুলি অধ্যয়ন করেছেন?
জন হ্যারোপ

2
@ জনহরপ বা একটি প্রভাব সিস্টেম বা বিশুদ্ধতা পরিমাপ / মূল্যায়নের কিছু উপায়। হ্যাঁ, এজন্য তাদের তুলনা করা আকর্ষণীয়। বিভিন্ন ভাষা বিভিন্ন ভাষার জন্য পছন্দ করে।
লোগান ক্যাপাল্ডো

20

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

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


আরেকটি বিষয় লক্ষণীয়: আমি প্রায় একই সময়ে স্কিম এবং হাস্কেল উভয়কেই ব্যবহার করে ফাংশনাল প্রোগ্রামিং শিখেছি (মজাদার জন্য প্রথম শ্রেণীর জন্য এবং পরে)। আমি দেখতে পেলাম যে স্কেমে এস এবং এস এর চেয়ে হাস্কেলের প্যাটার্ন-ম্যাচিংয়ের সাথে বোঝার পুনরাবৃত্তি অনেক সহজ ছিল যা আমি কল্পনা করেছিলাম যে ক্লোজারেও রয়েছে। ifcond
টিখন জেলভিস

@ ল্যারি কোলেম্যান: টাইপ সিস্টেমগুলির সাথে আমার নিজের অভিজ্ঞতাটি স্পষ্টভাবে বর্ণনা করার জন্য +1: প্রথম সি ++, তারপরে ওকামল এবং এখন আমার নিজস্ব ভাষা ফেলিক্স। হ্যাঁ, আমি এখনও সংকলক ত্রুটিগুলি অনুসরণ করে রিফ্যাক্টর করছি।
Yttrill

8

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

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

টাইপ সিস্টেমটি বিশাল বাধা হওয়া উচিত নয়। গতিশীল ভাষাগুলি ব্যবহার করার পরেও প্রোগ্রাম করা লোকেরা, টাইপিং কনভেনশনগুলি অনুসরণ করে যা হাস্কেলের টাইপ সিস্টেম ব্যবহার করে এনকোড করা যায়। হাস্কেল সি -++ এবং জাভা-র মতো ভাষার তুলনায় ভার্বোসিটি হ্রাস করে এমন প্রকারের বৈশিষ্ট্যও অন্তর্ভুক্ত করে। যখন আপনি একটি ত্রুটি বার্তা পান, সংকলকটি আপনাকে কেবল সংকলনের সময় বলছে যে ডাইনামিক ধরণের একটি ভাষা রানটাইমের সময় আপনাকে কী বলবে।

ডায়নামিক টাইপ সিস্টেমের বিপরীতটি একটি স্ট্যাটিক টাইপ সিস্টেম, কোনও শক্তিশালী টাইপ সিস্টেম নয়। একটি শক্তিশালী টাইপ সিস্টেম একটি দুর্বল টাইপ সিস্টেমের বিপরীত।


1
উদাহরণস্বরূপ, সি স্থিতিশীল কিন্তু দুর্বলভাবে টাইপ করা হয়। আপনার টাইপ রয়েছে, তবে টাইপ সিস্টেমটি সম্পূর্ণরূপে বিকৃত করা, অন্তর্নিহিত মেশিন-নির্দিষ্ট উপস্থাপনাগুলি নিয়ে ঘুরে বেড়ানো সহজ Many
স্টিভ 314

4

আপনি বোবা ভুল করার সময় এটি আপনাকে অবিলম্বে জানায়। এটি সহায়ক। আমি এই শেষ মেয়াদে র‌্যাকেটে (স্কিমে) কাজ করছি এবং এমন অনেক সময় হয়েছে যেখানে আমি একটি আনসারসড এস-এক্সপ্রেস পাস করেছি যেখানে আমি আমার দোভাষীর কোনও ফাংশনে পার্সড অ্যাস্ট আশা করেছি এবং এটি কেবল আমার মধ্যে প্রদর্শিত হয়েছিল মাঝারি আকারের পরীক্ষা স্যুট। আমার যদি কিছু স্থির টাইপিং থাকে তবে তা এখনই আমার নজরে এনে দেওয়া হত।

অবশ্যই, যুক্তি ত্রুটিগুলি টাইপ সিস্টেমের দ্বারা সত্যই ধরা যায় না, তবে আপনি যে পদ্ধতিতে স্ক্রু করতে পারেন তার সংখ্যাটি হ্রাস পাচ্ছে।

পাশাপাশি, টাইপ অনুমিতি আপনাকে চাইলে টাইপ সিস্টেমটিকে উপেক্ষা করতে দেয়। এটি এখনও আছে, তবে এটির পক্ষে আপনার সক্রিয় ইনপুট লাগবে না। এটি আপনার ফাংশনগুলির ধরণগুলি বোঝার জন্য এখনও সহায়ক, তবে সঠিক কোডটি কার্যকর হবে work

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


8
আপনি যদি ভাবেন যে আপনি হাস্কেলের টাইপ সিস্টেমটিকে উপেক্ষা করতে পারেন, তবে আমার ধারণা আপনি খুব বেশি হাস্কেলকে কোড করেননি।
এরিক উইলসন

ফাংশনটি টাইপ করুন, জিএইচসিআইতে লোড করুন এবং এতে যান: টি যতটা এড়িয়ে যাবেন ততটা এড়িয়ে যাবেন না। তবে আপনাকে এখনও মাঝে মাঝে ইন্টিগ্রাল বা অন্যান্য ফাংশন থেকে কিছুটা ছিটিয়ে দিতে হবে।
থিও বেলারে

1
এমনকি, টাইপ অনুমান সহ, 90% হাসকেল ফাংশনগুলি ব্যবহার এবং কোডিং করার ফলে একে অপরের সাথে জাল হয়ে যাওয়া জঘন্য জিনিসগুলি পাওয়া যাচ্ছে, যার জন্য এটির টাইপ সিস্টেম এবং আর্কেইন টাইপচেকিংয়ের ত্রুটি বার্তাগুলির বোঝাপড়া দরকার। এমনকি ": t" কোনও জাদুর সমাধান নয়, প্রোগ্রামটি কীভাবে সংকলন করা যায় তা বোঝার প্রথম পদক্ষেপ।
এন্ড্রেস এফ।

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

2

একটি "ক্রিয়ামূলক" ভাষা হওয়ার অর্থ, (অন্যান্য বিষয়গুলি বাদ দিয়ে) যা ফাংশনগুলি ভাষার প্রথম শ্রেণীর অবজেক্ট।

"খাঁটি" ভাষা হওয়ার অর্থ হ'ল ফাংশনগুলি গাণিতিক ফাংশন (পদ্ধতিগুলির বিপরীতে) - একই ইনপুট দেওয়া থাকলে তারা সর্বদা একই আউটপুট উত্পাদন করে।

একটি "খাঁটি কার্যকরী ভাষা" এমন এক যেখানে উপরের উভয়ই ধরে রাখে। আমি একটি "pure- সচেতন নই ly থেকে কার্মিক ভাষা"।

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

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


0

হ্যাঁ, টাইপ সিস্টেমটি একটি অবিশ্বাস্য সম্পদ। এমনকি মনডস কীভাবে কাজ করে বা কিছু সংযুক্তকারী টাইপ সিস্টেম ব্যতীত কীভাবে কাজ করে তা বর্ণনা করা খুব কঠিন হবে। রিপএল এ: টি দিয়ে প্রশ্নে ফাংশনটির ধরণটি প্রথমে আপনাকে জিজ্ঞাসা করতে হাস্কেলের কতটি টিউটোরিয়াল প্রথমে বিবেচনা করুন Consider এটি আপনার জন্য গতিশীল টাইপ করা ভাষায় সহজলভ্য নয়। অবশ্যই, টাইপ সিস্টেমের সমস্ত জটিলতা এখনও আছে। একটি মোনাড এখনও একটি মনাড। তবে ভাষাটি এই বিষয়ে তার হাত ধুয়ে নেওয়ার এবং কোনওরকম সহায়তা না দেওয়ার সিদ্ধান্ত নিয়েছে। আপনি নিজের হয়ে আছেন, পাল আমি গতিশীল টাইপ করা ভাষাগুলিতে কড়া নাড়ছি। আমি তাদের খুব প্রিয়। স্কিম একটি পাওয়ার হাতিয়ার সমান এক্সেলেন্স। তবে আপনি লক্ষ্য করবেন যে আমরা যখন গতিশীল ভাষাগুলিতে স্নাতকের মতো জিনিসগুলি নিয়ে কথা বলি তখন আমরা প্রায়শই একটি স্বরলিপি আবিষ্কার করিপদ্ধতির ধরণের বর্ণনা দেওয়ার জন্য। একটি ক্রিয়ামূলক প্রোগ্রামার এক উপায়ে বা অন্যভাবে যুদ্ধ করবে। হাস্কেলের ধরণের পরীক্ষক আপনাকে কীভাবে তা করতে শেখার জন্য কেবলমাত্র ভাল সরঞ্জাম দেয়।

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