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