ক্রিয়ামূলক প্রোগ্রামিং ভাষা কখন ব্যবহার করবেন?


90

কোন পরিস্থিতিতে সি ++, সি # বা জাভা এর মতো আরও ভার্বোজ অবজেক্ট-ভিত্তিক ভাষার চেয়ে বেশি কার্যকরী প্রোগ্রামিং ভাষা ব্যবহার করা উচিত?

আমি বুঝতে পারি ফাংশনাল প্রোগ্রামিং কী, আমি আসলে বুঝতে পারি না কোন ধরণের সমস্যার জন্য এটি একটি নিখুঁত সমাধান?


এই প্রশ্নের উত্তর এখানে দেওয়া হয় stackoverflow.com/questions/381685/...
krosenvold

4
সর্বদা. বা কমপক্ষে কখনও না।
শেলবি মুর তৃতীয়

4
ল্যাম্বডাস সহ, সি # হ'ল বর্ডারলাইন কার্যকরী।
জেডি

উত্তর:


50

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



4
গাণিতিক গণনার জন্য আপনি কোন কার্যকরী ভাষা ব্যবহার করেছেন?
জুলাই

8
এছাড়াও, সংকলক! আমি শুনেছি যারা হাসকেলে সংকলক লিখেছেন তারা বলেছিলেন যে তারা "আর কখনও আবশ্যক ভাষায় একটি সংকলক লিখবেন না"।
শ্রীভাতসারআর

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

95

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

সুতরাং সেখানে সমকালীন প্রক্রিয়াজাতকরণ আসে।

দুর্ভাগ্যক্রমে বেশিরভাগ ওওপি ভাষা এক সাথে একাধিক প্রসেসরের সুবিধা নিতে পারে না কারণ তথ্যের মধ্যে আন্তঃনির্ভরতার কারণে।

খাঁটি ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজে কম্পিউটার একবারে দুটি (বা আরও অনেক) ফাংশন চালাতে পারে কারণ এই ফাংশনগুলি রাষ্ট্রের তথ্যের বাইরে কোনও পরিবর্তন করে না।

এখানে আপনি উপভোগ করতে পারেন ফাংশনাল প্রোগ্রামিং সম্পর্কে একটি দুর্দান্ত নিবন্ধ


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

4
নিবন্ধটি লিঙ্ক করার জন্য আপনাকে ধন্যবাদ। এটি সত্যই আমার পক্ষে বিষয়গুলি ব্যাখ্যা করতে সহায়তা করেছিল।
গুপ্ত্রন

13

আমার এক বন্ধু তার কলেজের একজন অধ্যাপকের বরাত দিয়ে নীচের মতো কিছু বলেছে:

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

আমার উত্তর হ'ল এফপি হ'ল ওওর মতো বিস্তৃত অ্যাপ্লিকেশন সহ প্রোগ্রামিংয়ের ক্ষেত্রে সম্পূর্ণ কার্যকর approach যে কোনও প্রোগ্রামিং-ভাষা-পছন্দ আলোচনার মতো, আমিও মনে করি যে আরও গুরুত্বপূর্ণ প্রশ্নগুলি হ'ল:

  1. আপনার কাছে কি একটি নতুন স্বরলিপি এবং নতুন চিন্তাভাবনা শেখার জন্য বিনিয়োগ করার সময় আছে?
  2. আপনি কোন ভাষায় বিবেচনা করছেন পর্যাপ্ত পরিমাণে সমৃদ্ধ গ্রন্থাগার রয়েছে যা আপনি কোনও চাকা পুনরুদ্ধার করতে আটকে যাবেন না?

প্রথম প্রশ্ন হিসাবে, আপনি যদি প্রাথমিকভাবে শেখার মানটির জন্য এটি করছেন তবে আমি বিস্তৃত সমর্থন উপকরণ (বই, নিবন্ধ, সক্রিয় সম্প্রদায় ইত্যাদি) এর কারণে হাস্কেলের দিকে নজর দেওয়ার পরামর্শ দেব

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


আমি কলেজে স্কিম শিখেছি, তাই আমি কেবল অভিজ্ঞতার জন্য ফাংশনাল প্রোগ্রামিং শিখতে চাই না। আমি বরং ব্যবহারিক কারণে কিছু কার্যকরী ভাষা শিখতে চাই।
অ্যালেক্স বারানোস্কি

9

ব্যবহারিকভাবে পিপিতে আপনি যা করতে পারেন তা এফপিতে এবং একই জিনিস বিপরীতে করা যেতে পারে। এটি কোনও কিছুর কোড দেওয়ার আরও একটি উপায় the সমস্যাটির অন্য দৃষ্টিভঙ্গি এবং এটি সমাধানের আলাদা উপায়।

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

তবে, আপনি যদি সত্যিই এফপি করতে চান তবে আপনি এই স্টাইলটি এমনকি সি ++ এবং সি # তেও ব্যবহার করতে পারেন। অবশ্যই, আপনি যদি মানক লাইব্রেরি ব্যবহার করেন তবে এটি 100% এফপি হবে না। দুর্ভাগ্যক্রমে, আমি মনে করি না যে সি # কার্যকরী প্রোগ্রামিংয়ের সাথে ব্যবহার করতে অনুকূলিত হয়েছে এবং এটি সম্ভবত প্রচুর পারফরম্যান্সের সমস্যা তৈরি করবে।

