ক্রিয়ামূলক প্রোগ্রামিং কেন এখনও গ্রহণ করা হয়নি?


197

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

  • রাষ্ট্রহীন কর্মসূচি; কোন পার্শ্ব প্রতিক্রিয়া
  • concurrency; ক্রমবর্ধমান মাল্টি-কোর প্রযুক্তির সাথে অত্যন্ত সুন্দর অভিনয় করে
  • প্রোগ্রামগুলি সাধারণত ছোট এবং কিছু ক্ষেত্রে পড়া সহজ হয়
  • উত্পাদনশীলতা বৃদ্ধি পায় (উদাহরণ: এরলং)

  • অত্যাবশ্যক প্রোগ্রামিং একটি খুব পুরানো দৃষ্টান্ত (যতদূর আমি জানি) এবং সম্ভবত একবিংশ শতাব্দীর জন্য উপযুক্ত নয়

সংস্থাগুলি ক্রিয়াকলাপী ভাষায় লেখা বা প্রোগ্রামগুলি কেন এত "বিরল" ব্যবহার করছে?

ফাংশনাল প্রোগ্রামিংয়ের সুবিধার দিকে তাকালে কেন আমরা এখনও অপরিহার্য প্রোগ্রামিং ভাষা ব্যবহার করছি?

১৯৯০ সালে হয়তো এটি খুব তাড়াতাড়ি ছিল, কিন্তু আজ?


1
দ্রষ্টব্য: এই প্রশ্নটি কমপক্ষে দুবার মেটা নিয়ে আলোচনা করা হয়েছে, এবং mentionedক্যমত্যটি এটি রাখা উচিত , যদিও উপরে উল্লিখিত "historicalতিহাসিক তাত্পর্য" লকটির মাধ্যমে সংরক্ষণাগারভুক্ত করা উচিত । আমি এটিকে দেখার জন্য কাউকে এটিকে আনলক করার দিকে নজর দিয়ে দৃ strongly়ভাবে উত্সাহিত করছি পরিবর্তে থামার জন্য এবং এই প্রশ্নটি সম্পর্কে আরও একটি ক্লান্তিকর আলোচনায় অংশ না নেওয়ার জন্য ধন্যবাদ জানাতে, উত্তরগুলি যেমন রয়েছে তেমনি উপভোগ করুন এবং তাদের ব্যবসা সম্পর্কে এগিয়ে যান।
শোগ 9

উত্তর:


530

কারণ সে সমস্ত সুবিধাও অসুবিধা also

রাষ্ট্রহীন কর্মসূচি; কোন পার্শ্ব প্রতিক্রিয়া

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

প্রোগ্রামিং ভাষার ধারণাগুলি যখন ডোমেনের মডেলিংয়ের বিরুদ্ধে মৌলিকভাবে কাজ করে, তখন সেই ভাষাটি ব্যবহার করা ন্যায়সঙ্গত হওয়া শক্ত।

concurrency; ক্রমবর্ধমান মাল্টি-কোর প্রযুক্তির সাথে অত্যন্ত সুন্দর অভিনয় করে

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

প্রোগ্রামগুলি সাধারণত ছোট এবং কিছু ক্ষেত্রে পড়া সহজ হয়

এগুলি বাদে যেখানে সেগুলি দীর্ঘতর এবং পড়া আরও কঠিন। কার্যকরী শৈলীতে কীভাবে লেখা প্রোগ্রামগুলি পড়া যায় তা শেখা একটি কঠিন দক্ষতা; লোকেরা গণনা করার ধারাবাহিকতা না করে বরং রেসিপিটির মতো অনুসরণ করার একটি ধারাবাহিক পদক্ষেপ হিসাবে প্রোগ্রামগুলি অনুগ্রহ করে অনেক বেশি ভাল বলে মনে হয়।

উত্পাদনশীলতা বৃদ্ধি পায় (উদাহরণ: এরলং)

কার্যনির্বাহী শৈলীতে প্রোগ্রামিং করতে জানেন এমন প্রোগ্রামারদের নিয়োগের বিশাল ব্যয়ের ন্যায্যতা অর্জনের জন্য উত্পাদনশীলতায় অনেক বেশি এগিয়ে যেতে হবে।

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

জরুরী প্রোগ্রামিংটি একটি পুরানো দৃষ্টান্ত (যতদূর আমি জানি) এবং সম্ভবত একবিংশ শতাব্দীর জন্য উপযুক্ত নয়

ফাংশনাল প্রোগ্রামিং খুব পুরানো। ধারণার বয়সটি কীভাবে প্রাসঙ্গিক তা আমি দেখছি না।

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

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


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

