আধুনিক মূলধারার প্রোগ্রামিং ভাষাগুলিতে ল্যাম্বডা ফাংশনগুলির জনপ্রিয়তা কিসের কারণ হয়েছিল?


112

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

তবুও, অজ্ঞাতনামা ফাংশনগুলি গণিত এবং কম্পিউটার বিজ্ঞানের একটি খুব পুরানো এবং খুব পরিচিত ধারণা (১৯৩36 সালের দিকে গণিতবিদ অ্যালোনজো চার্চ দ্বারা উদ্ভাবিত এবং ১৯৫৮ সাল থেকে লিস্প প্রোগ্রামিং ভাষা ব্যবহার করে, যেমন এখানে দেখুন )।

তাহলে কেন আজকের মূলধারার প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি (যার মধ্যে অনেকগুলি 15 থেকে 20 বছর আগে উদ্ভূত হয়েছিল) লাম্বদা ফাংশনগুলিকে প্রথম থেকেই সমর্থন করে না এবং কেবল পরে তাদের পরিচয় করিয়ে দেয়?

এবং গত কয়েক বছরে বেনাম ফাংশনগুলির ব্যাপক গ্রহণের কারণ কী? এমন কিছু নির্দিষ্ট ঘটনা, নতুন প্রয়োজনীয়তা বা প্রোগ্রামিং কৌশল রয়েছে যা এই ঘটনাটি শুরু করেছিল?

গুরুত্বপূর্ণ তথ্য

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

"কার্যকরী দৃষ্টান্ত গ্রহণ এবং এর সুবিধাগুলি" সম্পর্কে কথা বলার মাধ্যমে দয়া করে আপনার উত্তরগুলিকে অতিমাত্রায়িত করবেন না, কারণ এটি প্রশ্নের মূল বিষয় নয়।


7
15-20 বছর আগে লোকেরা ওও সম্পর্কে একই প্রশ্ন জিজ্ঞাসা করেছিল ... এটি কোনও নতুন ধারণা ছিল না তবে এটির জনপ্রিয়তার বিস্ফোরণ ছিল।
ম্যাটড্যাভি

7
@ ম্যাটড্যাভি অবশ্যই নিশ্চয়ই একমত নন, তবে তারপরে আমাকে তাদের মনে করিয়ে দিতে হবে যে "বেশিরভাগ স্মলটালক বিকাশকারী" আসলে এত লোক নয়; পি
ইয়ানিস

30
আমি মনে করি আরও আকর্ষণীয় প্রশ্ন তাদের মৃত্যুর কারণ ঘটল ! সব পরে,, একটা সময় ছিল যখন অধিকাংশ আধুনিক ভাষা করেনি lambdas, have তারপর জাভা এবং সি ++ মত ভাষার জনপ্রিয় হয়ে ওঠে। (যদিও আমি জাভাকে একেবারে "আধুনিক" ভাষা বলব না। জাভার সবচেয়ে আধুনিক ধারণাটি জেনেরিক্স, যা 60 এর দশকের শেষের / 70 এর দশকের শেষের দিকের। এমনকি জাভা যে বৈশিষ্ট্যগুলির সংমিশ্রণ , পয়েন্টার সুরক্ষা, মেমরি সুরক্ষা, টাইপ সুরক্ষা, জিসি, স্ট্যাটিকালি টাইপড ওও, জেনেরিকস সবই ১৯৮৫ সালে আইফেলে বিদ্যমান ছিল ... এবং আরও ভাল, আইএমএইচও।)
জার্গ ডব্লু মিটাগ

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

8
"একটি ক্ষুদ্র বিট" এর অর্থ প্রায়শই 50% ফাংশন, 50% গোলমাল।
কেভিন

উত্তর:


86

কার্যকরী প্রোগ্রামিং বা এটির কমপক্ষে কিছু দিকগুলির দিকে অবশ্যই একটি লক্ষণীয় প্রবণতা রয়েছে। কয়েকটি জনপ্রিয় ভাষাগুলি যে কোনও সময় বেনাম ফাংশন গ্রহণ করেছে সেগুলি হ'ল সি ++ ( সি ++ 11 ), পিএইচপি ( পিএইচপি 5.3.0 ), সি # ( সি # ভি 2.0 ), দেলফি (২০০৯ সাল থেকে), জাভা যখন সি ( ব্লক ) 8 ভাষাতে ল্যাম্বডাসের জন্য সমর্থন আনবে । এবং এমন জনপ্রিয় ভাষা রয়েছে যা সাধারণত ফাংশনাল হিসাবে বিবেচিত হয় না তবে শুরু থেকেই অজ্ঞাতনামা ফাংশনগুলি সমর্থন করে বা কমপক্ষে শুরুর দিকে, জাভাস্ক্রিপ্টের উজ্জ্বল উদাহরণ।

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

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

