কোন সাধারণ সমস্যার জন্য ফাংশনাল প্রোগ্রামিং উপযুক্ত নয়? [বন্ধ]


22

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

কোন সাধারণ সমস্যাগুলির জন্য ফাংশনাল প্রোগ্রামিং ভাল ফিট হয় না?


রক্ষে! এক মুহুর্তের জন্য আমি ভেবেছিলাম আপনি বলেছেন "একটি ত্রুটিযুক্ত দৃষ্টান্ত"। তারপরে ফিরে এসে চেক করলাম।
সি

1
আমি মনে করি যে পার্শ্ব-প্রতিক্রিয়াগুলি এড়িয়ে চলার চেয়ে (হাস্কেলের মধ্যে) বিচ্ছিন্নভাবে বলা আরও সঠিক। মনাদারা রাজ্য পরিবর্তনের জন্য অনুমতি দেয় এবং এর একটির নাম "রাষ্ট্র"।
ল্যারি কোলম্যান

যেমন ল্যারি কোলম্যান ব্যাখ্যা করেছিলেন, এটি ঠিক নয় যে কার্যকরী প্রোগ্রামিংগুলি পার্শ্ব প্রতিক্রিয়াগুলি এড়িয়ে যায়, তবে এটি তাদের ব্যবহারকে নিরুৎসাহিত করে এবং কিছু ভাষায় এটি পরিষ্কারভাবে তাদের বিচ্ছিন্ন করে তোলে। এর পড়ুন যেমন অনুচ্ছেদ 7 research.microsoft.com/en-us/um/people/simonpj/papers/...
জর্জিও

উত্তর:


17

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

একটি দৃ concrete় উদাহরণটি দৈত্যটির গুলিবিদ্ধ হওয়ার পরে তার স্বাস্থ্যের পরিবর্তন করবে। একেবারে নতুন দৈত্যের পরিবর্তে এটির স্বাস্থ্যের পরিবর্তন করা আরও অনেক বুদ্ধিমান, এখনই যার স্বাস্থ্য কম it এই ধরণের পরিবর্তনগুলি গেম জগতের প্রায় সমস্ত কিছুকেই তৈরি করে এবং খাঁটি কার্যকরী পদ্ধতিতে এটি করা খুব স্বজ্ঞাত নয়। আমি ধারণা করি কিছু কার্যকর পারফরম্যান্স জরিমানা থাকতে পারে, কমপক্ষে যদি আপনি এটি নিখুঁত কার্যকরী ভাষায় করছেন।

(পার্শ্ব নোট হিসাবে, গেমগুলির কিছু সমস্যাগুলি ক্রিয়াগত প্রোগ্রামিং যেমন এআই এর জন্য খুব ভাল উপযুক্ত suited এই ক্ষেত্রে একটি সংকর কার্যকরী / অপরিহার্য ভাষা হবে সেরা ফিট))


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

1
@ sepp2k, লিঙ্কটির জন্য ধন্যবাদ। যিনি সত্যিকারের গেম তৈরি করেছেন তার কাছ থেকে তর্কিত দৃষ্টিকোণটি দেখে আমি আনন্দিত।
ম্যাট ওলেনিক

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

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

@ sepp2k ঠিক আছে, আমি আপনার বোঝাতে চাইছি।
ম্যাট ওলেনিক

17

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


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

@ জোনাস: এরলং পরিবর্তনকে হ্রাস করতে পারে তবে বার্তাগুলি পাঠানো আইও-র উপর নির্ভরশীল যা অবশ্যই একটি পার্শ্ব প্রতিক্রিয়া।
জন হ্যারোপ

11

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

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


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

4
@ জোন হ্যারোপ: প্রথম শ্রেণির ফাংশনগুলি ক্রিয়ামূলক প্রোগ্রামিং ভাষার পক্ষে অনন্য নয়। আমি এখনও তর্ক করছি যে জিপিআইয়ের জন্য এফপি স্টাইলটি উপযুক্ত নয়।
মিপাদি

