সি প্রোগ্রামিং ল্যাঙ্গুয়েজটি প্রকাশের সময় কী নিম্ন স্তরের ভাষা হিসাবে বিবেচিত হত?


151

বর্তমানে সি একটি নিম্ন স্তরের ভাষা হিসাবে বিবেচিত হয় , তবে 70 এর দশকে কি এটি নিম্ন স্তরের হিসাবে বিবেচিত হত? শব্দটি কি তখনও ব্যবহৃত হয়েছিল?

80 এর দশকের মাঝামাঝি এবং তার বাইরেও অনেক জনপ্রিয় উচ্চ স্তরের ভাষার অস্তিত্ব ছিল না তাই কয়েক বছর ধরে নিম্ন স্তরের প্রকৃতি কীভাবে পরিবর্তন হয়েছে এবং তা কী তা আমি জানতে আগ্রহী।


13
একটি তথ্য বিন্দু হিসাবে, প্রায় 1978 সালে কিছু প্রোগ্রামিং মেন্টর সি আমার কাছে গৌরবযুক্ত সমাবেশ ভাষা হিসাবে বর্ণনা করেছিলেন।
বেন ক্রোয়েল

7
@ বেনক্রোয়েল আপনার বক্তব্যের প্রসঙ্গে "গৌরব অর্জন" এর অর্থ কী তা আমি নিশ্চিত নই তবে আমি সিটিকে একটি সর্বজনীন (= প্ল্যাটফর্ম-স্বতন্ত্র) সমাবেশ ভাষা বলার অভিজ্ঞতা অর্জন করেছি ।
মেলবিয়াস

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

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

4
এটি লক্ষণীয় যে লিস্প 1958
প্রধানমন্ত্রী

উত্তর:


144

প্রশ্নের historicalতিহাসিক দিকগুলির উত্তর দিতে:

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

সি একটি "খুব উচ্চ স্তরের" ভাষা নয় বা "বড়" ভাষাও নয় ...

এবং ভূমিকা বলে

সি একটি তুলনামূলকভাবে "নিম্ন স্তরের" ভাষা ... সি অক্ষরের স্ট্রিং, সেট, তালিকাগুলি বা অ্যারেগুলির মতো যৌগিক অবজেক্টের সাথে সরাসরি ডিল করার জন্য কোনও ক্রিয়াকলাপ সরবরাহ করে না। এমন কোনও ক্রিয়াকলাপ নেই যা পুরো অ্যারে বা স্ট্রিংকে ম্যানিপুলেট করে ...

পাঠ্যটি চালিয়ে যাওয়ার আগে তালিকাটি কিছুক্ষণ চলবে:

যদিও এর মধ্যে কিছু বৈশিষ্ট্যের অনুপস্থিতি একটি গুরুতর ঘাটতি বলে মনে হতে পারে, ... ভাষাটিকে সামান্য আকারে রাখলে আসল সুবিধা রয়েছে।

(1988 সালের আমার কাছে কেবল দ্বিতীয় সংস্করণ রয়েছে, তবে নীচের মন্তব্যটি ইঙ্গিত দেয় যে উদ্ধৃত পাঠ্যটি 1978 সালের প্রথম সংস্করণে সমান))

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


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

157

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

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

সি সচেতনভাবে ব্যয়বহুল বা এমন বৈশিষ্ট্যগুলি বাস্তবায়িত করতে অসুবিধা ছেড়ে দেয় যা এই সময়ে ইতিমধ্যে সু-প্রতিষ্ঠিত ছিল, যেমন

  • স্বয়ংক্রিয় মেমরি পরিচালনা
  • নেস্টেড ফাংশন বা ক্লোজার্স
  • বেসিক ওওপি বা কর্টিনগুলি
  • আরও অভিব্যক্তিপূর্ণ টাইপ সিস্টেম (যেমন পরিসীমা-সীমাবদ্ধ প্রকার, ব্যবহারকারী-সংজ্ঞায়িত প্রকার যেমন রেকর্ড প্রকার, শক্ত টাইপিং, ...)

সি এর কিছু আকর্ষণীয় বৈশিষ্ট্য রয়েছে:

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

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

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