আমি মনে করি আরও একক গুরুত্বপূর্ণ ইভেন্টটি হ'ল শিল্পে ক্রিয়ামূলক প্রোগ্রামিং গ্রহণ। কেন এটি হয়ে ওঠেনি সে সম্পর্কে আমার একেবারেই ধারণা নেই, তবে আমার কাছে মনে হয় যে 90 এর দশকের গোড়ার দিকে এবং 90 এর দশকের মাঝামাঝি সময়ে কার্যনির্বাহী প্রোগ্রামিং এর শিল্পটির জায়গা খুঁজে পেতে শুরু করেছিল, সম্ভবত (সম্ভবত) এর্ল্যাংয়ের বিস্তার থেকে শুরু হয়েছিল টেলিযোগাযোগ এবং মহাকাশ এবং হার্ডওয়্যার নকশা Haskell, এর গ্রহণ

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

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

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

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

সম্পর্কিত প্রশ্নাবলী:

আরও পড়া:


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


2
@ ইয়ান্নিসরিজস: পার্লের প্রথম প্রকাশের পর থেকে (১৯৯৪) বেনামে ফাংশন ছিল, তবে তারা 5.004 (1997) অবধি পুরোপুরি "সঠিক" ছিল না।
blrfl

1
: @penartur এটা কি আমিও ভাবলাম, কিন্তু একটি বন্ধুত্বপূর্ণ সম্পাদক আমাকে এখানে প্রতি নির্দেশ করে সংশোধন এর msdn.microsoft.com/en-us/library/0yw3tz5k%28v=vs.80%29.aspx
yannis

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

32

আমি মনে করি এটি আকর্ষণীয় মনে করে যে কার্যকরী প্রোগ্রামিংয়ের জনপ্রিয়তা জাভাস্ক্রিপ্টের বৃদ্ধি এবং প্রসারকে সামঞ্জস্য করেছে। জাভাস্ক্রিপ্টে ক্রিয়ামূলক প্রোগ্রামিং স্পেকট্রামের সাথে প্রচুর র‌্যাডিক্যাল বৈশিষ্ট্য রয়েছে যা এটি তৈরির সময় (1995) মূলধারার প্রোগ্রামিং ভাষার (সি ++ / জাভা) মধ্যে খুব বেশি জনপ্রিয় ছিল না। এটি একমাত্র ক্লায়েন্ট-সাইড ওয়েব প্রোগ্রামিং ভাষা হিসাবে হঠাৎ মূল স্রোতে ইনজেকশন করা হয়েছিল। হঠাৎ করে অনেক প্রোগ্রামারকে জাভাস্ক্রিপ্টটি সহজেই জানতে হবে এবং তাই আপনাকে কার্যকরী প্রোগ্রামিং ভাষার বৈশিষ্ট্যগুলির কিছু জানতে হবে।

আমি ভাবছি যে জাভাস্ক্রিপ্টের আকস্মিক উত্থানের জন্য না থাকলে কার্যকরী ভাষা / বৈশিষ্ট্যগুলি কতটা জনপ্রিয় হত।


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

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

1
সাধারণভাবে গতিশীল ভাষার জনপ্রিয়তা হাস্কেলের জনপ্রিয়তার এক ব্যাখ্যা হিসাবে ইঙ্গিত দেওয়া হয়েছে: book.realworldhaskell.org/read/…
ইয়ানিস

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

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

27

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

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

একবার আপনি এটিতে স্বাচ্ছন্দ্য বজায় রাখার পরে, আপনি এটি প্রতিটি ভাষাতে ব্যবহার করতে চান।


7
+1 এটি কেবল বেনাম ফাংশন সম্পর্কে নয়। বন্ধ কেবল একটি অস্থায়ী ফাংশন ইনলাইন সংজ্ঞায়িত করার চেয়ে অনেক বিস্তৃত ধারণা।
phkahler

