সংকলন সাফল্য এবং সঠিকতার মধ্যে ক্রিয়ামূলক প্রোগ্রামগুলির মধ্যে একটি সম্পর্ক রয়েছে কেন?


12

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

আমি কেন এই ঘটনাটি নিয়ে আঙুল দেওয়ার চেষ্টা করেছি কিন্তু আমি সফল হই নি।

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

কার্যকরী প্রোগ্রামিংয়ে সংকলন সাফল্য এবং প্রোগ্রামের যথার্থতার মধ্যে পারস্পরিক সম্পর্কের অন্তর্নিহিত বিমূর্ত কারণের বিষয়ে কেউ কি ভেবেছেন এবং তার সাথে যুক্ত হয়েছেন?


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

1
@ ডেলানান আমি এটি বলব না যে লিস্প একটি কার্যকরী প্রোগ্রামিং ভাষা, যদিও এটি কার্যকরী প্রোগ্রামিং কোড লেখার জন্য ব্যবহার করা যেতে পারে। ক্লোজার যা লিস্পের উপভাষা একটি কার্যকরী প্রোগ্রামিং ভাষা
সাকিস্ক

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

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

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

উত্তর:


12

আমি এই উত্তরটি এমন একজন হিসাবে লিখতে পারি যে জিনিসকে অনেক প্রমাণ করে, তাই আমার কাছে নির্ভুলতা কেবল যা কাজ করে তা নয়, যা কার্যকর এবং প্রমাণ করা সহজ is

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

তবে, যেহেতু আমরা পাইপারটি অগ্রিম প্রদান করেছি, তাই আমাদের মোকাবেলা করার জন্য অনেক কম আছে এবং কীভাবে সমস্যাগুলি ভুল হতে পারে তার জন্য আমাদের কাছে অনেক কম বিকল্প রয়েছে। যদি আপনার 1984 এর অনুরাগী, স্বাধীনতা আসলে দাসত্ব! একটি প্রোগ্রামের জন্য 101 টি বিভিন্ন ঝরঝরে কৌশল ব্যবহার করে, আমাদের বিষয়গুলির বিষয়ে যুক্তি জানাতে হবে যেমন এই 101 টির মধ্যে কোনওটি ঘটতে পারে! দেখা যাচ্ছে এটি করা সত্যিই কঠিন :)

যদি আপনি তরোয়ালটির পরিবর্তে সুরক্ষা কাঁচি দিয়ে শুরু করেন তবে দৌড়াদৌড়ি মাঝারি থেকে কম বিপজ্জনক।

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

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


1
আমি আপনার উত্তরটি পছন্দ করি তবে আমি দেখতে পাচ্ছি না কীভাবে এটি ওপি

1
@ ফিফ আমার উত্তরটি প্রসারিত করেছেন। টিএলডিআর: প্রত্যেকেই গণিতবিদ।
ড্যানিয়েল গ্রেটজার

"একটি প্রোগ্রামের জন্য ১০১ টি বিভিন্ন ঝরঝরে কৌশল ব্যবহার করে আমাদের বিষয়গুলির বিষয়ে যুক্তি প্রকাশ করতে হবে যেমন এই ১০১ টি জিনিসের যে কোনওটি ঘটতে পারে!": আমি কোথাও পড়েছি যে আপনাকে মিউটেশন সহ প্রোগ্রাম করার জন্য প্রতিভা হতে হবে, কারণ আপনাকে এটি চালিয়ে যেতে হবে আপনার মাথায় অনেক তথ্য।
জর্জিও

12

ক্রিয়ামূলক প্রোগ্রামিংয়ে সংকলন সাফল্য এবং প্রোগ্রামের যথার্থতার মধ্যে সম্পর্কের অন্তর্নিহিত বিমূর্ত কারণ?

পরিবর্তনীয় অবস্থা।

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

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

আপনি যদি ফাংশনাল প্রোগ্রামিং ভাল করে থাকেন তবে কোনও (বা খুব অল্প) মিউটেবল স্টেট নেই।

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

এটি সম্ভবত আমার অভিজ্ঞতার মধ্যে উভয়ের মিশ্রণ।


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

7

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

for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
    String string = iterator.next();
    if (string.isEmpty()) {
        iterator.remove();
    }
}

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