1
আপনি যাকে জিজ্ঞাসা করেন তা নির্ভর করে। বেশিরভাগ ক্রিয়ামূলক প্রোগ্রামারদের কাছে প্রথম শ্রেণির ফাংশনগুলি হ'ল কার্যকরী প্রোগ্রামিংয়ের খুব সংজ্ঞা।
জন হ্যারোপ

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

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

5

ডেটা-চালিত ব্যবসায়িক অ্যাপ্লিকেশন। ইউজার ইন্টারফেস এবং সাধারণ ডেটা ক্রিয়াকলাপগুলির এফপি দরকার হয় না।


2
এবং অন্য যে কোনও ডেটা / দেখার অ্যাপ্লিকেশন, সত্যই। বেশিরভাগ গেমগুলি রাষ্ট্র সম্পর্কিত এবং এটি পরিবর্তনের বিষয়ে, এবং তাই কার্যকরী শৈলীতে ভাল অনুবাদ করবেন না।
জন পুরি

18
সত্যি? আমি সবসময় ভাবতাম যে এফপি এটির জন্য বিশেষত ভাল হবে । এই অ্যাপ্লিকেশনগুলি ডেটা নির্বাচন, সমষ্টি এবং প্রজেক্টিংয়ের 99% এর মতো নয়? এটি মূলত filter, reduceএবং map। কিছু নিক্ষেপ sort, partition, groupBy। সব পরে, এই ধরণের অ্যাপ্লিকেশনের লেখার জন্য বহুল ব্যবহৃত প্রোগ্রামিং ভাষা এক্সেল, যা হয় একটি কার্মিক ভাষা।
Jörg W Mittag

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

1
-1: আপনি এমন কিছু অ্যাপ্লিকেশন তালিকাভুক্ত করেছেন যাতে এফপি এক্সেল করে।
জন হ্যারোপ

2

প্রতি সেটের কার্যক্ষম প্রোগ্রামিংয়ের জন্য উপযুক্ত নয় এমন কোনও সমস্যা সেট আপনি সহজেই খারিজ করতে পারবেন না।

ফাংশনাল প্রোগ্রামিং এবং এর বৈশিষ্ট্যগুলির জন্য ব্যবহৃত প্রকৃত ভাষার উপর অনেক কিছুই নির্ভর করে।

রিয়েলটাইম এম্বেড-সিস্টেমগুলির জন্য ইতিমধ্যে উল্লিখিত এরলং এর একটি উদাহরণ lang

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

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

গ্লোবাল ভেরিয়েবলের মতো স্বেচ্ছাচারী পার্শ্ব প্রতিক্রিয়াগুলির কোনও দরকার নেই।

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

সি প্রোগ্রামিংয়ের সময়ও গ্লোবাল ভেরিয়েবলের মতো স্বেচ্ছাচারী পার্শ্ব প্রতিক্রিয়া যতটা সম্ভব হ্রাস করা সর্বদা একটি ভাল ধারণা।


জিইউআই অ্যাপ্লিকেশনগুলির মতো স্টেট-ফুল অ্যাপ্লিকেশনগুলি কার্যকরী উপায়ে করা আসলেই শক্ত বা আপনার কোনও প্রস্তাবনা আছে?
জোনাস

আপনার যদি কোনও ধরণের প্রক্রিয়া / থ্রেড বিমূর্ততা থাকে (যেমন এরলংয়ের মতো) আপনি কোনও প্রক্রিয়াতে নিজের অবস্থাটি পাস করতে পারেন।
পিয়ার স্ট্রিটজিংগার

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

1
@ জোনাস: হাসকেলে আপনি আইও মোনাড, রাজ্য মোনাড বা কোনও সংমিশ্রণ ব্যবহার করবেন।
ল্যারি কোলেম্যান

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