@ ফকাহেলার: আপনি ঠিক বলেছেন এবং এই অর্থে জাভাটির ইতিমধ্যে ক্লোজার রয়েছে (এবং আপনি কোনও ফাংশন আক্ষরিকের সাথে যা পেয়েছেন তার চেয়ে আরও শক্তিশালী) তবে এটি এক-পদ্ধতি বেনাম শ্রেণীর সাধারণ ক্ষেত্রে সংক্ষিপ্ত স্বরলিপি নেই।
জর্জিও 21

17

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

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

তবে ব্লক সিনট্যাক্স এবং এটি .each, .map, .reduce এবং এর সাথে একত্রে সংহত করার ফলে একটি বেনামে ফাংশনের ধারণাটিকে সত্যই জনপ্রিয় করে তুলেছে এমনকি যদি এটি সত্যিই কোনও সিনট্যাকটিক গঠন যা কোনও কর্টিনের মতো আচরণ করে। এবং এর মাধ্যমে কোনও প্রোকে সহজে রূপান্তরকরণ এবং এটি কার্যকরী প্রোগ্রামিংয়ের গেটওয়ে ড্রাগ হিসাবে তৈরি করে।

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

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


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

2
আমি সত্যিই মনে করি সাম্প্রতিক বছরগুলিতে বেশিরভাগ ভাষাগুলি ব্লক সিনট্যাক্স প্রয়োগ করেছে। তবে এটি নিশ্চিত করার একমাত্র উপায় হ'ল তিনি ভাষা বিকাশকারীদের তাদের উদ্দেশ্যগুলি কী তা জিজ্ঞাসা করা। আমরা কেবল ইমো অনুমান করতে পারি।
SpoBo

আমার জন্যে, রুবি ভাষা যে প্রথম ব্লক তৈরি শিলা ও খুব মর্মস্পর্শী, তাই +1 টি। হাস্কেলেরও প্রভাব থাকতে পারে।
রজারডপ্যাক

13

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

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

জর্জিও নোট হিসাবে, কেবলমাত্র উচ্চ-আদেশ ক্রিয়াকলাপ ছাড়া কার্যকরী প্রোগ্রামিংয়ের আরও অনেক কিছু আছে। ফাংশন, প্লাস একটি মানচিত্র / ফিল্টার / প্রোগ্রামিং প্যাটার্ন হ্রাস এবং অপরিবর্তনীয়তা কার্যকরী প্রোগ্রামিংয়ের মূল বিষয়। এই জিনিসগুলি একসাথে সমান্তরাল এবং সমবর্তী প্রোগ্রামিংয়ের শক্তিশালী সরঞ্জামগুলির জন্য তৈরি করে। ধন্যবাদ, অনেক ভাষা ইতিমধ্যে অপরিবর্তনীয়তার কিছু ধারণা সমর্থন করে এবং এমনকি যদি তা না করে তবে প্রোগ্রামাররা লাইব্রেরিগুলিকে এবং সংকলককে অ্যাসিঙ্ক্রোনাস বা সমান্তরাল ক্রিয়াকলাপ তৈরি এবং পরিচালনা করতে মঞ্জুরি দেয় এমন জিনিসকে পরিবর্তন হিসাবে বিবেচনা করতে পারে 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 কোরের সুস্পষ্ট ব্যবস্থাপনা ব্যতীত আপনার সিস্টেমের সমস্ত কোরকে সম্পূর্ণ ব্যবহার করে।


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

আপনি ঠিক বলেছেন, আমি যথেষ্ট যত্ন সহকারে দেখিনি। আমি আমার মন্তব্য সম্পাদনা করেছি।
বেন

ওহ, আপনাকে আসলে এটি করতে হবে না, আমি অভিযোগ করছিলাম না;)
ইয়ানিস

4
আপনি উপরে বর্ণিত কোনওটিরও ল্যাম্বডাসের প্রয়োজন নেই। একই কার্যকারিতা যেমন নামকৃত ফাংশনগুলির সাথে সহজেই অর্জন করা যায়। এখানে আপনি কেবল causeএবং এর perceived affectব্যাখ্যা না করেই একটি এবং একটি ডকুমেন্ট করছেন correlation। সর্বশেষ লাইন আইএমও প্রশ্নটি সম্পর্কে যা হয়; কিন্তু আপনি এটির উত্তর দেন নি। কেন এটি সমবর্তী প্রোগ্রামিংকে সহজতর করে।
মার্টিন ইয়র্ক

@ বেন: আপনার উদাহরণটি উচ্চ-অর্ডার ফাংশনগুলির বিষয়ে উদ্বেগ রাখুন যাতে বেনামি ফাংশন ব্যবহার করার প্রয়োজন হয় না careful আপনার উত্তরে আকর্ষণীয় ধারণা রয়েছে (অন্য প্রশ্নের জন্য) তবে এখনই বিষয় ছাড়ছে off
জর্জিও