40
@ জুলিয়েট: অবশ্যই আমার বক্তব্যটি হ'ল যদি আপনার কোনও কর্মচারী প্রতিনিধিত্ব করে এমন কোনও বস্তু থাকে তবে এটি "কর্মচারীর নাম পরিবর্তন করুন" অপারেশনটি সেই কর্মচারীর প্রতিনিধিত্বকারী অবজেক্টের রূপান্তর হিসাবে বিবেচনা করে যা বুদ্ধিমান পরিচয় পরিবর্তন করে না । যখন জেন স্মিথ পরিবর্তন তার আপনি একটি তৈরি করবেন না নাম বিভিন্ন জেন জোনস নামক কর্মচারী অন্যথায় একই হয়। দুটি পৃথক নাম সহ দু'জন কর্মচারী নেই। এই প্রক্রিয়াটিকে কোনও নতুন অবজেক্টের রূপান্তর হিসাবে নয়, কোনও বস্তুর রূপান্তর হিসাবে মডেল করা স্বাভাবিক।
এরিক লিপার্ট

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

29
+1 এই উত্তরটি পড়তে তাজা বাতাসের এমন শ্বাস ছিল। আপনার অবস্থানের কারও কাছ থেকে এই জাতীয় ব্যবহারিকতা (কার্যকরী প্রোগ্রামিংয়ের অন্তর্নিহিত আবেগ সহ) শুনে অবাক করা।
ধুস্ট

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

38

প্রোগ্রামিংয়ের মাস্টারমাইন্ডস: মেজর প্রোগ্রামিং ল্যাঙ্গুয়েজগুলির স্রষ্টাদের সাথে কথোপকথন

[Haskell,]

আপনি কেন ভাবেন যে কোনও কার্যনির্বাহী প্রোগ্রামিং ভাষা মূলধারায় প্রবেশ করেনি?

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

প্রযুক্তিগত উদ্ভাবন কীভাবে ঘটে তা অনেকেরই ধারণা নেই এবং তারা আশা করেন যে উন্নত প্রযুক্তি কেবল নিজেরাই প্রভাবশালী হয়ে উঠবে ( "উন্নত মাউসট্র্যাপ" প্রভাব), তবে বিশ্বের ঠিক তেমন নয়।


36
হাস্কেল: 20 বছর পরে, একটি রাতারাতি সাফল্য!
জুলিয়েট

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

4
গ্রেডি বুচ সর্বশেষে জ্যাকবসন এবং রাম্বাগের সাথে একসাথে, ইউএমএলকে ঘৃণা করার জন্য দায়বদ্ধ।
আমার সঠিক মতামতটি

27

মজাদার উত্তরটি হ'ল অন্যটি কোনওটিকে প্রতিস্থাপন করবে না বা করা উচিত নয় - এগুলি বিভিন্ন সরঞ্জাম যা বিভিন্ন উপকার ও বুদ্ধিমানের বিভিন্ন সেট রয়েছে এবং প্রজেক্ট এবং উপলব্ধ "প্রতিভা পুলের মতো অন্যান্য" নরম "ইস্যুগুলির উপর নির্ভর করে যে পদ্ধতির প্রান্তটি পৃথক হবে।

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

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


এটি অত্যন্ত অন্তর্দৃষ্টিপূর্ণ এবং আনন্দদায়ক বাস্তববাদী। এই প্রশ্নের সমস্ত রূপে আমি অবশ্যই দেখেছি সেরা উত্তর।
বেনসন

সম্ভবত এমন ভাষার দ্বারা যে উভয়ই প্রথম শ্রেণির নাগরিক জনপ্রিয় হবে।
কেভিন কোস্টলান

1
110% এর সাথে সম্মত হন। বেশ কয়েকটি অনুষ্ঠানে, আমি এফপিতে নামার চেষ্টা করেছি, কিন্তু কয়েক সপ্তাহ পরে চালিয়ে যাওয়ার ইচ্ছা হারিয়ে ফেলেছি। আমি 30 বছরেরও বেশি সময় ধরে পদ্ধতিগতভাবে প্রোগ্রামিং করছি এবং আমি অত্যাবশ্যক প্রোগ্রামিংয়ের জন্য খুব অভ্যস্ত। এটি আইটি শিল্পের ক্ষেত্রে সত্য large পরিবর্তন সহজে বা দ্রুত আসবে না।
রিচার্ড ইঞ্জি

26

ক্রিয়ামূলক প্রোগ্রামিংয়ের সুবিধাগুলি থাকা সত্ত্বেও, অত্যাবশ্যকীয় এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কখনই পুরোপুরি সরে যাবে না।

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

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

