কীভাবে কার্যকরী প্রোগ্রামিং সমর্থকরা কোডটি সম্পূর্ণ এই বিবৃতিটির উত্তর দেবেন?


30

দ্বিতীয় সংস্করণের 839 পৃষ্ঠায়, স্টিভ ম্যাককনেল বড় প্রোগ্রামগুলিতে প্রোগ্রামাররা "জটিলতা" জয় করতে পারে এমন সমস্ত উপায় নিয়ে আলোচনা করছেন। তাঁর টিপস এই বিবৃতি দিয়ে সমাপ্ত:

"অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এমন এক বিমূর্ততা সরবরাহ করে যা একই সাথে অ্যালগরিদম এবং ডেটার ক্ষেত্রে প্রযোজ্য, একজাতীয় বিমূর্ততা যা কেবলমাত্র কার্যকরী ক্ষয় সরবরাহ করে না"।

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

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

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

সম্পাদনা

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

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


3
প্রশ্ন সত্ত্বেও +1 প্রশ্নটি বরং বৈরীভাবে তৈরি করা হয়েছে, এটি একটি ভাল প্রশ্ন।
mattnz

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

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

6
@ এসকে-যুক্তিযুক্ত সমস্ত ম্যাককনেল বলেছিলেন যে "একা ক্রিয়ামূলক ক্ষয়" ওওপির মতো বিমূর্ততার একই উপায় সরবরাহ করে না, যা আমার কাছে বেশ নিরাপদ বক্তব্য বলে মনে হয়। তিনি কোথাও বলেন নি যে এফপি ভাষাগুলির বিমূর্ততার উপায় ওওপির মতো শক্তিশালী নয়। আসলে সে এফপি ভাষার কথা মোটেই উল্লেখ করে না। এটি কেবল ওপি'র ব্যাখ্যা।
sepp2k

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

উত্তর:


13

মনে রাখবেন বইটি 20 বছরেরও বেশি সময় ধরে লেখা হয়েছিল। তখনকার পেশাদার প্রোগ্রামারদের কাছে এফপির উপস্থিতি ছিল না - এটি পুরোপুরি একাডেমিকস এবং গবেষকদের ক্ষেত্রে ছিল।

কাজের যথাযথ প্রসঙ্গে আমাদের "ক্রিয়ামূলক পচন" ফ্রেম করা দরকার। লেখক ফাংশনাল প্রোগ্রামিংয়ের কথা উল্লেখ করছেন না। আমাদের এটি আবার "কাঠামোগত প্রোগ্রামিং" এবং এর GOTOপূর্বে যে ভরাট জগাখিচির সাথে আবদ্ধ করা দরকার তা আবদ্ধ করতে হবে। যদি আপনার রেফারেন্সের পয়েন্টটি কোনও পুরানো ফরটারান / কোবোল / বেসিক থাকে তবে এতে কোন ফাংশন নেই (সম্ভবত, আপনি যদি ভাগ্যবান হন তবে আপনি একক স্তরের গোসুব পেয়ে যেতেন) এবং আপনার সমস্ত পরিবর্তনগুলি বিশ্বব্যাপী, আপনার প্রোগ্রামটি ভেঙে ফেলতে সক্ষম হয়ে ফাংশন স্তর মধ্যে একটি বড় वरदान।

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


27

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

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


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

4
দুঃখিত, কিন্তু "পদ্ধতিগত প্রোগ্রামিং" শব্দগুচ্ছ জেদীভাবে মাথায় আসতে অস্বীকার করেছিল। আমার কাছে "কার্যকরী ক্ষয়" ক্রিয়ামূলক প্রোগ্রামিংয়ের চেয়ে পদ্ধতিগত প্রোগ্রামিংয়ের অনেক বেশি সূচক।
বাইনারি ওয়ারিয়র

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


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

7

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

উদাহরণস্বরূপ, আমি সম্প্রতি ক্লোজুরে একটি গেম লিখেছি এবং গেমের পুরো অবস্থাটি একক অবিচ্ছেদ্য ডেটা কাঠামোয় সংজ্ঞায়িত হয়েছিল:

(def starting-game-state {:map ....
                          :player ....
                          :weather ....
                          :other-stuff ....}

এবং প্রধান গেম লুপটি লুপে গেমের রাজ্যে কিছু খাঁটি ফাংশন প্রয়োগ হিসাবে সংজ্ঞায়িত করা যেতে পারে:

 (loop [initial-state starting-game-state]
   (let [user-input (get-user-input)
         game-state (update-game initial-state user-input)]
     (draw-screen game-state)
     (if-not (game-ended? game-state) (recur game-state))))

বলা হয় মূল ফাংশন update-game , যা পূর্ববর্তী গেমের অবস্থা এবং কিছু ব্যবহারকারীর ইনপুট দেওয়া সিমুলেশন ধাপ চালায় এবং নতুন গেমের স্থিতি ফেরত দেয়।

তাহলে জটিলতা কোথায়? আমার দৃষ্টিতে এটি বেশ ভালভাবে পরিচালিত হয়েছে:

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

ওওপি এনক্যাপসুলেশনের মাধ্যমেও জটিলতা পরিচালনা করতে পারে, তবে আপনি যদি এটি ওওপির সাথে তুলনা করেন তবে কার্যকরী কিছু বড় সুবিধা নিয়ে আসে:

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

অবশেষে, যারা কার্যক্ষম বনাম ওওপি ভাষাগুলিতে কীভাবে জটিলতা পরিচালনা করবেন সে সম্পর্কে আরও অন্তর্দৃষ্টি সম্পর্কে আগ্রহী, আমি ধনী হিকির মূল বক্তব্য সিম্পল মেড ইজি ( অদ্ভুত লুপ প্রযুক্তি সম্মেলনে চিত্রিত ) ভিডিওটি দৃ strongly়তার সাথে পুনরুদ্ধার করি


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

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

3
@ ম্যাসন হুইলারের: বাস্তবে, মোটামুটি খুব বেশি জিসি ছাড়াই অপরিবর্তনীয় বস্তুগুলির সাথে কার্যত সমান (মিউটেশনের সাথে ভাল) পারফরম্যান্স পাওয়া সম্ভব। ক্লোজুরে কৌশলটি অবিচ্ছিন্ন ডাটা স্ট্রাকচার ব্যবহার করছে : এগুলি প্রোগ্রামার থেকে অপরিবর্তনীয়, তবে প্রকৃতপক্ষে হুডের নিচে পরিবর্তনীয়। দুই ভুবনের সেরা.
জুনাস পুলক্কা

4
@quant_dev আরো কোর ভাল কোর ... তুলনায় সস্তা escapistmagazine.com/news/view/...
deworde

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

3

"অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এমন এক বিমূর্ততা সরবরাহ করে যা একই সাথে অ্যালগরিদম এবং ডেটার ক্ষেত্রে প্রযোজ্য, একজাতীয় বিমূর্ততা যা কেবলমাত্র কার্যকরী ক্ষয় সরবরাহ করে না"।

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

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


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

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

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

2

প্রোগ্রামিং এবং সফ্টওয়্যার / সিস্টেম ডিজাইনের সাথে সম্পর্কিত বেশিরভাগ জটিলতা এবং সমস্যার মূল কারণ হ'ল মিউটেবল স্টেট।

ওও পরিবর্তনীয় স্থিতি গ্রহণ করে। এফপি পারস্পরিক পরিবর্তনকে ঘৃণা করে।

ওও এবং এফপি উভয়েরই ব্যবহার এবং মিষ্টি দাগ রয়েছে। বিচক্ষনতার সঙ্গে বেছে নাও. এবং উক্তিটি মনে রাখবেন: "বন্ধনগুলি দরিদ্র ব্যক্তির জিনিস Ob


3
আমি নিশ্চিত না যে আপনার উদ্বোধনের দৃ true় সত্য। জটিলতার মূল "সবচেয়ে"? আমি যে প্রোগ্রামিং করেছি বা দেখেছি তাতে কোডটি অ্যাবস্ট্রাকশনের অভাব এবং কোডের মাধ্যমে বিশদরূপে অতিরিক্ত পরিমাণের হিসাবে সমস্যা এতটা পরিবর্তনীয় অবস্থা নয়।
ডান

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

1

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

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

String x = "abc";
StringBuffer y = new StringBuffer(x);
y.reverse();
x.reverse();
x.toString().equals(y.toString());

শেষ লাইনটি কী মূল্যায়ন করে? আপনার স্ট্রিং ক্লাস সম্পর্কে বিশেষ জ্ঞান প্রয়োজন যা এটি মিথ্যা হিসাবে মূল্যায়ন করবে।

আমি যদি আমার নিজের ক্লাস WuHoString তৈরি করি তবে কী হবে

String x = "abc";
WuHoString y = new WuHoString(x);
y.reverse();
x.reverse();
x.toString().equals(y.toString())

শেষ লাইনটি কী মূল্যায়ন করে তা জানা অসম্ভব।

ফাংশনাল প্রোগ্রামিং স্টাইলে এটি আরও নীচে লেখা হবে:

String x;
equals(toString(reverse(x)), toString(reverse(WuHoString(x))))

এবং এটি সত্য হওয়া উচিত।

যদি সর্বাধিক প্রাথমিক ক্লাসগুলির মধ্যে একটিতে যদি ফাংশনটি বিতর্ক করা খুব কঠিন হয় তবে এক বিস্ময় প্রকাশ করে যদি পরিবর্তনীয় বস্তুর এই ধারণাটি প্রবর্তন করে জটিলতা বাড়ে বা হ্রাস পেয়েছে।

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


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

@ sepp2k: এটিতে অভ্যস্ত হন। এফপি অ্যাডভোকেটরা সর্বদা উদ্ভট, অনুগ্রহযুক্ত উদাহরণগুলির চারপাশে ছুঁড়ে মারছেন যা বাস্তব-বিশ্বের কোডিংয়ের সাথে কোনও সম্পর্ক নেই। বল প্রয়োগযোগ্য অপ্রচলতার মতো মূল এফপি ধারণাটি তৈরি করার একমাত্র উপায় এটি look
ম্যাসন হুইলারের

1
@ ম্যাসন: হাহ? "জাভা (এবং সি #, পাইথন ইত্যাদি) অপরিবর্তনীয় স্ট্রিংগুলি ব্যবহার করে এবং এটি দুর্দান্ত কাজ করে" বলে অপরিবর্তনযোগ্যতা দেখাবার সর্বোত্তম উপায়টি কি না?
sepp2k

1
@ sepp2k: যদি অপরিবর্তনীয় স্ট্রিংগুলি এত দুর্দান্ত কাজ করে তবে স্ট্রিংবিল্ডার / স্ট্রিংবাফার শৈলীর ক্লাসগুলি কেন সমস্তরকম প্রদর্শিত হচ্ছে? এটি কোনও বিমূর্ত বিপরীতে আপনার পথে চলে আসার আরও একটি উদাহরণ।
ম্যাসন হুইলারের

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

0

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


0

উত্তরটি ভাষার উপর নির্ভর করে। লিস্পস, উদাহরণস্বরূপ, কোডটি ডেটা হ'ল সত্যই ঝরঝরে you আপনি যে অ্যালগরিদমগুলি লিখেছেন তা আসলে লিস্পের তালিকা! আপনি প্রোগ্রামটি লেখার একইভাবে ডেটা সঞ্চয় করেন store এই বিমূর্তনটি ওওপির চেয়ে একসাথে সহজ এবং আরও পুঙ্খানুপুঙ্খ এবং আপনাকে কিছু সত্যি ঝরঝরে জিনিস করতে দেয় (ম্যাক্রোগুলি পরীক্ষা করে দেখুন)।

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

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

data TPLValue = Null
              | Number Integer
              | String String
              | List [TPLValue]
              | Function [TPLValue] TPLValue
              -- There's more in the real code...

এই বলে - একটি খুব ভিজুয়াল পদ্ধতিতে - যে একটি TPLValue (আমার ভাষায় কোনো মান) একটি হতে পারে Nullঅথবা একটি Numberএকটি সঙ্গে Integerমান বা এমনকি একটি Functionমান (পরামিতি) একটি তালিকা এবং একটি চূড়ান্ত মান (শরীর )।

পরবর্তী আমি কিছু সাধারণ আচরণ এনকোড করতে টাইপ ক্লাস ব্যবহার করতে পারি। উদাহরণস্বরূপ, আমি তৈরি করতে পারলাম TPLValueএবং উদাহরণস্বরূপ Showএটি একটি স্ট্রিংয়ে রূপান্তরিত হতে পারে।

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

অবশেষে, আমার প্রোগ্রামের মূল যুক্তিটি বিভিন্ন ধরণের মত evalএবং এর মধ্যে রয়েছে apply। এগুলি প্রকৃতই মূল - তারা TPLValueগুলি নেয় এবং এগুলিকে আরও বেশি করে তোলে TPLValue, পাশাপাশি রাষ্ট্র এবং ত্রুটিগুলি পরিচালনা করে।

সামগ্রিকভাবে, আমি আমার হাস্কেল কোডটিতে যে বিমূর্ততাগুলি ব্যবহার করছি তা আমি ওওপি ভাষায় যা ব্যবহার করতাম তার চেয়ে বেশি শক্তিশালী।


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

evalলিস্পের কাঠামোর উপর খুব বেশি নির্ভর করে না - আপনি evalজাভাস্ক্রিপ্ট এবং পাইথনের মতো ভাষায় থাকতে পারেন। আসল শক্তি ম্যাক্রো লেখার ক্ষেত্রে আসে যা মূলত এমন প্রোগ্রাম যা ডেটা এবং আউটপুট অন্যান্য প্রোগ্রামের মতো প্রোগ্রামগুলিতে কাজ করে। এটি ভাষাটিকে খুব নমনীয় করে তোলে এবং শক্তিশালী বিমূর্ততা তৈরি করা সহজ করে তোলে।
টিখন জেলভিস

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

1
@MasonWheeler শর্ট-সার্কিট and। শর্ট সার্কিট orletlet-recconddefn। এগুলির কোনওটি প্রয়োগমূলক অর্ডার ভাষায় ফাংশন সহ প্রয়োগ করা যায় না। for(তালিকা উপলব্ধি)। dotimesdoto

1
@ ম্যাটফেনউইক: ঠিক আছে, আমার আমার উপরের দুটিটিতে একটি তৃতীয় পয়েন্ট যুক্ত করা উচিত: 3) কোনও বুদ্ধিমান প্রোগ্রামিং ভাষার ইতিমধ্যে অন্তর্নির্মিত নয় কারণ এটিই কেবলমাত্র কার্যকর ম্যাক্রোর উদাহরণ যা আমি দেখি এবং আপনি যখন বলেন "আরে আমার দিকে তাকাও, তখন আমার ভাষাটি এতটাই নমনীয় যে আমি নিজের শর্ট সার্কিটটি প্রয়োগ করতে পারি and!" আমি শুনছি, "ওহে আমার দিকে তাকাও, আমার ভাষা এতটাই পঙ্গু হয়ে গেছে যে এটি এমনকি একটি সংক্ষিপ্ত-সার্কিটও আসে না andএবং আমাকে সমস্ত কিছুর জন্য চাকা পুনরায় উদ্ভাবন করতে হয় !"
ম্যাসন হুইলারের