9

আমি এখানে অনেক উত্তরের সাথে একমত, তবে মজার বিষয় হ'ল আমি যখন ল্যাম্বডাস সম্পর্কে জানলাম এবং সেগুলিতে ঝাঁপিয়ে পড়লাম তখন অন্যরা যে কারণে উল্লেখ করেছে তার কোনও কারণেই তা ছিল না।

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

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

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


1
খুব ভাল ব্যাখ্যা (+1)। লিস্প প্রোগ্রামাররা 1958 সাল থেকে এগুলি সম্পর্কে অবহিত রয়েছেন; ;-)
জর্জিও

4
@ জর্জিও: অবশ্যই, তবে লিসপ প্রোগ্রামারগুলিকে রিফोर्সড ওপেন / ক্লোজ বন্ধনী কী সহ বিশেষ কীবোর্ডগুলিও কিনতে হয়েছিল :)
DXM

@ ডিএক্সএম: কীবোর্ড নয়, তারা অতিরিক্ত ইনপুট ডিভাইস পান যা বন্ধনী খোলার এবং বন্ধ করার জন্য পিয়ানো
পেডেলগুলির মতো; is-)

@ ডিএক্সএম, ভেরটেক: ইদানীং কিছু স্কিম করছে এবং আমি প্রথম বন্ধনী ঠিক করেছি। কিছু সি ++ কোড অনেক বেশি ক্রিপ্টিক হতে পারে (এবং আমার স্কিমের চেয়ে সি ++ এর সাথে আরও অনেক বেশি অভিজ্ঞতা আছে)। :-)
জর্জিও

9

এখানে সাম্প্রতিক ইতিহাসের সাথে কিছুটা যুক্ত থাকার পরে, আমি বিশ্বাস করি যে একটি কারণ ছিল জাভা এবং .NET এর জেনেরিক সংযোজন। এটি প্রাকৃতিকভাবে ফানক < , > এবং অন্যান্য জোরালোভাবে টাইপ করা গণনা বিমূর্ততা (কার্য < >, অ্যাসিঙ্ক < > ইত্যাদি) বাড়ে to

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

এটি অবশ্যই এমএসআরতে হাস্কেলকে কাজ করতে সহায়তা করে :)

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

ডন সিম

পিএস এফ # 2003 ছিল, 2005 নয় - যদিও আমরা বলব 2005 এর আগে এটি 1.0 এ পৌঁছায় না। আমরা 2001-02-তে একটি হাস্কেল.এনইটি প্রোটোটাইপও করেছি।


স্বাগত! এফ # এর উইকিপিডিয়ায় নিবন্ধে প্রথম স্থিতিশীল প্রকাশের বছর হিসাবে রিপোর্ট করা বছর হিসাবে আমি ২০০৫ এফ # এর জন্য ব্যবহার করেছি। আপনি কি আমাকে 2003 এ পরিবর্তন করতে চান?
ইয়ানিস

4

এটি কোনও গুরুতর উত্তর হিসাবে বোঝানো নয়, তবে প্রশ্নটি আমাকে জেমস আইরির একটি দুর্দান্ত হাস্যকর পোস্টের স্মরণ করিয়ে দিয়েছে - একটি ব্রিফ, অসম্পূর্ণ এবং প্রোগ্রামিং ল্যাঙ্গুয়েজের বেশিরভাগ ভুল ইতিহাস যার মধ্যে নিম্নলিখিত বাক্যটি অন্তর্ভুক্ত রয়েছে:

"জাবা তাদের না থাকার মাধ্যমে তাদের জনপ্রিয় না করা পর্যন্ত লাম্বদাস আপেক্ষিক অস্পষ্টতার জন্য প্রেরণিত হন।"


সুবর্ণ বাক্যাংশ :)
পিস্তছে

4

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

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

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


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

তবে সম্ভবত এটি কেবল গত কয়েক বছরেই স্পষ্ট হয়ে গেছে যে ক্লোজারগুলি আগের চিন্তাভাবনার চেয়ে অনেক বেশি ব্যবহৃত হতে পারে।
জর্জিও

@ জর্জিও: হ্যাঁ, বর্তমানে ব্যবহৃত বেশিরভাগ ধারণাগুলি প্রায় খুব দীর্ঘকাল ধরে ছিল। তবুও সেভাবে ব্যবহৃত হয়নি, তারা এখন ব্যবহৃত হয়।
ভের্টেক

