স্বেচ্ছাসেবক কোডের জন্য সুরক্ষা মূল্যায়ন করা কি প্রোগ্রামিংয়ে সম্ভব?


10

আমি নিরাপদ কোড সম্পর্কে ইদানীং অনেক চিন্তা করেছি। শংকা মুক্ত. স্মৃতি-নিরাপদ। আপনার মুখোমুখি-এ-সেগফল্ট-সহ-বিস্ফোরিত-তে-যাচ্ছেন না তবে প্রশ্নে স্পষ্টতার স্বার্থে আসুন আমরা আমাদের চলমান সংজ্ঞা হিসাবে মরিচাটির সুরক্ষা মডেলটি ব্যবহার করি।

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

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

গুহাত :

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

2
যথেচ্ছ কোড? না, আমি কল্পনা করেছি আপনি এমনকি I / O এবং হার্ডওয়্যার ব্যতিক্রমগুলির কারণে সর্বাধিক দরকারী কোডের সুরক্ষাও প্রমাণ করতে পারবেন না ।
টেলাস্টিন

7
আপনি কেন থামানোর সমস্যাটিকে উপেক্ষা করছেন? আপনি উল্লিখিত উদাহরণগুলির প্রত্যেকটি এক এবং আরও অনেকগুলি হলটিং সমস্যা, ফাংশন সমস্যা, ধানের উপপাদ্য বা অন্য অনেকগুলি অনিবার্য উপপাদ্যগুলির সমাধানের সমতুল্য প্রমাণিত হয়েছে: পয়েন্টার-সুরক্ষা, স্মৃতি-সুরক্ষা, থ্রেড thread নিরাপত্তা, ব্যতিক্রম-সুরক্ষা, বিশুদ্ধতা, আই / ও-সুরক্ষা, লক-সুরক্ষা, অগ্রগতির গ্যারান্টি ইত্যাদি The হ্যালটিং প্রব্লেম হ'ল একটি সহজ সম্ভাব্য স্থির বৈশিষ্ট্য যা আপনি সম্ভবত জানতে চাইতে পারেন, আপনার তালিকাভুক্ত সমস্ত কিছু আরও শক্ত is ।
Jörg ডব্লু মিটাগ

3
আপনি যদি কেবল মিথ্যা ধনাত্মক বিষয়ে চিন্তা করেন এবং মিথ্যা নেতিবাচক বিষয়গুলি গ্রহণ করতে ইচ্ছুক হন তবে আমার কাছে একটি অ্যালগরিদম রয়েছে যা সবকিছুকে শ্রেণিবদ্ধ করে: "এটি কি নিরাপদ? না"
কালেথ

সাম্প্রতিক কোড লিখতে আপনার অবশ্যই একেবারে unsafeজং ব্যবহার করার দরকার নেই । এগুলি সিঙ্ক্রোনাইজেশন আদিম থেকে অভিনেতা অনুপ্রাণিত চ্যানেলগুলি সমেত বিভিন্ন উপলব্ধ পদ্ধতি।
রাবারডাক

উত্তর:


8

আমরা এখানে শেষ পর্যন্ত যা বলছি তা হ'ল রানটাইম বনাম সময় সংকলন।

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

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

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

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

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

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

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

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


3

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

তবে টাইপ সিস্টেমগুলি বেশ সীমাবদ্ধ:

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

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

