জাভা এবং সি # দ্বারা মেমরির সুরক্ষা যেভাবে সরবরাহ করা হয়েছে তার অনুরূপ কোনও প্রোগ্রামিং ভাষার মাধ্যমে থ্রেড সুরক্ষা কীভাবে সরবরাহ করা যেতে পারে?


10

জাভা এবং সি # অ্যারে বাউন্ডস এবং পয়েন্টার ডিरेফেন্সগুলি পরীক্ষা করে মেমরির সুরক্ষা সরবরাহ করে।

জাতি পরিস্থিতি এবং অচলাবস্থার সম্ভাবনা রোধ করতে কোন পদ্ধতি প্রোগ্রামিং ভাষায় প্রয়োগ করা যেতে পারে?


3
জাস্ট যা করতে পারে তাতে আপনার আগ্রহী হতে পারে: জংয়ের সাথে নির্ভীক সংমেয়
ভিনসেন্ট সাভার্ড

2
সবকিছুকে অপরিবর্তনীয় করে তুলুন বা নিরাপদ চ্যানেলগুলির সাথে সবকিছুকে অ্যাসিঙ্ক করুন। আপনি গো এবং এরলংয়ের বিষয়েও আগ্রহী হতে পারেন ।
থেরোট

@ থেরাট "নিরাপদ চ্যানেলগুলির সাথে সমস্ত কিছুকে অ্যাসিঙ্ক করুন" - আশা করি আপনি এটির বিস্তারিত ব্যাখ্যা করতে পারেন।
এমআরপিও

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

2
উপায় দ্বারা, অন্য সম্ভাব্য পন্থা রয়েছে: লেনদেনের স্মৃতি
থেরোট

উত্তর:


14

রেসগুলি ঘটে যখন আপনার কাছে কোনও বস্তুর একযোগে আলিয়াসিং হয় এবং কমপক্ষে, এলিয়াসগুলির মধ্যে একটিতে মিউটেশন হয়।

সুতরাং, দৌড় প্রতিরোধের জন্য, আপনাকে এই শর্তগুলির এক বা একাধিকটি অসত্য করা দরকার।

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

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

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

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


11

জাভা এবং সি # অ্যারে বাউন্ডস এবং পয়েন্টার ডিरेফেন্সগুলি পরীক্ষা করে মেমরির সুরক্ষা সরবরাহ করে।

সি # এবং জাভা এটি কী করে তা নিয়ে প্রথমে চিন্তা করা গুরুত্বপূর্ণ। তারা রূপান্তর কি করে তা করতে অনির্ধারিত সংজ্ঞায়িত আচরণ মধ্যে C অথবা সি ++ এ আচরণ: প্রোগ্রাম ক্র্যাশ করলে । নাল ডিসেরেন্স এবং অ্যারে সূচক ব্যতিক্রমগুলি কখনই সঠিক সি # বা জাভা প্রোগ্রামে ধরা উচিত নয় ; তাদের প্রথম স্থানে না ঘটানো উচিত কারণ প্রোগ্রামটিতে সেই ত্রুটি থাকা উচিত নয়।

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

জাতি পরিস্থিতি এবং অচলাবস্থার সম্ভাবনা রোধ করতে কোন পদ্ধতি প্রোগ্রামিং ভাষায় প্রয়োগ করা যেতে পারে?

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

সুতরাং আপনার প্রশ্নটি মূলত এটিকে ফুটিয়ে তোলে "এমন কোনও উপায় আছে যে কোনও প্রোগ্রামিং ভাষা নিশ্চিত করতে পারে যে আমার প্রোগ্রামটি সঠিক?" এবং এই প্রশ্নের উত্তরটি বাস্তবে, না no

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

পরিস্থিতি আসলেই ভয়াবহ! মাল্টিথ্রেডেড কোড সঠিকভাবে পাওয়া, বিশেষত দুর্বল মেমরি মডেলের আর্কিটেকচারে, খুব, খুব কঠিন। কেন এটি কঠিন তা নিয়ে চিন্তা করা শিক্ষামূলক:

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

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

এমনকি মেমরির মডেলটি বাদ দিয়ে, মাল্টিথ্রেডিং শক্ত করার অন্যান্য কারণও রয়েছে:

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

এই শেষ পয়েন্ট আরও ব্যাখ্যা বহন করে। "কম্পোজেবল" দ্বারা আমি নিম্নলিখিতটি বোঝাতে চাইছি:

মনে করুন আমরা একটি ডাবল প্রদত্ত কোন int গণনা করতে চাই। আমরা গণনার সঠিক প্রয়োগ লিখি:

int F(double x) { correct implementation here }

মনে করুন আমরা কোনও স্ট্রিং গণনা করতে চাই:

string G(int y) { correct implementation here }

এখন আমরা যদি একটি স্ট্রিং একটি ডাবল দেওয়া গণনা করতে চান:

double d = whatever;
string r = G(F(d));

জি এবং এফ আরও জটিল সমস্যার সঠিক সমাধানে রচিত হতে পারে ।

কিন্তু অচলাবস্থার কারণে লকগুলির এই সম্পত্তি নেই। L1, L2 ক্রমানুসারে লক নেয় এমন একটি সঠিক পদ্ধতি এম 1 এবং একটি সঠিক পদ্ধতি এম 2 যা লকটি L2, L1 অনুসারে নিয়ে যায়, উভয়ই একটি ভুল প্রোগ্রাম তৈরি না করে একই প্রোগ্রামে ব্যবহার করা যাবে না। লকগুলি এটিকে তৈরি করে যাতে আপনি "প্রতিটি পৃথক পদ্ধতি সঠিক, তাই পুরো জিনিসটি সঠিক" না বলতে পারেন।