1

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

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


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

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

ভাল বলেছ. পরিবর্তনীয় অবস্থা থেকে দূরে সরে যাওয়া সামঞ্জস্যকে সহজ করে তোলে এবং ক্যাসালগ এবং স্পার্কের মতো প্রযুক্তিগুলি সহজেই কম্পিউটারের ক্লাস্টারে ক্রিয়ামূলক প্রোগ্রামিং বিতরণ করে। কীভাবে এবং কেন তা বিশদর জন্য glennengstrand.info/analytics/distributes/functional/… দেখুন ।
গ্লেন

1

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


1

অজ্ঞাতনামা ফাংশন / ল্যাম্বডাসের অনুরূপ কোনও কিছুর আরেকটি সত্যই প্রাচীন উদাহরণ হ'ল আলগল in০-এ কল-বাই-নাম however তবে নোট করুন যে কল-বাই-নামটি সঠিক ফাংশনগুলি পাস করার চেয়ে পরামিতি হিসাবে ম্যাক্রোগুলি পাস করার কাছাকাছি এবং এটি আরও ভঙ্গুর / শক্ত ফলাফল হিসাবে বুঝতে।


0

এখানে আমার জ্ঞানের সেরাটি রয়েছে।

  • ২০০৫: জাভাস্ক্রিপ্ট সম্প্রতি ল্যাম্বডাস সহ উচ্চ-অর্ডার প্রোগ্রামিং মূলধারায় ফিরিয়ে নিয়েছে। আন্ডারস্কোর.জেএস এবং জ্যাকুরির মতো নির্দিষ্ট লাইব্রেরিতে । এই লাইব্রেরির মধ্যে প্রথমটি হ'ল প্রোটোটাইপ.জেগুলি যা প্রায় এক বছরের মধ্যে জিকুরির পূর্বাভাস দেয়। প্রোটোটাইপটি রুবির এনুমেবল মডিউলের উপর ভিত্তি করে তৈরি করে, যা আমাদের দিকে নিয়ে যায়…
  • 1996: রুবির অগণিত মডিউল খুব স্পষ্টতই স্মলটকের সংগ্রহ কাঠামো থেকে অনুপ্রেরণা নিয়েছিল। যেমনটি অনেক সাক্ষাত্কারে ম্যাটজ উল্লেখ করেছেন, যা আমাদের…
  • 1980: স্মার্টটাক উচ্চতর অর্ডার প্রোগ্রামিং প্রচুর পরিমাণে ব্যবহার করে এবং একটি সংগ্রহের API সরবরাহ করে যা উচ্চতর অর্ডার প্রোগ্রামিংয়ের ভারী ব্যবহার করে (যেমন, জিএনইউ স্মলটকের আইটেবল শ্রেণি )। আইডোম্যাটিক স্মলটালক কোডে আপনি লুপগুলির জন্য কোনও কিছুই পাবেন না তবে কেবলমাত্র উচ্চ-অর্ডার গণনা করেছেন। দুর্ভাগ্যক্রমে যখন জাভা যখন ১৯৯৯ সালে জাভাতে স্মল্টালকের সংগ্রহ কাঠামোটি পোর্ট করা হত তখন উচ্চতর অর্ডারগুলির তালিকাটি বাদ ছিল। এভাবেই পরবর্তী দশ বছরের জন্য মূলধারার বাইরে উচ্চ-অর্ডার প্রোগ্রামিং পর্যায়ক্রমে চলে গিয়েছিল! স্মার্টটাকের অনেক পূর্বপুরুষ রয়েছে, তবে ওপির প্রশ্নের সাথে প্রাসঙ্গিক এলআইএসপি, যা আমাদের দিকে নিয়ে যায় ...
  • 1958: এলআইএসপি স্পষ্টতই এর মূলে উচ্চতর অর্ডার প্রোগ্রামিং রয়েছে।

অ্যামিস অবশ্যই পুরো এমএল বংশধর। এমএল, এসএমএল, ওক্যামেল, হাস্কেল, এফ # এটি
কোনও কিছুর

-1

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

লাম্বদা ফাংশনগুলি সম্প্রতি সম্প্রতি মূলধারায় পরিণত হয়েছে কারণ সম্প্রতি অবধি বেশিরভাগ ভাষা বন্ধের পক্ষে সমর্থন করে না।

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


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

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