বন্ধ এবং তার অপরিষ্কারতা


10

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

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

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

উত্তর:


6

সুতরাং, বলুন, ডেটাবেজ বা রাইটিং ফাইল অনুসন্ধান করা সংজ্ঞা অনুসারে খাঁটি কার্যকরী শৈলীতে করা যায়নি। এটি উদাহরণস্বরূপ, আমাদের স্নাদের প্রয়োজনের একটি কারণ।

কারও "monad" প্রয়োজন নেই, এটি জিনিস বর্ণনা করার একমাত্র উপায়। আসলে, এটি সম্ভবত সর্বোত্তম উপায়ও নয়। কিছু প্রকারের প্রভাব টাইপিং , স্বতন্ত্রতা প্রকারের , বা সম্পূর্ণ লিনিয়ার যুক্তি ভিত্তিক একটি সিস্টেম তত্ত্বের ক্ষেত্রে আরও দৃ pers়প্রবণ বলে মনে হয় তবে সুপরিচিত টাইপ সিস্টেমগুলি থেকে আরও সমস্ত র‌্যাডিকাল প্রস্থান এবং প্রকাশ করা আরও জটিল। হাস্কেল-তে পাওয়া মোনাডিক আইও হ'ল ব্যবহারযোগ্যতা এবং সরলতার মধ্যে একটি সমঝোতা, যেহেতু এটি মূলত সম্পূর্ণরূপে আবশ্যক প্রোগ্রামিংয়ের মডেলগুলি এমনভাবে উপস্থাপন করে যা ভাষাতে ইতিমধ্যে ব্যবহৃত এমএল-স্টাইল টাইপের সিস্টেমের সাথে সহজেই একত্রে উপস্থিত হয়।

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

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

একটি দুরত্বপূর্ণ উপায়ে পয়েন্টটি তৈরি করতে, স্বল্পপরিচয়তা বিশিষ্ট ভাষা বিবেচনা করুন, অলস কে :

অলস কে একটি আবর্জনা-সংগৃহীত, সাধারণ প্রবাহ ভিত্তিক আই / ও সিস্টেম সহ স্বচ্ছ ফাংশনাল প্রোগ্রামিং ভাষা।

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

(...)

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

(...)

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

আমি সন্দেহ করি যে এর চেয়ে আরও বিশুদ্ধভাবে কার্যকরী ভাষা আপনি খুঁজে পাবেন!


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

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

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


স্যার, আমাকে অবশ্যই স্বীকার করতে হবে, আমি কোনও স্ট্যাকের উপর আপনার কোনও উত্তর উপভোগ করছি। আপনার অবশ্যই হাস্কেল বইটি লেখা উচিত এবং আমি মজা করছি না।
shabunc

@shabunc: আমি মাঝে মাঝে ... ইতিমধ্যে একটি বইয়ের আকার হচ্ছে ভেবেছেন কিভাবে ঘনিষ্ঠ তাই আমার উত্তর একুন হয়
সিএ ম্যাকান

আপনি কি সম্পূর্ণ লিনিয়ার যুক্তি ভিত্তিক একটি সিস্টেমের উদাহরণ দিতে পারেন? এটি আকর্ষণীয় বলে মনে হয়, যদি এটি বিদ্যমান থাকে।
Configurator

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

3

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

সম্পূর্ণ শুদ্ধ প্রোগ্রামগুলি সংজ্ঞা অনুসারে একটি সিল করা কালো বাক্স এবং মূলত উদ্বেগহীন।

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


অবশ্যই, আপনি ঠিক বলেছেন। তবে আমি বুঝতে পারি কেন 100% বিশুদ্ধতা ইউটোপিয়া। আমি প্রশ্নটি প্রায় STDOUT সম্পর্কে।
shabunc

1
STDOUT একটি পার্শ্ব প্রতিক্রিয়া, ঠিক অন্য যেমন। অভ্যন্তরীণভাবে, মোনাড কোনও ত্রুটি যাচাই করতে পারে যা পরীক্ষা করতে পারে।
রবার্ট হার্ভে

হ্যাঁ, এটি এই প্রশ্নটি সম্পর্কে - এটি কেন অন্য কোনও মত পার্শ্ব প্রতিক্রিয়া হিসাবে বিবেচিত?
shabunc

2
বাইরের বিশ্বের পরিবর্তনকারী যে কোনও কিছুকে পার্শ্ব প্রতিক্রিয়া হিসাবে বিবেচনা করা হয়।
রবার্ট হার্ভে

1

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

এছাড়াও, STDOUT সর্বদা "কনসোল স্ক্রিন" নয়। কখনও কখনও এটি অন্য প্রোগ্রামে পাইপযুক্ত। কখনও কখনও পাইপটি ভেঙে যায়।


0

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

এটি একই সাথে সম্পাদনের ক্ষেত্রেও সমস্যা হতে পারে। যদি আপনি জানেন যে কোনও ফাংশনের কোনও পার্শ্ব প্রতিক্রিয়া নেই তবে আপনি সহজেই সমঝোতার ব্যবস্থা করতে পারেন কারণ আপনি প্রমাণ করতে পারেন যে কোনও জাতি শর্ত বা এর মতো হতে পারে না।


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