কেন বেশিরভাগ আধুনিক প্রোগ্রামিং ভাষায় ডিজাইন দ্বারা চুক্তির জন্য এত সীমিত সমর্থন রয়েছে?


40

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

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

তুলনায় তুলনামূলকভাবে ব্যয়গুলি কম মনে হচ্ছে:

  • অতিরিক্ত আঙুল-টাইপিং। যেহেতু চুক্তিগুলি বানান করতে হয়।
  • চুক্তি লেখার সাথে স্বাচ্ছন্দ্য বজায় রাখতে কিছুটা প্রশিক্ষণ নেয়।

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

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


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

3
@ ড্যান, সত্যই নয়, আমি এটিকে টাইপ সিস্টেমের প্রসার হিসাবে বেশি ভাবি। উদাহরণস্বরূপ একটি ফাংশনটি কেবল একটি পূর্ণসংখ্যার যুক্তি নেয় না, এটি একটি পূর্ণসংখ্যা নেয় যা চুক্তিবদ্ধভাবে শূন্যের চেয়ে বড় হতে বাধ্য
Carson63000000

4
@ ড্যান কোড চুক্তিগুলি আপনাকে প্রয়োজনীয় পরীক্ষার সংখ্যা উল্লেখযোগ্যভাবে হ্রাস করে।
রেই মিয়াসাকা

24
@ ড্যান, আমি বরং বলব যে টিডিডি হ'ল দরিদ্র লোকের চুক্তি, বিপরীতে নয়।
এসকে-যুক্তি

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

উত্তর:


9

যুক্তিযুক্তভাবে তারা কার্যত প্রতিটি প্রোগ্রামিং ভাষায় সমর্থিত।

আপনার যা প্রয়োজন তা হল "দৃser়তা"।

এগুলি সহজেই "যদি" বিবৃতি হিসাবে কোড করা হয়:

if (!assertion) then AssertionFailure();

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

সুতরাং আমি যুক্তি দিয়েছি যে তারা বিস্তৃত নয় কারণ প্রোগ্রামাররা তাদের কোড করতে খুব অলস, আপনি এটি করতে পারবেন না বলে নয়।

সংকলন-সময়ের বুলিয়ান ধ্রুবক "পরীক্ষা করা" এবং বিবৃতিগুলিকে কিছুটা সংশোধন করে আপনি বেশিরভাগ ভাষায় এগুলিকে আরও দক্ষ করতে পারেন:

if (checking & !Assertion) then AssertionFailure();

আপনি যদি সিনট্যাক্সটি পছন্দ করেন না, আপনি ম্যাক্রোগুলির মতো বিভিন্ন ভাষা বিমূর্ত কৌশল অবলম্বন করতে পারেন।

কিছু আধুনিক ভাষা আপনাকে এর জন্য দুর্দান্ত বাক্য গঠন দেয় এবং আমি মনে করি এটি "আধুনিক ভাষা সমর্থন" দ্বারা আপনি বোঝাচ্ছেন। এটি সমর্থন, তবে এটি বেশ পাতলা।

এমনকি আধুনিক ভাষাগুলি আপনাকে যা দেয় না তা হ'ল "সাময়িক" জোর দেওয়া (নির্বিচারে পূর্ববর্তী বা নিম্নলিখিত রাষ্ট্রগুলির তুলনায় [টেম্পোরাল অপারেটর "অবশেষে"]), যা আপনার যদি সত্যই আকর্ষণীয় চুক্তি লিখতে চান তবে আপনার যদি বিবৃতি সাহায্য না করে তবে তুমি এখানে.


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

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