17
বিদ্যমান ALGOL পরিবার এবং পাস্কাল ভাষার জন্য যা প্রয়োজন তা সম্পর্কে অসচেতন লোকদের জন্য কেবল একটি ছোট সংযোজন: এই ভাষাগুলিতে ন্যায্যভাবে নেস্টেড ফাংশন ছিল যেখানে আপনি বহিরাগত ফাংশনে ঘোষিত (স্থানীয়) ভেরিয়েবলটি অ্যাক্সেস করতে পারবেন। এর অর্থ হ'ল আপনাকে একটি "প্রদর্শন" বজায় রাখতে হবে - প্রতিটি ফাংশন কল এবং রিটার্নে ( বাইরের লেক্সিকাল স্কোপগুলিতে) নির্দেশকের একটি অ্যারে - বা আপনাকে লেকস স্কোপগুলি স্ট্যাক এবং এই জাতীয় প্রতিটি পরিবর্তনশীল অ্যাক্সেসের শৃঙ্খলাবদ্ধ করতে হয়েছিল either এটি সন্ধানের জন্য স্ট্যাকটি একাধিক অপ্রত্যক্ষ হપ્સের প্রয়োজন। দামী! সি জেটিসন সব কিছুর। আমি এখনও এটি মিস করছি।
ডেভিডবাক

12
@ ডেভিডবাক: x86-64 সিস্টেম ভি এবিআই (লিনাক্স / ওএস এক্সে কলিং কনভেনশন) %r10"স্ট্যাটিক চেইন পয়েন্টার" হিসাবে সংজ্ঞায়িত করেছে, যা আপনি ঠিক তেমনই কথা বলছেন। সি এর জন্য এটি কেবল অন্য কল-ক্লোবারযুক্ত স্ক্র্যাচ রেজিস্টার, তবে আমার ধারণা পাস্কাল এটি ব্যবহার করবে। (জিএনইউ সি নেস্টেড ফাংশনগুলি বাইরের স্কোপটিতে পয়েন্টারটি পাস করার জন্য এটি ব্যবহার করে যখন এই জাতীয় ফাংশনটি ইনলাইন না করে (উদাহরণস্বরূপ যদি আপনি এটিতে কোনও ফাংশন পয়েন্টার করেন যাতে সংকলক স্ট্যাকের মধ্যে মেশিন কোডের ট্রামপোলিন তৈরি করে): নিয়মিত গ্রহণযোগ্যতা r10 এবং r11 এর ব্যবহার )
পিটার

2
নিবন্ধন করুন সিস্টেম ভি বেরিয়ে আসার পরেও পাস্কালটি ব্যাপকভাবে ব্যবহৃত হয়েছিল (যদিও আনুষ্ঠানিক এসআইএসভি এবিআই সংজ্ঞায়িত করা হয়েছিল তা আমি জানি না)। আপনার লিঙ্কযুক্ত উত্তর খুব তথ্যপূর্ণ।
ডেভিডবাক

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

6
@ জামেস্কেফ: তবে খুব তাড়াতাড়ি সি'র স্ট্রাক্ট অ্যাসাইনমেন্ট ছিল না; আমার ধারণা আপনি a = b;আইএসও সি 89 এ পুরো স্ট্রাক্টটি অনুলিপি করতে লেখার পরিবর্তে সদস্যদের স্বতন্ত্রভাবে মেমকিপি বা কপি করতে হবে। সি এর গোড়ার দিকে, ব্যবহারকারী-সংজ্ঞায়িত প্রকারগুলি অবশ্যই দ্বিতীয়-শ্রেণীর ছিল এবং কেবলমাত্র ফাংশন আরগ হিসাবে রেফারেন্স দিয়ে পাস করা যেতে পারে। সি এর অ্যারেগুলিতে বিদ্বেষ
পিটার কর্ডেস

37

