কার্যকরী প্রোগ্রামিং: সমঝোতা এবং রাষ্ট্র সম্পর্কে সঠিক ধারণা?


21

এফপি সমর্থকরা দাবি করেছেন যে সম্মতিটি সহজ কারণ তাদের দৃষ্টান্ত পরিবর্তনীয় অবস্থা এড়িয়ে চলে। আমি পাই না।

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

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

স্পষ্টতই পরিস্থিতি সামঞ্জস্যের জন্য পুরোপুরি উপযুক্ত (যেমন বিচ্ছিন্ন কাজগুলির প্রক্রিয়া করার সময় যার রাজ্যগুলি একে অপরের থেকে স্বতন্ত্র থাকে)।

আমার উদাহরণে কীভাবে সম্মতিটি কার্যকর তা আমি ব্যর্থ হয়েছি এবং এটিই সমস্যা হতে পারে। আমি কোনওভাবে দাবিটি ভুলভাবে উপস্থাপন করতে পারি।

কেউ কি এই দাবিটিকে আরও ভালভাবে উপস্থাপন করতে পারেন?


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

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

1
এক কথায়, জিপার্স
জে কে।

2
প্রত্যেক বস্তুর বিশ্ব সম্পর্কে নিজস্ব ধারণা থাকবে। থাকবে পরিণামস্বরূপ দৃঢ়তাওয়েভ ফাংশন ধসের সাথে জিনিসগুলি কীভাবে আমাদের "বাস্তব বিশ্বে" কাজ করে তা সম্ভবত এটিও ।
Herzmeister

1
আপনি "বিশুদ্ধভাবে ক্রিয়ামূলক retrogames" আকর্ষণীয় খুঁজে পেতে পারেন: prog21.
داد

উত্তর:


15

আমি উত্তরটি ইঙ্গিত করার চেষ্টা করব। এই না একটা উত্তর, শুধুমাত্র একটি পরিচায়ক চিত্রণ। @ জে কে এর উত্তরটি আসল জিনিসটির দিকে ইঙ্গিত করে, জিপার্স।

কল্পনা করুন যে আপনার গাছের একটি অপরিবর্তনীয় কাঠামো রয়েছে। আপনি একটি শিশু প্রবেশ করিয়ে একটি নোড পরিবর্তন করতে চান। ফলস্বরূপ, আপনি একটি সম্পূর্ণ নতুন গাছ পাবেন।

তবে নতুন গাছের বেশিরভাগই পুরানো গাছের মতো exactly একটি চতুর বাস্তবায়ন গাছের টুকরো বেশিরভাগটিকে পুনরায় ব্যবহার করবে, পরিবর্তিত নোডের চারপাশে পয়েন্টারগুলি রাউটিং করবে:

উইকিপিডিয়া থেকে

ওকাসাকির বই এর উদাহরণ সহ পূর্ণ।

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

এটি সম্ভবত উপায়ে গেম ওয়ার্ল্ড স্ট্রাকচারকে উপযুক্ত উপায়ে ডিজাইনে কিছুটা বিবেচনা করে। দুর্ভাগ্যক্রমে, আমি এই বিষয়গুলিতে কোনও বিশেষজ্ঞ নই। অবশ্যই এটি কোনও এনএক্সএম ম্যাট্রিক্সের পরিবর্তে পরিবর্তনীয় ডেটা কাঠামো হিসাবে ব্যবহৃত অন্য কিছু হতে হবে। গাছের নোডের মতো সম্ভবত এটি ছোট ছোট টুকরা (করিডোর? স্বতন্ত্র কোষ?) থাকা উচিত যা একে অপরের দিকে নির্দেশ করে।


3
+1: ওকাসাকির বইটির দিকে নির্দেশ করার জন্য। আমি এটি পড়ি না তবে এটি আমার তালিকায় রয়েছে। আমি মনে করি আপনি যা চিত্রিত করেছেন তা সঠিক সমাধান। বিকল্প হিসাবে, আপনি স্বতন্ত্রতার ধরণগুলি বিবেচনা করতে পারেন (ক্লিন, এন.ইউইকিপিডিয়া.র.উইকি / ইউনিকুয়েন্স_ টাইপ ): এই ধরণের প্রকারগুলি ব্যবহার করে আপনি রেফারেন্সিয়াল স্বচ্ছতা বজায় রেখে ডেটা অবজেক্টগুলি ধ্বংসাত্মকভাবে আপডেট করতে পারেন।
জর্জিও

কী বা আইডির মাধ্যমে পরোক্ষ রেফারেন্সের মাধ্যমে সম্পর্কের সংজ্ঞা দেওয়ার কোনও সুবিধা রয়েছে? এটি হ'ল আমি ভাবছিলাম যে কোনও কাঠামোর পরিবর্তে অন্য কাঠামোর সাথে প্রকৃত স্পর্শের কম সংশোধন প্রয়োজন। নাকি এই কৌশলটি এফপিতে সত্যই ব্যবহৃত হয় না?
মারিও টি ল্যাঞ্জা

9