7
... শুধু আইফেল কীভাবে কাজ করে তা পরীক্ষা করে দেখেছে। "পুরাতন <exp>" হ'ল ফাংশনে প্রবেশের সময় <exp> এর মান, সুতরাং এটি ফাংশনের প্রবেশদ্বারে অগভীর অনুলিপিগুলি করছিলাম যা আমি প্রত্যাশা করেছিলাম। আপনি এগুলিও করতে পারেন। আমি কম্পাইলার প্রাক / পোস্টের জন্য সিনট্যাক্স বাস্তবায়ন না থাকার সম্মত হবেন / পুরাতন হাত দ্বারা সব এই কাজ চেয়ে আরও বেশি সুবিধাজনক, কিন্তু বিন্দু হয় করতে পারেন হাত দ্বারা এই এবং এটি সত্যিই কঠিন নয়। আমরা অলস প্রোগ্রামারগুলিতে ফিরে এসেছি।
ইরা বাক্সার

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

@ মার্সাতাতো: আমি ইতিমধ্যে একমত হয়েছি যে ভাষায় সমর্থন একটি ভাল জিনিস।
ইরা

15

যেমন আপনি বলতে, ডিজাইন চুক্তি দ্বারা হয় আইফেল, যা দীর্ঘ ঐ প্রোগ্রামিং ভাষার যে ভাল কমিউনিটি বিবেচনা করা হয় কিন্তু যা ধরা না হয়েছে এক হয়েছে একটি বৈশিষ্ট্য।

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

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

সুতরাং আমি মনে করি ডিবিসি খুব বিস্তৃতভাবে গৃহীত হওয়ার আগে এখনও অনেক দীর্ঘ পথ যেতে হবে।


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

8

আমার অন্তর্নিহিততা আমাকে বলেছে যে সমর্থনের অভাবটি অবশ্যই অনুশীলনের এক ধরণের প্রত্যাখ্যানের ফলস্বরূপ হতে হবে, ...

মিথ্যা।

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

আমি ভাবছি যে কেউ যদি ব্যাখ্যা করতে পারে যে বেশিরভাগ আধুনিক ভাষাগুলি এত কম সমর্থন কেন বলে মনে হচ্ছে? ডিবিসি ত্রুটিযুক্ত বা অতিরিক্ত ব্যয়বহুল?

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

বা চরম প্রোগ্রামিং এবং অন্যান্য পদ্ধতিগুলির কারণে এটি কি কেবল অচল?

না।

আমরা বেশিরভাগ ইউনিট টেস্ট ব্যবহার করে তা দেখানোর জন্য যে ডিবিসি পূরণ হয়েছে।

পাইথনের জন্য, যেমন আপনি উল্লেখ করেছেন, ডিবিসি বেশ কয়েকটি জায়গায় যায়।

  1. ডকস্ট্রিং এবং ডকস্ট্রিং পরীক্ষার ফলাফল।

  2. ইনপুট এবং আউটপুটগুলি বৈধ করার জন্য জোর দেওয়া হয়েছে।

  3. ইউনিট পরীক্ষা।

আরও।

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


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

+1 টি। আমি মনে করি আপনি একমাত্র সেই ব্যক্তি যিনি সবচেয়ে গুরুত্বপূর্ণ পয়েন্টটি আবৃত করেছেন there are some things which cannot be proven। আনুষ্ঠানিক যাচাই দুর্দান্ত হতে পারে তবে সবকিছু যাচাইযোগ্য নয়! সুতরাং সেই বৈশিষ্ট্যটি আসলে প্রোগ্রামিং ভাষা আসলে কী করতে পারে তা সীমাবদ্ধ করে!
দিপান মেহতা

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

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

6

শুধু মনন. এটি এত জনপ্রিয় না হওয়ার কারণটির একটি অংশ হ'ল আইফেল দ্বারা "ডিজাইন বাই কন্ট্রাক্ট" ট্রেডমার্ক করা হয়েছে।


3

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

আরেকটি সম্ভাব্য উপসংহারটি হ'ল "পরিচালিত ভাষাগুলি" এর জনপ্রিয়তা হ'ল নির্বাচিত পরিচালিত বৈশিষ্ট্যগুলি (চুক্তি অনুসারে অ্যারে সীমানা ইত্যাদি) জন্য নকশা-বাই চুক্তি সমর্থনের বর্তমান প্রমাণ is


