কিছু প্রোগ্রামার কেন সি, পাইথন, সি ++ আলাদাভাবে শ্রেণীবদ্ধ করে? - স্তর সম্পর্কিত


16

আমি পাইথন বিষয়ে একটি প্রাথমিক পাঠ্যক্রম নিচ্ছি এবং প্রশিক্ষক বলেছেন যে পাইথন একটি উচ্চ স্তরের ভাষা এবং সি এবং সি ++ নিম্ন স্তরের ভাষা। এটা ঠিক বিভ্রান্তিকর। আমি ভেবেছিলাম যে সি, সি ++, পাইথন, জাভা ইত্যাদি সমস্ত উচ্চ স্তরের ভাষা ছিল।

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


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

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

উত্তর:


31

উচ্চ স্তর এবং নিম্ন স্তরের আপেক্ষিক পদগুলি তাই সময়ের সাথে সাথে ব্যবহারের পরিবর্তন ঘটে। S০ এর দশকে ইউএনআইএক্স তরঙ্গ তৈরি করেছিল কারণ এটি দেখিয়েছিল যে একটি অপারেটিং সিস্টেম মূলত উচ্চ স্তরের ভাষায় রচনা করা যেতে পারে: সি। এস সময়ে এসকে এসেম্বলারের বিপরীতে সি উচ্চ স্তর হিসাবে বিবেচনা করা হত।

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

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

সি ++ একটি অদ্ভুত ঘটনা। এটি স্ট্যান্ডার্ড লাইব্রেরির অংশ হিসাবে প্রচুর সুন্দর ডেটা স্ট্রাকচার সরবরাহ করে তবে এটি হার্ডওয়্যারকে নিম্ন-স্তরের কারসাজির অনুমতি দেয় allows


3
আই ++ সি ++ আসলেই অদ্ভুত ঘটনা নয়, আইএমও - এটি কেবল একটি মিশ্র স্তরের ভাষা। আপনি যে বিমূর্ততাটি পান তা নির্ভর করে আপনি কোন বৈশিষ্ট্যগুলি ব্যবহার করেন তার উপর।
স্টিভ 314

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

1
@ জর্জিও - সি ++ আপনাকে যে কোনও প্রয়োগের বিশদটি গোপন করতে দেয় - উদাহরণস্বরূপ এটিকে কোনও শ্রেণীর বেসরকারী অভ্যন্তরীণ অংশ হিসাবে তৈরি করে যাতে এটি ব্যবহারের একমাত্র সরকারী উপায় class শ্রেণীর পাবলিক ইন্টারফেসের মাধ্যমে। অবশ্যই আপনি নিয়মগুলি ভঙ্গ করতে পারেন এবং আপনার স্মৃতিটিকে স্ক্র্যাম্ব করতে পারেন যা আপনি চান - তবে বাস্তবে আপনি যে কোনও ভাষায় এটি করতে পারেন যা বাস্তব-বিশ্ব অ্যাপ্লিকেশন বিকাশকে সমর্থন করে।
স্টিভ 314

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

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

8

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

স্বল্প স্তরের ভাষাগুলি কম্পিউটারকে স্পষ্টভাবে নির্দেশিত করার জন্য লেখা হয় - থিং মেশিন কোড এবং সমাবেশের কোড।

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

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

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

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

নিম্ন-স্তরের ভাষাগুলির বেশিরভাগ ক্ষেত্রে গতির সুবিধা রয়েছে। উচ্চ স্তরের কোডটি ব্যাখ্যা করার জন্য একটি ব্যয় আছে। এছাড়াও, 'কম্পিউটার স্পাইকে' কিছু লেখা ভাল লাগছে।

আশাকরি এটা সাহায্য করবে


5

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

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

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

সি ++ বিমূর্তনের আরও একটি স্তর যুক্ত করে: এটি ক্লাসগুলি যুক্ত করে (একটি ওপট সিন্ট্যাক্সে বিমূর্তকরণ ও ভ্যাটবেল এবং প্রসঙ্গটি), newএবং delete(মেমরি বরাদ্দকরণ এবং একক কনস্ট্রাক্টে পরিবর্তনশীল সূচনাকরণ ), সংকলন-টাইম চেকিং, টেম্পলেট (টাইপ-নিরাপদ সংকলন-সময়) রূপান্তর), এবং সংকলন-সময় সিনট্যাক্স সুবিধার মতো নেমস্পেসস, ফাংশন এবং অপারেটর ওভারলোডিং ইত্যাদি

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

সুতরাং লোকেরা যখন ভাষাগুলিকে "উচ্চ স্তরের" এবং "নিম্ন স্তরের" বিভাগে ভাগ করে, তারা কোথাও একটি স্বেচ্ছাসেবী রেখা আঁকেন এবং সেই লাইনটি সর্বদা এক হয় না। ১৯ 1970০ সালে, লাইনটি সমাবেশ এবং সি এর মধ্যে ছিল (প্ল্যাটফর্ম-নির্দিষ্ট মেশিনের নির্দেশাবলীর সিদ্ধান্ত গ্রহণকারী হিসাবে নির্ধারণ করে); 1987 সালে, এটি সি এবং সি ++ এর মধ্যে কোথাও থাকতে পারে; আজ, এটি সি ++ এবং জাভা (স্থিতিশীল ফ্যাক্টর হিসাবে স্বয়ংক্রিয় মেমরি পরিচালনা সহ) এর মধ্যে থাকতে পারে be

দীর্ঘ গল্প সংক্ষিপ্ত: উচ্চ-স্তরের-নেস একটি স্লাইডিং স্কেল এবং আপনি যে তিনটি ভাষার উল্লেখ করেছেন এটি সি <সি ++ <পাইথন।


আমি বলব উচ্চ-স্তরের বনাম নিম্ন-স্তরের বনাম একটি স্কেল নয়, পরিবর্তে দুটি পৃথক স্কেল। নিম্ন-স্তরের নেসটি কোনও ভাষা মেশিনের আচরণের সাথে কতটা ভাল সম্পর্কযুক্ত তার সাথে সম্পর্কিত, অন্যদিকে উচ্চ-স্তরের নেস তার বিমূর্ততা সরবরাহ করার ক্ষমতার সাথে সম্পর্কিত। সি # C99 চেয়ে একটি উচ্চ পর্যায়ের ভাষার বেশি, কিন্তু এছাড়াও সি স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত ভাষা কম-স্তরের, একটি সময়ে একটি অ্যারের দুই প্রক্রিয়া "ছোট" মান একটি "int- এ" পয়েন্টার ব্যবহার যেমন আচরণ থেকে সময় সি # তে সংজ্ঞায়িত করা হয় তবে সি 99 এ নয়।
সুপারক্যাট

3

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

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

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

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