9000 এর উত্তর অর্ধেক উত্তর, ধ্রুবক ডেটা স্ট্রাকচার আপনাকে অপরিবর্তিত অংশগুলি পুনরায় ব্যবহার করতে দেয়।

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

জিপার্সের সাথে অন্য বিষয়টি হ'ল আপনি যে কোনও ডেটা টাইপ চান তার জন্য জিপার বিদ্যমান


আমি আশঙ্কা করি যে "জিপার্স" খনন করতে আমার কিছুটা সময় লাগবে যেহেতু আমি কেবলমাত্র কোনও অন্বেষণকারী এফপি সীমান্তে আছি। হাস্কেলের সাথে আমার কোনও অভিজ্ঞতা নেই।
মারিও টি ল্যাঞ্জা

আমি পরে আজ একটি উদাহরণ যুক্ত করার চেষ্টা করব
জে কে।

4

কার্যকরী শৈলীর প্রোগ্রামগুলি সম্মতি ব্যবহারের মতো প্রচুর সুযোগ তৈরি করে। আপনি যে কোনও সময় রূপান্তর করতে বা ফিল্টার করতে বা সংগ্রহকে একত্রিত করে, এবং সমস্ত কিছু খাঁটি বা অপরিবর্তনীয়, একযোগে অপারেশন করার সুযোগ রয়েছে ed

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

func MakeMonsterDecision curWorldState monster =
    ...
    ...
    return monsterDecision

func NextWorldState curWorldState =
    ...
    let monsterMakeDecisionForCurrentState = MakeMonsterDecision curWorldState
    let monsterDecisions = List.map monsterMakeDecisionForCurrentState activeMonsters
    ...
    return newWorldState

একটি দানব একটি বিশ্ব রাষ্ট্র প্রদেয় কী করবে তা গণনা করার জন্য আপনার একটি ফাংশন রয়েছে এবং পরের বিশ্ব রাজ্যের গণনার অংশ হিসাবে এটি প্রতিটি দানবকে প্রয়োগ করুন। ক্রিয়ামূলক ভাষায় এটি করা একটি প্রাকৃতিক জিনিস এবং সংকলক সমান্তরালভাবে 'প্রতিটি দানবকে এটি প্রয়োগ করুন' পদক্ষেপটি সম্পাদন করতে মুক্ত।

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


এটি বেশ কিছুটা সাহায্য করে। আমি দেখতে পাচ্ছি যে কোনও খেলায় দানবরা একযোগে তারা পরবর্তী কী করবে তা স্থির করে কীভাবে আসবে তাতে দুর্দান্ত উপকার হবে।
মারিও টি ল্যাঞ্জা

4

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

একটি ব্যাঙ্কিং অ্যাপ্লিকেশনটিতে আমরা কখনই কোনও রাষ্ট্রের স্ন্যাপশটের উপর ভিত্তি করে এমন কোনও সিদ্ধান্তের ভিত্তিতে সিদ্ধান্ত নিতে চাই না যা তখন থেকে কোনও নতুন দ্বারা বাতিল হয়ে যায় (প্রত্যাহার ঘটেছিল)।

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


0

এফপি সমর্থকরা দাবি করেছেন যে সম্মতিটি সহজ কারণ তাদের দৃষ্টান্ত পরিবর্তনীয় অবস্থা এড়িয়ে চলে। আমি পাই না।

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

সিরিয়াল অ্যালগরিদম

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

আরও সহজ সংকেত

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

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

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

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

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

ক্ষতিকর দিক

এটি বলেছিল, আমি আমার কার্যনির্বাহী বন্ধুবান্ধব (যাকে আমি অত্যন্ত শান্ত বলে মনে করি) এর প্রতি সমস্ত শ্রদ্ধার সাথে এক অংশের সাথে একমত নই:

[...] কারণ তাদের দৃষ্টান্ত পরিবর্তনীয় অবস্থা এড়িয়ে চলে।

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

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


1
"পরিবর্তনীয় অবস্থা" বলতে সর্বদা অ্যাপ্লিকেশন স্তরে রাষ্ট্র বোঝানো হয়, প্রক্রিয়া স্তরে নয়। পয়েন্টারগুলি অপসারণ এবং অনুলিপি মান হিসাবে প্যারামিটারগুলি পাস করা এফপিতে বেকড কৌশলগুলির মধ্যে একটি। তবে যে কোনও কার্যকর ক্রিয়াকলাপকে কোনও স্তরে রূপান্তর করতে হবে - কার্যকরী প্রোগ্রামিংয়ের মূল বিষয়টি হ'ল কলকারীর অন্তর্ভুক্ত যে পরিবর্তনীয় রাষ্ট্র পদ্ধতিতে প্রবেশ না করে এবং পরিবর্তনগুলি রিটার্ন মানগুলি ব্যতীত প্রক্রিয়া থেকে বেরিয়ে আসে না তা নিশ্চিত করা! তবে এমন কয়েকটি প্রোগ্রাম রয়েছে যা মোটামুটি পরিবর্তিত অবস্থা ছাড়াই অনেক বেশি কাজ করতে পারে এবং ত্রুটিগুলি সবসময় ইন্টারফেসে আবার কমতে থাকে।
স্টিভ

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

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

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

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