কার্যকরী ভাষায় অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং


31

আমি বেশিরভাগই সি / সি ++ প্রোগ্রামার, যার অর্থ আমার অভিজ্ঞতার বেশিরভাগটি প্রক্রিয়াগত এবং অবজেক্ট-ভিত্তিক দৃষ্টান্তগুলির সাথে। যাইহোক, অনেক সি ++ প্রোগ্রামার সচেতন, সি ++ বছরের পর বছর ধরে জোর দিয়ে একটি কার্যকরী-ইস্কুল স্টাইলে স্থানান্তরিত হয়েছে, অবশেষে সি ++ 0 এক্সের ল্যাম্বডাস এবং ক্লোজারগুলির সংযোজনে শেষ হয়েছে।

নির্বিশেষে, আমার সি ++ ব্যবহার করে একটি কার্যকরী শৈলীতে কোডিং করার যথেষ্ট অভিজ্ঞতা রয়েছে, তবে লিস্প, হাস্কেল ইত্যাদির মতো প্রকৃত কার্যকরী ভাষার সাথে আমার খুব কম অভিজ্ঞতা আছে

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

যাইহোক, একটি সি ++ পটভূমি থেকে এসে আমি বিভ্রান্ত হয়েছি যে এই "কোনও পার্শ্ব-প্রতিক্রিয়া" ফিলসফি অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের সাথে কীভাবে কাজ করে। অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের অর্থ আমি এমন কোনও ফ্রেমওয়ার্ক / এপিআই / কোডিং শৈলী যা ব্যবহারকারী-সরবরাহিত ইভেন্ট হ্যান্ডলারগুলিকে সংশ্লেষপূর্ণভাবে ঘটে যাওয়া ইভেন্টগুলি পরিচালনা করতে প্রেরণ করে (প্রোগ্রামের প্রবাহের বাইরে)) এর মধ্যে বুস্ট.এএসআইও, বা এমনকি সাদামাটা পুরানো সি এর মতো অ্যাসিনক্রোনাস লাইব্রেরি অন্তর্ভুক্ত রয়েছে includes সিগন্যাল হ্যান্ডলার বা জাভা জিইআইআই ইভেন্ট হ্যান্ডলারগুলি।

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

সুতরাং দেখে মনে হয় যে অ্যাসিনক্রোনাস প্রোগ্রামিং সমস্তই অ্যাসিনক্রোনাস দ্বারা পার্শ্ব-প্রতিক্রিয়া তৈরির বিষয়ে। এটি কার্যকরী প্রোগ্রামিংয়ের লক্ষ্যগুলির সাথে সম্পূর্ণ মতবিরোধের মধ্যে বলে মনে হচ্ছে। ক্রিয়ামূলক ভাষায় এই দুটি দৃষ্টান্ত কীভাবে মিলিত হয় (বাস্তবে)?


3
বাহ, আমি কেবল একটি প্রশ্ন লিখতে যাচ্ছিলাম এটি পছন্দ করে এবং কীভাবে এটি রাখবেন তা জানতেন না এবং পরে পরামর্শগুলিতে এটি দেখেছিলেন!
আমোগ তালপল্লিকার

উত্তর:


11

আপনার সমস্ত যুক্তিই দৃ sound়, এটি ব্যতীত আমি মনে করি যে কার্যকরী প্রোগ্রামিং সম্পর্কে আপনার বোঝাটি কিছুটা চরম extreme বাস্তব বিশ্বের ক্রিয়ামূলক প্রোগ্রামিংয়ে যেমন অবজেক্ট-ওরিয়েন্টেড বা অপরিহার্য প্রোগ্রামিং হ'ল মানসিকতা এবং আপনি কীভাবে সমস্যার কাছে যান সে সম্পর্কে । আপনি এখনও অ্যাপ্লিকেশনের স্থিতি সংশোধন করার সময় ক্রিয়ামূলক প্রোগ্রামিংয়ের চেতনায় প্রোগ্রাম লিখতে পারেন।

আসলে, আপনি অ্যাপ্লিকেশন রাষ্ট্র পরিবর্তন করতে আসলে আছে কি কিছু। হাস্কেল ছেলেরা আপনাকে বলবে তাদের প্রোগ্রামগুলি 'খাঁটি' কারণ তারা তাদের রাজ্যের সমস্ত পরিবর্তনকে একটি মোনাডে গুটিয়ে রাখে। তবে তাদের প্রোগ্রামগুলি এখনও বাইরের বিশ্বের সাথে যোগাযোগ করে interact (নাহলে কী লাভ!)

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

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

যদি থ্রেডের 'বডি' কেবল একটি মান গণনা করে, তবে একাধিক থ্রেড তৈরি করা এবং তাদের সমান্তরালে গণনা মানগুলি এখনও কার্যকরী দৃষ্টান্তের মধ্যে রয়েছে।


5
এছাড়াও: এরলংয়ের দিকে তাকানো সাহায্য করে। ভাষাটি খুব সাধারণ, খাঁটি (সমস্ত ডেটা অপরিবর্তনীয়), এবং সমস্ত অ্যাসিনক্রোনাস প্রক্রিয়াজাতকরণ সম্পর্কে।
9000

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

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

8

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

http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

মূলত প্রস্তাবিত "সমাধান" নিম্নরূপ:

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

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


6

একটি নোট: একটি কার্যকরী ভাষা খাঁটি, তবে এটির রানটাইমটি তা নয়।

উদাহরণস্বরূপ, হাস্কেল রানটাইমগুলি সারি, থ্রেড মাল্টিপ্লেক্সিং, আবর্জনা সংগ্রহ ইত্যাদির সাথে জড়িত ... এগুলি সমস্তই খাঁটি নয়।

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


2

এই "কোন পার্শ্ব-প্রতিক্রিয়া" ফিলসফি অ্যাসিক্রোনাস প্রোগ্রামিংয়ের সাথে কীভাবে কাজ করে তা নিয়ে আমি বিভ্রান্ত। অ্যাসিক্রোনাস প্রোগ্রামিং দ্বারা আমি বোঝাচ্ছি ...

পয়েন্ট হবে, তাহলে।

একটি শব্দ, কোনও পার্শ্ব-প্রভাব শৈলী রাষ্ট্রের উপর নির্ভর করে ফ্রেমওয়ার্কগুলির সাথে বেমানান। একটি নতুন কাঠামো সন্ধান করুন।

পাইথনের ডাব্লুএসজিআই স্ট্যান্ডার্ড, উদাহরণস্বরূপ, আমাদের কোনও পার্শ্ব-প্রভাব অ্যাপ্লিকেশন তৈরি করতে দেয়।

ধারণাটি হ'ল বিভিন্ন "রাষ্ট্রীয় পরিবর্তনগুলি" মূল্যবোধের পরিবেশ দ্বারা প্রতিবিম্বিত হয় যা ক্রমান্বয়ে নির্মিত যেতে পারে। প্রতিটি অনুরোধটি রূপান্তরগুলির পাইপলাইন।


"কোনও পার্শ্ব-প্রতিক্রিয়া অ্যাপ্লিকেশন তৈরি করতে দেয়" আমার মনে হয় কোথাও কোথাও একটি শব্দ নেই।
ক্রিস্টোফার মাহান

1

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

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

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