> নিজেরাই চুক্তির জনগণ বগি এবং ডিবাগ করা শক্ত হয়ে উঠতে পারে বা আরও বেশি কিছু হতে পারে, কেবল প্রোগ্রাম কোডের চেয়ে আমি এটি কখনও দেখিনি।
কাইতাইন

2

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

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

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

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


2

সংকলনের সময় চুক্তিগুলি পরীক্ষা করা গেলে ডিবিসি আরও ব্যাপকভাবে ব্যবহৃত হবে যাতে কোনও চুক্তি লঙ্ঘনকারী কোনও প্রোগ্রাম চালানো সম্ভব না হয়।

সংকলক সমর্থন ব্যতীত, "ডিবিসি" হ'ল "আক্রমণকারী / অনুমানগুলি পরীক্ষা করুন এবং লঙ্ঘিত হলে একটি ব্যতিক্রম নিক্ষেপ করুন" এর একমাত্র নাম is


ওটা কি থামানো সমস্যার মধ্যে চলে না?
সিজার বাউটিস্তা

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

চমৎকার পয়েন্ট (+1) যদিও বার্ট্র্যান্ড মায়ার তার "প্রোগ্রামিংয়ের মাস্টারমাইন্ডস" এর অংশে চুক্তি লঙ্ঘনের জন্য তাদের এলোমেলো শ্রেণি তৈরি এবং কলিং চেকিংয়ের ব্যবস্থাও উল্লেখ করেছেন। সুতরাং এটি একটি মিশ্র সংকলন সময় / রান-সময় পদ্ধতির, তবে আমি সন্দেহ করি যে এই কৌশলটি প্রতিটি পরিস্থিতিতে কাজ করে
মাকসি

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

1

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

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

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

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

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

সম্পাদনা: আমি একটি অনুসন্ধান করেছি এবং নিম্নলিখিতটি সম্পর্কিত আলোচনাটি সহায়ক হতে পারে যা সহায়ক হতে পারে: https://stackoverflow.com/questions/4065001/are-there-any-provable-real-world-languages-scala


-2

বেশিরভাগ কারণগুলি নিম্নরূপ:

  1. এটি কেবলমাত্র ভাষাগুলিতে উপলভ্য যা জনপ্রিয় নয়
  2. এটি অপ্রয়োজনীয় যেহেতু যেহেতু প্রকৃতপক্ষে এটি করতে চায় তার দ্বারা বিদ্যমান প্রোগ্রামিং ভাষায় একই জিনিসটি বিভিন্নভাবে করা যায়
  3. এটি বোঝা এবং ব্যবহার করা কঠিন - এটি সঠিকভাবে করার জন্য এটি বিশেষায়িত জ্ঞান প্রয়োজন, তাই এটি করার সংখ্যক লোক রয়েছে
  4. এটি করার জন্য এটি প্রচুর পরিমাণে কোডের প্রয়োজন - প্রোগ্রামাররা তাদের রচিত অক্ষরের পরিমাণকে হ্রাস করতে পছন্দ করে - যদি এটি কোডের দীর্ঘ অংশ নেয় তবে অবশ্যই এতে কিছু ভুল হতে হবে
  5. সুবিধাগুলি নেই - এটি সার্থক করার জন্য পর্যাপ্ত বাগ খুঁজে পাচ্ছে না

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

আমি এর প্রতিস্থাপন হিসাবে দৃser়তা ইত্যাদি সম্পর্কে ভাবছি না। এটি বিদ্যমান ভাষাগুলিতে এটি করার সঠিক উপায় নয় ((যেমন এটি এখনও সম্বোধন করা হয়নি)
tp1

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

@ স্ক-লজিক: ঠিক আছে, মনে হচ্ছে অর্ধেক পৃথিবী ওও ভুল করছে কারণ তারা সদস্য ফাংশন থেকে ডেটা সদস্যদের সদস্য ফাংশনে ফরোয়ার্ডিং ফাংশন লিখতে চান না। এটি আমার অভিজ্ঞতার একটি বড় সমস্যা। অক্ষরের লেখার সংখ্যা হ্রাস করে সরাসরি এটি ঘটে।
tp1

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