0

উদ্ধৃত বাক্যটির আর কোনও বৈধতা নেই, যতদূর আমি দেখতে পাচ্ছি।

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

সুতরাং, হাস্কেলসের মতো এই প্রাথমিক কাজ function

fmap :: Functor f => (a -> b) -> f a -> f b 

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

  1. তালিকার উপাদানগুলিতে একটি সাধারণ ফাংশন প্রয়োগ করার পদ্ধতি
  2. অ্যারের উপাদানগুলিতে একই সাধারণ ফাংশনটি প্রয়োগ করার একটি পদ্ধতি
  3. হ্যাশের মানগুলিতে একই সাধারণ ফাংশনটি প্রয়োগ করার একটি পদ্ধতি,
  4. .... সেট
  5. .... গাছ
  6. ... 10. একই জন্য ইউনিট পরীক্ষা

এবং এখনও, এই পাঁচটি পদ্ধতি মূলত একই কোড, কিছু দিন বা নিন। বিপরীতে, হাস্কেল-এ আমার দরকার:

  1. তালিকা, অ্যারে, মানচিত্র, সেট এবং গাছের জন্য একটি ফান্টর উদাহরণ (বেশিরভাগই পূর্বনির্ধারিত, বা সংকলক দ্বারা স্বয়ংক্রিয়ভাবে উত্পন্ন করা যেতে পারে)
  2. সহজ ফাংশন

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

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

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


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

-2

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

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

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


2
প্রোগ্রামারদের স্বাগতম। দয়া করে আপনার উত্তরে বক্তৃতাটি টোন করা এবং বাহ্যিক রেফারেন্স সহ আপনার কিছু দাবিকে সমর্থন করা বিবেচনা করুন।

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