১৯ 1970০ এর দশকের গোড়ার দিকে, সিটি আধুনিক কন্সট্রাক্টসকে এত কার্যকরভাবে ব্যবহার করে তাজা বাতাসের এক ঝলকানি দম ছিল যাতে পুরো ইউএনআইএক্স সিস্টেমটি অগণিত স্থান বা কর্মক্ষমতা দণ্ডের সাথে অ্যাসেম্বলি ভাষা থেকে সি ভাষায় পুনরায় লেখা যেতে পারে। সেই সময়ে অনেক সমসাময়িক এটিকে উচ্চ স্তরের ভাষা হিসাবে উল্লেখ করেছিলেন।

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

আরও তথ্যের জন্য মূল বিএসটিজে নিবন্ধটি পরামর্শ করুন :

ধন্যবাদ ডেনিস আপনি শান্তিতে থাকুন.


3
এটি মূলত টাইপ করা হয়েছিল এবং পিডিপি অ্যাসেমব্লির জন্য ভাল-সিনট্যাক্সের মোড়কগুলি যদি আপনি আমাকে জিজ্ঞাসা করেন।
einpoklum


2
@ আইনপোকলুম আমি এর সাথে একমত হতে চাই। আমি ১৯ 1980০ সালে সিটিতে ফিরে বিশ্ববিদ্যালয়ে, পিডিপি-১১ / 34 এ যেমন ঘটেছিল তেমনভাবে শিখেছি এবং এটি প্রফেসরগুলির মধ্যে একজন "পোর্টেবল অ্যাসেম্বলি ল্যাঙ্গুয়েজ" হিসাবে বর্ণনা করেছিলেন। সম্ভবত কারণ PDP-11 ছাড়াও আমাদের ল্যাবটিতে বেশ কয়েকটি সুপারব্রেন সিপি / এম মেশিন রয়েছে যা তাদের উপর একটি সি কম্পাইলার উপলব্ধ ছিল। en.wikipedia.org/wiki/Intertec_Superbrain
dgnuff

2
এছাড়াও যাচাইযোগ্য historicalতিহাসিক প্রমাণের উপর ভিত্তি করে একটি দুর্দান্ত উত্তর (বাহ! সেখানে কে & আর এর একটি পূর্ব সংস্করণ উপলব্ধ ছিল!)।
ক্রিস্টোফ

7
@ আইনপোকলম এটি কি কিছুটা দূরের কথা নয়? আমার 80 এর দশকের মাঝামাঝি এসেম্বলার (জেড 80 এবং এম 68 কে) এর সিস্টেম এবং অ্যাপ্লিকেশন কোড লেখার সুযোগ ছিল, এম "পিডিপি 11 সিনট্যাক্স" নামে একটি "পোর্টেবল এসেমব্লার", এবং বিমূর্তের তুলনায় সি। , সি অবশ্যই উচ্চ স্তরের ভাষা: সি প্রোগ্রামিংয়ের উত্পাদনশীলতা এসেম্বলারের চেয়ে উচ্চতার ক্রম ছিল! অবশ্যই কোনও স্ট্রিং (এসএনওবিএল), কোনও নেটিভ ডেটাফিল সমর্থন (সিওবিএল), স্ব-জেনারেটিং কোড (এলআইএসপি), কোনও উন্নত গণিত (এপিএল), কোনও বস্তু (সিমুলা) নেই, তাই আমরা সম্মত হতে পারি যে এটি খুব বেশি ছিল না
ক্রিস্টোফ

21

যেমন আমি এই সাইটে অন্য কোথাও লিখেছি যখন কেউ মলোক / ফ্রি মেমরি ম্যানেজমেন্ট প্যাটার্নটিকে "নিম্ন-স্তরের প্রোগ্রামিং," হিসাবে উল্লেখ করেছেন

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

প্রসঙ্গে, এটি সি এর বাইরে আসার পরে 90 এর দশকের গোড়ার দিকে ছিল।


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

6
@ হাইড, আমি ১৯g০ এর দশকে আলগোল 60০, দুটি পৃথক ফোরট্রান উপভাষা এবং বিভিন্ন বেসিক উপভাষাগুলি ব্যবহার করেছি এবং এই ভাষার কোনওটিরই মধ্যে পয়েন্টার বা হিপ বরাদ্দকারী ছিল না।
সলোমন স্লো

