ইয়ান্নিস যেহেতু উল্লেখ করেছেন, এমন অনেকগুলি কারণ রয়েছে যা পূর্বে ছিল না এমন ভাষাগুলিতে উচ্চ-অর্ডার ফাংশন গ্রহণকে প্রভাবিত করেছে। তিনি যে গুরুত্বপূর্ণ আইটেমটি কেবল হালকাভাবে স্পর্শ করেছিলেন সেগুলির মধ্যে একটি হ'ল মাল্টি-কোর প্রসেসরগুলির বিস্তার এবং এটির সাথে আরও সমান্তরাল এবং একযোগে প্রসেসিংয়ের আকাঙ্ক্ষা।
কার্যকরী প্রোগ্রামিংয়ের মানচিত্র / ফিল্টার / হ্রাস শৈলীর সমান্তরালকরণের পক্ষে খুব বন্ধুত্বপূর্ণ, প্রোগ্রামারকে সহজেই কোনও সুস্পষ্ট থ্রেডিং কোড না লিখে একাধিক কোর ব্যবহার করতে দেয়।
জর্জিও নোট হিসাবে, কেবলমাত্র উচ্চ-আদেশ ক্রিয়াকলাপ ছাড়া কার্যকরী প্রোগ্রামিংয়ের আরও অনেক কিছু আছে। ফাংশন, প্লাস একটি মানচিত্র / ফিল্টার / প্রোগ্রামিং প্যাটার্ন হ্রাস এবং অপরিবর্তনীয়তা কার্যকরী প্রোগ্রামিংয়ের মূল বিষয়। এই জিনিসগুলি একসাথে সমান্তরাল এবং সমবর্তী প্রোগ্রামিংয়ের শক্তিশালী সরঞ্জামগুলির জন্য তৈরি করে। ধন্যবাদ, অনেক ভাষা ইতিমধ্যে অপরিবর্তনীয়তার কিছু ধারণা সমর্থন করে এবং এমনকি যদি তা না করে তবে প্রোগ্রামাররা লাইব্রেরিগুলিকে এবং সংকলককে অ্যাসিঙ্ক্রোনাস বা সমান্তরাল ক্রিয়াকলাপ তৈরি এবং পরিচালনা করতে মঞ্জুরি দেয় এমন জিনিসকে পরিবর্তন হিসাবে বিবেচনা করতে পারে treat
একটি ভাষায় হাই-অর্ডার ফাংশন যুক্ত করা সমবর্তী প্রোগ্রামিংকে সহজ করার জন্য একটি গুরুত্বপূর্ণ পদক্ষেপ।
হালনাগাদ
লোকী যে উদ্বেগ প্রকাশ করেছেন তার সমাধানের জন্য আমি আরও কয়েকটি বিশদ উদাহরণ যুক্ত করব।
নীচের সি # কোডটি বিবেচনা করুন যা উইজেটের দামের একটি নতুন তালিকা তৈরি করে উইজেটগুলির সংগ্রহকে লক্ষ্য করে।
List<float> widgetPrices;
float salesTax = RetrieveLocalSalesTax();
foreach( Widget w in widgets ) {
widgetPrices.Add( CalculateWidgetPrice( w, salesTax ) );
}
উইজেটগুলির একটি বৃহত সংগ্রহের জন্য, বা একটি গণনামূলকভাবে নিবিড় ক্যালকুলেট উইজেটপ্রাইস (উইজেট) পদ্ধতির জন্য, এই লুপটি কোনও উপলব্ধ কোরের ভাল ব্যবহার করতে পারে না। বিভিন্ন কোরে মূল্য গণনা করার জন্য প্রোগ্রামারকে সুস্পষ্টভাবে থ্রেড তৈরি এবং পরিচালনা করতে হবে, কাজটি পাশ কাটাতে হবে এবং ফলাফলগুলি একসাথে সংগ্রহ করতে হবে।
হাই-অর্ডার ফাংশনগুলি সি # তে যুক্ত হওয়ার পরে একটি সমাধান বিবেচনা করুন:
var widgetPrices = widgets.Select( w=> CalculateWidgetPrice( w, salesTax ) );
পূর্বাঞ্চ লুপটি তার প্রয়োগের বিশদটি গোপন করে নির্বাচন পদ্ধতিতে সরানো হয়েছে। প্রোগ্রামারের কাছে যা কিছু রয়ে গেছে তা হ'ল প্রতিটি উপাদানকে কী কী ফাংশন প্রয়োগ করতে হবে তা সিলেক্ট করতে হয়। এটি সিলেক্ট প্রয়োগকরণকে প্রোগ্রামারের জড়িততা ছাড়াই সমস্ত সিঙ্ক্রোনাইজেশন এবং থ্রেড ম্যানেজমেন্ট উদ্বেগগুলি পরিচালনা করে, পেরেলেলের গণনাগুলি চালনার অনুমতি দেয়।
তবে, অবশ্যই, নির্বাচন এটি সমান্তরালভাবে কাজ করে না। সেখানেই অপরিবর্তনীয়তা আসে। নির্বাচনের প্রয়োগটি জানে না যে সরবরাহিত ফাংশন (উপরের ক্যালকুলেট উইজেটস) এর পার্শ্ব প্রতিক্রিয়া নেই। ফাংশনটি সমস্ত কিছু ভেঙে সিলেক্ট এর ভিউ এবং এর সিঙ্ক্রোনাইজেশনের বাইরে প্রোগ্রামের স্থিতি পরিবর্তন করতে পারে। উদাহরণস্বরূপ, এক্ষেত্রে সেলসট্যাক্সের মান ত্রুটিতে পরিবর্তিত হতে পারে। খাঁটি কার্যকরী ভাষাগুলি অপরিবর্তনীয়তা সরবরাহ করে, তাই নির্বাচন (মানচিত্র) ফাংশনটি নিশ্চিতভাবে জানতে পারে যে কোনও রাষ্ট্রের পরিবর্তন হচ্ছে না।
সি # লিঙ্কের বিকল্প হিসাবে প্লিনকিউ সরবরাহ করে এটিকে সম্বোধন করে। এটি দেখতে হবে:
var widgetPrices = widgets.AsParallel().Select(w => CalculateWidgetPrice( w, salesTax) );
Those কোরের সুস্পষ্ট ব্যবস্থাপনা ব্যতীত আপনার সিস্টেমের সমস্ত কোরকে সম্পূর্ণ ব্যবহার করে।