এই সীমাবদ্ধতার কারণে, টাইপ সিস্টেমগুলি কেবলমাত্র প্রমাণ করতে সহজ যে মোটামুটি দুর্বল বৈশিষ্ট্য যাচাই করতে থাকে, যেমন কোনও ফাংশনকে সঠিক ধরণের মান সহ বলা হয়। তবুও এটি যথেষ্ট পরিমাণে ভাব প্রকাশের ক্ষেত্রে সীমাবদ্ধ করে তাই কাজকর্মগুলি (যেমন interface{}গো তে, dynamicসি # তে, Objectজাভাতে, void*সি তে) বা এমনকি স্থির টাইপিংকে সম্পূর্ণভাবে বাদ দেয় এমন ভাষা ব্যবহার করা সাধারণ।

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

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

final int x;
if (...) { ... }
else     { ... }
doSomethingWith(x);

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

let x = if ... { ... } else { ... };
do_something_with(x)

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

যদি আমরা জাভাতে একটি মরচে ধাঁচের টাইপ সিস্টেম প্রয়োগ করি, তবে এর চেয়ে আমাদের আরও অনেক বড় সমস্যা হবে: জাভা অবজেক্টগুলি লাইফটাইম দিয়ে মন্তব্য করা হয় না, তাই আমাদের তাদের সাথে &'static SomeClassবা হিসাবে বিবেচনা করতে হবে Arc<dyn SomeClass>। এটি কোনও ফলাফল প্রমাণকে দুর্বল করে দেবে। জাভাতে অপরিবর্তনীয়তার কোনও টাইপ-স্তর ধারণা নেই তাই আমরা &এবং &mutপ্রকারের মধ্যে পার্থক্য করতে পারি না । আমাদের যেকোন বস্তুকে সেল বা মুটেক্স হিসাবে বিবেচনা করতে হবে, যদিও এটি জাভা প্রকৃত প্রস্তাবগুলির চেয়ে শক্তিশালী গ্যারান্টি ধরে নিতে পারে (একটি জাভা ক্ষেত্র পরিবর্তন সিঙ্ক্রোনাইজড এবং অস্থির না হলে থ্রেডসেফ নয়)। পরিশেষে, জাস্ট-স্টাইল প্রয়োগের উত্তরাধিকার সম্পর্কে জাস্টের কোনও ধারণা নেই।

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


3

নিরাপদ কতটা নিরাপদ?

হ্যাঁ এই জাতীয় যাচাইকারী লিখতে প্রায় সম্ভব: আপনার প্রোগ্রামটি কেবল ধ্রুবক ইউএনএসএফই ফিরিয়ে দিতে হবে। আপনি সময় সঠিক 99% হবে

কারণ আপনি যদি কোনও নিরাপদ মরিচা প্রোগ্রাম চালান, তবুও কেউ তার প্রয়োগের সময় প্লাগটি টানতে পারে: সুতরাং আপনার প্রোগ্রামটি তাত্ত্বিকভাবে ধারণা না করা থাকলেও বন্ধ হয়ে যেতে পারে।

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

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

কৌতুক একপাশে, স্বয়ংক্রিয় যাচাইকরণ

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

এই ধরণের বিশ্লেষণটি অপ্টিমাইজেশনের খাতিরে কিছু সংকলক দ্বারা সম্পাদিত।

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


1

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

তবে, টিউরিংয়ের ফলাফল এমন কোনও প্রোগ্রামের সম্ভাবনাটিকে হ্রাস করে না যা 100% সময়কে (1) একেবারে কোড নিরাপদ নির্ধারণ করতে পারে, (২) একেবারে নির্ধারণ করে যে কোডটি অনিরাপদ, বা (3) নৃতাত্ত্বিকভাবে তার হাত বাড়িয়ে বলে এবং বলে "হেক, আমি জানি না"। মরিচাটির সংকলক, সাধারণভাবে বলা, এই বিভাগে।


আপনার কাছে যতক্ষণ না "নিশ্চিত নন" বিকল্প রয়েছে, হ্যাঁ?
পরিবেশ পরিবেশবিদ

1
গ্রহণযোগ্যতাটি হ'ল এটি কোনও প্রোগ্রাম-বিশ্লেষণ প্রোগ্রামকে বিভ্রান্ত করতে সক্ষম এমন কোনও প্রোগ্রাম লিখতে সর্বদা সম্ভব। পরিপূর্ণতা অসম্ভব। ব্যবহারিকতা সম্ভব হতে পারে।
নোভাডেনিজেন

1

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

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

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

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

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

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