বর্তমানের অত্যাধুনিক শিল্পটি হ'ল বাধ্যতামূলক ভাষাগুলি (যেমন সি #) ক্রিয়ামূলক বিশ্ব থেকে বৈশিষ্ট্য ধার করে (যেমন ল্যাম্বদা স্টেটমেন্ট) এবং তদ্বিপরীত।


3
ওওপি কি প্রেরণামূলক প্রোগ্রামিংয়ের কোনও ধরণের সাবসেট নয়?
প্যাঙ্ক্র্যাক্স

9
ওওপি একটি সুপারস্টার। OOP আবশ্যক যেমন সি ++ সি হিসাবে রয়েছে
রবার্ট হার্ভে

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

9
ওও ভাষাগুলি অপরিহার্য হতে থাকে তবে তা হওয়ার দরকার নেই। ওক্যামল হ'ল একটি দৃ strongly় (যদিও নিখুঁতভাবে নয়) কার্যকরী ভাষা যার পুরো রেইসন ডি'ইটি ওও।
ছক

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

21

তাই না?

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

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


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

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

জাভাস্ক্রিপ্ট, অজগর এবং রুবি এটির প্রকৃত চিত্রগুলির ভাল চিত্র
এনএফজি

15

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

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

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

আমাদের যদি প্রথম থেকেই লিস্প-ওয়াই বা হাস্কেল-ওয়াই ভাষাতে প্রশিক্ষণ দেওয়া হত তবে আমরা সকলেই ভেবে দেখি যে কার্যকরী প্রোগ্রামিং ভাষা সম্পূর্ণ স্বাভাবিক।


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

2
আমি এখনও মাঝেমধ্যে পরিবর্তনীয় স্থিতিকে দরকারী হিসাবে বিবেচনা করার একমাত্র কারণ হ'ল এটি দ্রুত কোড লেখার একটি সহজ উপায় সরবরাহ করে (কোনও অনুলিপি নেই); তবে এর কারণ হতে পারে যে আমি পর্যাপ্ত ফাংশনাল প্রোগ্রামিং জানি না এবং যে 90% পরিস্থিতিতে আপনি পরিবর্তনীয় স্থিতি ব্যবহার না করে দ্রুত ফাংশনাল কোডটি লিখতে পারেন।
জর্জিও

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

14

আপনি ইতিমধ্যে যথেষ্ট উত্তর পেয়েছেন যে আমি কেবলমাত্র দু'টি জিনিস উল্লেখ করব যা আমি এখনও উল্লেখ করি না।

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

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

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

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

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


দুর্দান্ত মন্তব্য! আমি আন্তরিকভাবে একমত। আমি বেশিরভাগ পদ্ধতিগত ভাষাগুলি পড়তে ও বুঝতে মোটামুটি সহজ পাই, যদিও আমি তাদের মধ্যে দু'এর মধ্যে কেবলমাত্র একজন দক্ষ পেশাদার। এফপি ভাষা সম্পর্কে একই বলতে পারি না।
রিচার্ড ইঞ্জি

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

11

কোন অনুমিত প্রয়োজন

আমি আমার পুরনো বস রিক ক্লিনের প্রতিক্রিয়া স্মরণ করি যখন আমি তাকে জন ব্যাকাসের ট্যুরিং অ্যাওয়ার্ড লেকচারের একটি অনুলিপি দেখিয়েছিলাম ক্যান প্রোগ্রামিং ভ্যান নিউম্যান স্টাইল থেকে মুক্তি পেতে পারে?

তাঁর প্রতিক্রিয়া: "সম্ভবত আমাদের মধ্যে কেউ কেউ ভ্যান নিউমান স্টাইল থেকে মুক্তি পেতে চান না !"


10

ক্রিয়ামূলক প্রোগ্রামিং কেন এখনও গ্রহণ করা হয়নি?

কার্যকরী কিছু জিনিসের জন্য আরও ভাল এবং অন্যের পক্ষে খারাপ তাই এটি কখনই "দখল" করবে না। যদিও এটি বাস্তব বিশ্বে ইতিমধ্যে সর্বব্যাপী।

রাষ্ট্রহীন কর্মসূচি; কোন পার্শ্ব প্রতিক্রিয়া

রাষ্ট্রহীন প্রোগ্রামগুলি পরীক্ষা করা সহজ। এটি এখন ব্যাপকভাবে প্রশংসা করা হয় এবং প্রায়শই শিল্পে শোষণ করা হয়।

concurrency; ক্রমবর্ধমান মাল্টি-কোর প্রযুক্তির সাথে দুর্দান্ত খেলনা প্রোগ্রামগুলি সাধারণত ছোট হয় এবং কিছু ক্ষেত্রে উত্পাদনশীলতা পড়তে সহজ হয় (উদাহরণস্বরূপ: এরলং)