এই জেনেরিকটি তৈরি করা মারাত্মকভাবে কঠিন নয়, সুতরাং এটি কেবল সংগ্রহের চেয়ে বেশি কাজ করবে Strings, তবে প্রথম শ্রেণির ফাংশন ব্যতীত আপনি প্রাকটিকটি (অভ্যন্তরের শর্তটি if) প্রতিস্থাপন করতে পারবেন না , সুতরাং এই কোডটি অনুলিপি করা এবং আটকানো হবে s এবং সামান্য পরিবর্তিত।

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

list filter (!_.isEmpty)

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

  • listfilterপদ্ধতিটি যেমন কোনও সংকলনকে সমর্থন করে এমন কোনও ধরণের হতে হবে ।
  • উপাদানগুলির listঅবশ্যই একটি isEmptyপদ্ধতি থাকতে হবে যা বুলিয়ান দেয়।
  • আউটপুট একই ধরণের উপাদানগুলির সাথে একটি (সম্ভাব্য) ছোট সংগ্রহ হবে।

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

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

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


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

2

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

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

যাইহোক, প্রতি সেঞ্চামে ক্রিয়ামূলক প্রোগ্রামিং অন্যান্য উপায়ে সহায়তা করতে পারে, যেমন ভাগ করা ডেটা এবং পরিবর্তনীয় স্থিতি এড়ানো।

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


এই. সফল সংকলন দ্বারা কোনও প্রোগ্রামের যথার্থতা বিচার করা যায় না। যদি কোনও সংকলক প্রোগ্রামটির নির্দিষ্টকরণে অবদান রাখে এমন প্রতিটি ব্যক্তির প্রায়শই দ্বন্দ্বপূর্ণ এবং ভুল তথ্য বুঝতে পারে তবে সফল সংকলনটি যথার্থতা হিসাবে বিবেচিত হতে পারে। তবে সেই পৌরাণিক সংকলকের কোনও প্রোগ্রামার লাগবে না! অপরিহার্য কর্মসূচি विरूद्ध কার্যকারিতা সংকলন এবং নির্ভুলতার মধ্যে কিছুটা উচ্চতর সামগ্রিক সম্পর্ক থাকতে পারে , তবে এটি মোট সঠিকতার রায়টির এত ছোট একটি অংশ যা আমি মনে করি এটি মূলত অপ্রাসঙ্গিক
জর্ডান রিগার

2

পরিচালকদের জন্য ব্যাখ্যা:

একটি কার্যকরী প্রোগ্রামটি একটি বৃহত মেশিনের মতো যেখানে সমস্ত কিছু সংযুক্ত থাকে, টিউবগুলি, কেবলগুলি। [একটি গাড়ী]

প্রক্রিয়াজাতকরণ প্রোগ্রামটি এমন একটি বিল্ডিংয়ের মতো যা একটি ছোট মেশিনযুক্ত কক্ষযুক্ত ঘর, আংশিক পণ্যগুলিতে বিনে সংরক্ষণ করে, অন্য কোথাও থেকে আংশিক পণ্য গ্রহণ করে। [একটি কারখানা]

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


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

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


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

@ ব্রেন্ডন গাড়ি ও কারখানা এ জাতীয় খারাপ উপমা তৈরি করে না। এটি কার্যকরী ভাষায় (ছোট স্কেল) প্রোগ্রামগুলি কেন কাজ করার সম্ভাবনা বেশি এবং "কারখানার" তুলনায় কম ত্রুটিযুক্ত বলে ব্যাখ্যা করার চেষ্টা করে। তবে ওওপি বলে উদ্ধারের জন্য আসে যে একটি কারখানা বিভিন্ন জিনিস তৈরি করতে পারে এবং এটি আরও বড়। আপনার তুলনা উপযুক্ত; এফপি কতবার শুনে তা সমান্তরাল করে তুলতে পারে এবং কার্যকরভাবে কার্যকর করতে পারে (কোনও পাং নেই) ধীর ফলাফল দেয়। আমি এখনও এফপি ধরে।
জোপ এগজেন

স্কেল কার্যকরী প্রোগ্রামিং একটি এন.ইউইকিপিডিয়া.আর / উইকি / সেফেরিকাল_কো জন্য স্থানীয়ভাবে রাখে।
ডেন

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