সুতরাং, ভাষা ডিজাইনার হিসাবে আমরা কী করতে পারি?

প্রথমে সেখানে যাবেন না। এক প্রোগ্রামে একাধিক থ্রোড কন্ট্রোল করা একটি খারাপ ধারণা, এবং থ্রেডের মধ্যে মেমরি ভাগ করে নেওয়া একটি খারাপ ধারণা, সুতরাং এটিকে ভাষা বা রানটাইমটিকে প্রথমে রাখবেন না।

এটি দৃশ্যত একটি অ-স্টার্টার।

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

  • আইও লেটেন্সিটি পরিচালনা করতে আমরা ভুলভাবে থ্রেড তৈরি করি। একটি বড় ফাইল লিখতে হবে, একটি রিমোট ডাটাবেস অ্যাক্সেস করুন, যাই হোক না কেন, আপনার ইউআই থ্রেড লক করার পরিবর্তে একটি কর্মী থ্রেড তৈরি করুন।

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

  • আমরা কম্পিউটেশনালি ভারী কাজের সাথে অলস সিপিইউগুলিকে পরিপূর্ণ করার জন্য, সঠিকভাবে থ্রেড তৈরি করি। মূলত, আমরা হালকা প্রসেস হিসাবে থ্রেড ব্যবহার করছি।

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

আমরা আর কি করতে পারি?

  • সংকলকটিকে সবচেয়ে হাড়ের মাথার ভুলগুলি সনাক্ত করতে এবং তাদের সতর্কতা বা ত্রুটিতে রূপান্তরিত করুন।

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

  • "মানের পিট" বৈশিষ্ট্যগুলি ডিজাইন করুন, যেখানে এটি করার সবচেয়ে প্রাকৃতিক উপায়টিও সবচেয়ে সঠিক উপায়।

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

  • মাইক্রোসফ্ট রিসার্চ সময় এবং প্রচুর পরিমাণে একটি সি #-এর মতো ভাষার সাথে সফ্টওয়্যার লেনদেনের মেমরি যুক্ত করার প্রয়াসে চলে আসে এবং এটিকে মূল ভাষায় অন্তর্ভুক্ত করার জন্য তারা এটিকে এত ভালভাবে পারফর্ম করে নি।

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

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

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

  • তৃতীয় পক্ষের পক্ষে ভাল বিশ্লেষক লিখতে সহজ করুন

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

  • বিমূর্তির স্তর বাড়ান

আমাদের কাছে ঘোড়দৌড় এবং অচলাবস্থা এবং এই সমস্ত স্টাফ কেন থাকার একটি মৌলিক কারণ হ'ল আমরা কী করা উচিত তা বলে এমন প্রোগ্রাম লিখছি , এবং দেখা যাচ্ছে যে আমরা সকলেই অত্যাবশ্যক প্রোগ্রামগুলি লেখার জন্য বোকা; কম্পিউটার আপনি যা বলবেন তা করে এবং আমরা এটি ভুল কাজ করতে বলি। অনেক আধুনিক প্রোগ্রামিং ভাষা ঘোষণামূলক প্রোগ্রামিং সম্পর্কে আরও বেশি করে: আপনি কী ফলাফল চান তা বলুন এবং সংকলকটি সেই ফলাফলটি অর্জনের জন্য দক্ষ, নিরাপদ, সঠিক উপায়টি নির্ধারণ করুন। আবার, লিনকিউ সম্পর্কে চিন্তা করুন; আমরা আপনাকে বলতে চাই from c in customers select c.FirstName, যা একটি অভিপ্রায় প্রকাশ করে । সংকলকটি কোডটি কীভাবে লিখবেন তা নির্ধারণ করুন।

  • কম্পিউটার সমস্যা সমাধানের জন্য কম্পিউটার ব্যবহার করুন।

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

দুঃখিত যে সেখানে কিছুটা দৌড়ঝাঁপ হয়েছিল; এটি একটি বিশাল এবং কঠিন বিষয় এবং 20 বছরের মধ্যে আমি পিএল সম্প্রদায়ের মধ্যে কোনও স্পষ্ট conকমত্য প্রকাশিত হয়নি যা আমি এই সমস্যার জায়গাতে অগ্রগতি অনুসরণ করছি।


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

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

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

6
@ এমপিপিও: তৃতীয়ত, আনুষ্ঠানিক বিশ্লেষণে সবচেয়ে বড় সমস্যা হ'ল আমরা কী করছি? আমরা পূর্বশর্ত এবং পোস্টকন্ডিশনগুলির একটি স্পেসিফিকেশন উপস্থাপন করছি এবং তারপরে প্রোগ্রামটি সেই স্পেসিফিকেশনটি পূরণ করে কিনা তা যাচাই করছি। গ্রেট; তাত্ত্বিকভাবে যা সম্পূর্ণভাবে করণীয়। কোন ভাষায় স্পেসিফিকেশন লেখা হয়? যদি কোনও দ্ব্যর্থহীন, যাচাইযোগ্য স্পেসিফিকেশন ভাষা থাকে তবে আসুন আমরা সেই ভাষাতে আমাদের সমস্ত প্রোগ্রাম লিখি এবং এটি সংকলন করি । আমরা কেন এটি করি না? কারণ দেখা যাচ্ছে যে নির্দিষ্ট ভাষায়ও সঠিক প্রোগ্রামগুলি লেখা খুব শক্ত!
এরিক লিপার্ট

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