এটি আরও একটি বিষয়গত পোস্ট, আমি এফপি সম্পর্কে কী ভাবি। এটি কোনও কঠোর ঘোষণা নয়।


8
"বাস্তবে সবকিছু আপনি পিপি করতে পারি না FP মধ্যে সম্পন্ন করা যাবে" - আসলে, এটা ঠিক সবকিছু।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

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

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

@ পার্ডনমায়ারিটিক আপনি স্পষ্টতই হাসকেলে গেম লিখতে পারেন এবং কোনও গণনাও করতে পারেন তবে গতি কয়েকগুণ কম এবং স্মৃতিশক্তি ব্যবহার বেশি হবে। সুতরাং নীলরাজের বক্তব্যটির একটি পাল্টে নমুনাটি হ'ল আপনি এফপিতে "এমন একটি গেম লিখতে পারবেন না যা তত দ্রুত এবং মেমরিতে যতটা মেমরি থাকে তেমন ব্যবহার করে" P এটি একটি বাস্তব ব্যবহারিক সমস্যা, কোনও প্যাডেন্টিক ট্রিক নয় (এবং আমি এফপিকে মোটেও বাশ করতে আছি না - আমি এখনই স্কালাকে কোডিং করছি!)।
লুইজি প্লিঞ্জ

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

4

কার্যকরী ভাষা অনেক পরিস্থিতিতে ভাল। এটি একটি নির্দিষ্ট কার্যকরী ভাষার গ্রন্থাগারগুলির উপর নির্ভর করে।

"কখন কোনও অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করবেন?" এই প্রশ্নের উত্তর আপনি কীভাবে দেবেন?


4
"কখন একটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষা ব্যবহার করবেন?" আপনি যখন কম্পিউটেশনালি যে কোনও মডেল করতে চান, অন্যদিকে আমি এমন কোনও সমস্যা খুঁজছিলাম যা এফপি হ'ল স্বজ্ঞাত এ্যাসওয়ার হবে, আমি এখনও সন্ধান করছি, এটিই এই পোস্টটি খুঁজে পেয়েছি।
জিমজিম

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

3

যদিও এটি সম্পূর্ণ বিষয়গত প্রশ্ন, তবে আমি কেবল যুক্ত করতে চাই যে কার্যকরী ভাষাগুলি ডোমেনের নির্দিষ্ট ভাষাগুলি পার্স করতে প্রচুর ব্যবহৃত হয় ; কার্যকরী প্রকৃতি ব্যাকরণকে পার্স করার পক্ষে ভাল leণ দেয়।


4
ডিএসএল পার্সিং করছেন? আমি ভেবেছিলাম লিসপ ম্যাক্রো এবং এর মতো, ডিএসএলগুলি ম্যাক্রো হিসাবে প্রয়োগ করা হয়, লিস্প প্রোগ্রামগুলি দ্বারা পার্স করার মতো কিছু নয়। নন-লিস্প ভাষা সহ ওয়াইএমএমভি। :
ক্রিস জেস্টার-ইয়ং

1

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


4
@ জনহরপ - এ সম্পর্কে বিস্তারিত বলার যত্ন? আমি এটি এতটা সুস্পষ্ট বলে মনে করি না এবং আপনি লজ্জাজনক হবেন যদি আপনি এই ধারণাটি ছেড়ে দেন যে আপনি লোকদেরকে মুর বুস্টেরিসিমের বাইরে ভোট দিচ্ছেন।
টেড

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

4
@ জনহরপ - আমি এটি গ্রহণ করব। তবে আপনি এমএল সম্পর্কে কথা বলছেন, সাধারণভাবে কার্যকরী ভাষা নয়। আমি ডিএসএল-এর একজন বড় বিশ্বাসী তাই আমি নির্দিষ্ট ভাষাটি যেটির জন্য ডিজাইন করা হয়েছিল তার জন্য নির্দিষ্ট ভাষা ব্যবহারের বিরুদ্ধে তর্ক করব না।
টেড

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

পছন্দ করেছেন এটি কার্যকরী ভাষার অন্তর্নিহিত বৈশিষ্ট্য নয়, যা প্রশ্নটি জিজ্ঞাসা করছিল।
টেড

1

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

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

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

logger.expects(once()).method("error") .with( and(stringContains(action),stringContains(cause)) );

এটি মূলত একটি ফাংশন তৈরি করে যা একটি মক অবজেক্টে কিছু কলিং ক্রম সঠিক কিনা তা নির্ধারণের জন্য মূল্যায়ন করা হয়। (উদাহরণস্বরূপ http://www.jmock.org/yoga.html থেকে চুরি হয়েছে )

অন্যথায় ওও ভাষাগুলিতে আর এফপির মতো সিনট্যাক্স হ'ল রুবির মতো ক্লোজারগুলির ব্যবহার।


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