পাইপ লাইব্রেরির কার্যকারিতার জন্য ব্যাপ্তিগুলি কেন ব্যবহার করা যাবে না?


10

জোনাথন বোকারা ( ফ্লুয়েন্ট সি ++ এর লেখক ) পাইপ নামক একটি লাইব্রেরি লিখেছিলেন ।

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

  • আনজিপ করুন - একটি জিপড ইনপুট নিন - প্রয়োজনীয় মূলত কে-টিপলস - এবং কে পৃথক, স্বতন্ত্র আউটপুট উত্পাদন করে।
  • কাঁটাচামচ - একটি ধারক / ব্যাপ্তির একাধিক (স্বতন্ত্র) কপি উত্পাদন করুন।

নীতিগতভাবে কেন, আমি তা পুরোপুরি বুঝতে পারি না। (অবশ্যই রেঞ্জগুলি ব্যতীত যেখানে আপনি শেষ পুনরাবৃত্তকারী / সেন্ডিনেল পেতে পারেন না))

উত্তর:


7

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

unzipএবং forkঅপারেশন উভয় একের সাথে অধিকের অপারেশন হয়: তারা একটি একক ইনপুট নিতে এবং অনেক প্রক্রিয়াকরণ অপারেশন থেকে এটি মানচিত্র।

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

একটি পুল সিস্টেম হিসাবে, ব্যাপ্তিগুলি মূল্যের উপর ভিত্তি করে। একাধিক মান প্রত্যাবর্তনের জন্য সি ++ এর কোনও ভাষা প্রক্রিয়া নেই, তাই আমরা সর্বোত্তমভাবে করতে পারি এমন একটি "মান" যা একাধিক মানকে উপস্থাপন করে return

যাইহোক, পরিসীমা অ্যাডাপ্টারের chaining পরিণামে ইনপুট হচ্ছে উপর ভিত্তি করে তৈরি রেঞ্জ । এবং একটি "'মান' যা একাধিক মানকে উপস্থাপন করে" এটি নিজেই কোনও ব্যাপ্তি নয়। এটিতে ব্যাপ্তি থাকতে পারে তবে এটি এর পরিসীমা তৈরি করে না।

সুতরাং এখন আপনাকে এটি খুব অবশ্যই "রেঞ্জ নয়" টাইপটি নিতে হবে এবং আপনার সমস্ত রেঞ্জ অ্যাডাপ্টারকে এটির সাথে কাজ করতে হবে। একটি পরিসীমা অ্যাডাপ্টার প্রয়োগ করতে অবশ্যই অপারেশনটি প্রকারটি জুড়ে সম্প্রচার করতে হবে, বহু-বহু-বহু অপারেশন তৈরি করতে হবে। এটি করা সহজ নয়।

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

দিনের শেষে, একটি পুল-স্টাইল সিস্টেমের প্রতিটি স্তরে কেবলমাত্র একটি আউটপুট থাকে। এটি যেমন একটি এপিআই এর মূল ধারণার মাত্র একটি অংশ: প্রতিটি প্রসেসিং পদক্ষেপ একটি পরিসীমা উত্পন্ন করে । এর এর সুবিধাগুলি রয়েছে (অলস প্রক্রিয়াজাতকরণ) তবে এক থেকে একাধিক অপারেশনকে প্রতিনিধিত্ব করা এর দুর্বল অঞ্চলগুলির মধ্যে একটি।

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

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