7
কড়া কথায় বলতে গেলে, আপনি এখনও malloc()সরাসরি কল করে brk(2)বা mmap(2)ফলস্বরূপ স্মৃতি নিজে পরিচালনা করে প্রোগ্রামিং করতে পারেন । এটি কোনও কল্পনাযোগ্য লাভের জন্য একটি বিশাল পিআইটিএ (যদি না আপনি কোনও মলোক-জাতীয় জিনিস বাস্তবায়ন করে থাকেন ) তবে আপনি এটি করতে পারেন।
কেভিন

1
@amon - উল্লেখযোগ্য বুড়ো স্ট্যাক-ভিত্তিক মেশিনগুলি বাদে যেগুলি ALGOL এ নীচে থেকে শীর্ষে প্রোগ্রাম করা হয়েছিল ... এবং ইউনিক্সের থেকেও অনেক আগে। ওহ, এবং যাইহোক, মাল্টিক্স যা ইউনিক্সের অনুপ্রেরণা ছিল: পিএল / আই-তে লিখিত। ALGOL এর মতো, সি এর চেয়েও উচ্চতর স্তর
ডেভিডবাক

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

15

অনেক উত্তর ইতিমধ্যে প্রারম্ভিক নিবন্ধগুলিতে উল্লেখ করেছে যা বলেছিল যে "সি একটি উচ্চ স্তরের ভাষা নয়" things

তবে আমি পাইলিংয়ের বিরুদ্ধে প্রতিরোধ করতে পারি না: অনেকগুলি, সেই সময়ে সর্বাধিক বা সমস্ত এইচএলএল না হলে - আলগোল, আলগোল -60, পিএল / 1, পাস্কাল - সরবরাহ করা অ্যারের সীমানা পরীক্ষা করা এবং সংখ্যার ওভারফ্লো সনাক্তকরণ।

সর্বশেষে আমি বাফার এবং পূর্ণসংখ্যার ওভারফ্লোগুলি পরীক্ষা করেছিলাম যা অনেকগুলি সুরক্ষার দুর্বলতার মূল কারণ। হ্যাঁ, এখনও কেস ...

গতিশীল মেমরি পরিচালনার পরিস্থিতি আরও জটিল ছিল, তবে তবুও, সি স্টাইল ম্যালোক / ফ্রি ছিল সুরক্ষার দিক থেকে একটি দুর্দান্ত পদক্ষেপ backward

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


7
যেহেতু আমি ইন্টেল এমপিএক্স এবং পয়েন্টার / সীমানা যাচাইয়ের সংকলকটি প্রয়োগ করে জড়িত তা যদি ঘটে থাকে, তবে আমি আপনাকে তাদের সম্পাদনের কাগজগুলিতে উল্লেখ করতে পারি: মূলত 5-15%। এর মধ্যে বেশিরভাগই সংকলক বিশ্লেষণ জড়িত যেগুলি 1970 এবং 1980 এর মধ্যে সবেমাত্র সম্ভব হয়েছিল - নিখুঁত পরীক্ষার তুলনায় যা 50% ধীর হতে পারে। তবে আমি মনে করি যে এটা বলা ঠিক হবে যে সি এবং ইউএনআইএক্স এই বিশ্লেষণগুলিকে ২০ বছরের মধ্যে পিছিয়ে রেখেছিল - যখন সি সবচেয়ে জনপ্রিয় প্রোগ্রামিং ভাষা হয়ে ওঠে, তখন সুরক্ষার জন্য খুব কম চাহিদা ছিল।
ক্রাজি গ্লিউ

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

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

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

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

8

সি (1972) এর পূর্বাভাসে আরও পুরানো এবং অনেক বেশি ভাষা বিবেচনা করুন:

ফোর্টরান - 1957 (সি এর চেয়ে বেশি উচ্চ স্তরের নয়)

লিস্প - 1958

কোবল - 1959

ফোর্টরান চতুর্থ - 1961 (সি এর চেয়ে বেশি উচ্চ স্তরের নয়)

পিএল / 1 - 1964

এপিএল - 1966

প্লাসবোর্ড ভিত্তিক ইউনিট রেকর্ড সিস্টেম প্রতিস্থাপনের জন্য বেশিরভাগ একটি প্রোগ্রামিং ভাষা, আরপিজির মতো একটি মধ্য স্তরের ভাষা প্লাস (1959) Plus

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