আপনি সমবর্তী এবং সমান্তরালতা বিবাদ করছেন।

সিক্যুয়াল প্রসেস (সিএসপি) যোগাযোগ করে কার্যকরভাবে কনকুরেন্সি করা যায়। কোনও সিএসপির অভ্যন্তরে কোডটি তার স্থানীয় রাষ্ট্রকে পরিবর্তন করতে পারে তবে তাদের মধ্যে প্রেরিত বার্তাগুলি সর্বদা পরিবর্তনযোগ্য হওয়া উচিত।

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

সংস্থাগুলি ক্রিয়াকলাপী ভাষায় লেখা বা প্রোগ্রামগুলি কেন এত "বিরল" ব্যবহার করছে?

স্কালা প্রায়শই একটি কার্যকরী ভাষা হিসাবে বিবেচিত হয় তবে এটি সি # এর চেয়ে বেশি কার্যকরী নয় যা বর্তমানে বিশ্বের অন্যতম জনপ্রিয় ভাষা।

ফাংশনাল প্রোগ্রামিংয়ের সুবিধার দিকে তাকালে কেন আমরা এখনও অপরিহার্য প্রোগ্রামিং ভাষা ব্যবহার করছি?

নিখুঁত ক্রিয়ামূলক প্রোগ্রামিংয়ের প্রচুর মারাত্মক অসুবিধা রয়েছে তাই আমরা লিস্প, স্কিম, এসএমএল, ওক্যামেল, স্কালা এবং সি # এর মতো অপরিষ্কার কার্যকরী ভাষা ব্যবহার করি।


7

যখন আমি চিন্তা করি যে কার্যকরী প্রোগ্রামিং কীভাবে আমার প্রকল্পগুলিতে কাজ করতে পারে তবে আমি সর্বদা একই চিন্তার পথটি অনুসরণ করি:

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

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


অলসতাও ডিবাগিংয়ের সাথে আদর্শের চেয়ে কম-কম ইন্টারঅ্যাক্ট করে।
ব্রায়ান

3
যেহেতু আমি দেখতে পেলাম যে আমি যে সমস্ত বাগ অন্যান্য ভাষায় তাড়া করি তা অনেকগুলি রেফারেনশিয়াল স্বচ্ছতার অভাবের সাথে সম্পর্কিত, আমি ডিবাগিং সংক্রান্ত সমস্যাগুলি সম্পর্কে কম চিন্তিত, যদিও সেগুলি মাঝে মধ্যে ব্যথা হতে পারে।
sigfpe

6

দুটি জিনিস:

  1. কোনও প্রযুক্তি যত ভাল হোক তা সময় লাগে। এফপির পিছনে ধারণাগুলি প্রায় 70 বছর বয়সী। তবে সফটওয়্যার ইঞ্জিনিয়ারিং এর মূলধারার ব্যবহার (খাদে, শিল্পে) সম্ভবত 10 বছরেরও কম। বিকাশকারীদেরকে জাতিগতভাবে নতুন মানসেটস গ্রহণ করার জন্য অনুরোধ করা সম্ভব তবে কেবল সময় লাগে (বহু, বহু বছর)। উদাহরণস্বরূপ, 1980 এর দশকের গোড়ার দিকে ওওপি সত্যই মূলধারার ব্যবহার পেয়েছিল। তবে ১৯৯০ এর দশকের শেষভাগ পর্যন্ত এটি সুপ্তি লাভ করতে পারেনি।
  2. আপনার প্রযুক্তির বড় শক্তিকে আঘাত করার আগে লোকেরা বাধ্য হতে হবে । বর্তমানে লোকেরা এমন সরঞ্জাম ব্যবহার করছে যা সমান্তরালতার ব্যবহার করে না এবং জিনিসগুলি ঠিকঠাক কাজ করে। সমান্তরালতা ব্যবহার করে না এমন অ্যাপ্লিকেশনগুলি যখন অসহনীয়ভাবে ধীর হয়ে যায়; তাহলে বহু লোক সমান্তরালতা-সরঞ্জামগুলি ব্যবহার করতে বাধ্য হবে এবং এফপি জনপ্রিয়তায় জনপ্রিয় হতে পারে। এটি এফপির অন্যান্য শক্তিগুলির ক্ষেত্রেও প্রযোজ্য হতে পারে।

3
কোড পুনঃব্যবহারে এফপি খুব ভাল। সম্ভবতঃ ওও। আমাকে বেশ কয়েকবার কাজের সাথে এটি মোকাবেলা করতে হয়েছিল, বিভিন্ন ধরণের এবং নতুন সিস্টেমে স্থানান্তরিত করতে হয়েছিল এবং এটি ব্যথামুক্ত ছিল।
nlucaroni

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