2
আপনি যদি পুরানো, উচ্চতর ভাষাগুলির তালিকা করতে চান তবে এলআইএসপিটি ভুলে যাবেন না
ডিসেম্বর

@ প্রতিলিপি - আমি এটিকে তালিকায় যুক্ত করেছি। আমি আইবিএম মেইনফ্রেমগুলিতে কী ব্যবহার করা হয়েছিল সেদিকে মনোনিবেশ করছিলাম এবং আমি এলআইএসপি সেই জনপ্রিয় বলে মনে করি না, তবে এপিএল আইবিএম মেইনফ্রেমগুলি (সময় ভাগ করে নেওয়ার কনসোলের মাধ্যমে) এবং আইবিএম 1130-এরও একটি বিশেষ ভাষা ছিল L এলআইএসপি এর মতোই, এপিএল অন্যতম আরও অনন্য উচ্চ স্তরের ভাষাগুলি, উদাহরণস্বরূপ দেখুন এপিএলের বর্তমান সংস্করণ সহ কনওয়ের জীবনের গেমটি তৈরি করতে কতটা ছোট কোড লাগে তা দেখুন: youtube.com/watch?v=a9xAKttWgP4
rcgldr

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

আমার কাছে
ফোর্টরান

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

6

আপনার প্রশ্নের উত্তর নির্ভর করে এটি কোন সি ভাষা সম্পর্কে জিজ্ঞাসা করছে upon

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

1989/1990 সি স্ট্যান্ডার্ড প্রকাশিত হয়েছিল, তবে, এটি প্রকৃত মেশিন প্রোগ্রামিংয়ের জন্য জনপ্রিয় হয়ে ওঠা নিম্ন-স্তরের ভাষাটির বিবরণ দেয়নি, তবে এর পরিবর্তে উচ্চ স্তরের ভাষাটি বর্ণিত হতে পারে - তবে এটি হওয়ার দরকার ছিল না- নিম্ন স্তরের পদগুলিতে প্রয়োগ করা হয়েছে।

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

এই পার্থক্যটি বোঝার জন্য, রিচির ভাষা এবং সি 89 কোড স্নিপেটটি কীভাবে দেখবে তা বিবেচনা করুন:

struct foo { int x,y; float z; } *p;
...
p[3].y+=1;

একটি প্ল্যাটফর্মে যেখানে "চর" 8 বিট, "ইনট" 16 বিট বিগ-এন্ডিয়ান, "ফ্লোট" 32 বিট, এবং কাঠামোর কোনও বিশেষ প্যাডিং বা প্রান্তিককরণের প্রয়োজনীয়তা নেই তাই "স্ট্রাক্ট ফু" এর আকার 8 বাইট হয়।

রিচির ভাষায়, সর্বশেষ বিবৃতিটির আচরণটি "পি" এ সঞ্চিত ঠিকানাটি গ্রহণ করবে, এতে 3 * 8 + 2 [অর্থাৎ 26] বাইট যুক্ত করবে এবং ঠিকানায় এবং পরবর্তীটিতে বাইটগুলি থেকে 16-বিট মান আনবে , সেই মানটিতে একটি যুক্ত করুন এবং তারপরে একই দুটি বাইটে 16 বিটের মানটি লিখুন। আচরণটি সংজ্ঞায়িত করা হবে 26 ও 27 তম বাইটগুলি অনুসরণ করে অ্যাড্রেস পিতে নিম্নলিখিতটি কী ধরণের বস্তু সংরক্ষণ করা হয়েছিল তা বিবেচনা না করেই following

সি স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত ভাষায়, * পি যে "স্ট্রাক্ট ফু []" এর উপাদান চিহ্নিত করে যা এরপরে কমপক্ষে আরও তিনটি সম্পূর্ণ উপাদান অনুসরণ করে, শেষ বিবৃতিটি তার সদস্য সদস্যের সাথে যুক্ত করবে * পি এর পরে তৃতীয় উপাদান। আচরণটি অন্য কোনও পরিস্থিতিতে স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত করা হবে না।

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

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

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