অপারেটিং সিস্টেমগুলি সি এবং সি ++ এ নিম্ন স্তরের জিনিস কেন করে? শুধু সি ++ কেন নয়?


20

উপর Windows এর জন্য উইকিপিডিয়া পৃষ্ঠা , এটা যুক্তরাষ্ট্রের উইন্ডোজ বুট-লোডার এবং কার্য পরিবর্তনকারী জন্য পরিষদ লেখা আছে, এবং C এবং কার্নেল রুটিন জন্য সি ++।

আইআইআরসি, আপনি একটি extern "C"'ডি ব্লক থেকে সি ++ ফাংশন কল করতে পারেন । আমি কার্নেল ফাংশনগুলির জন্য সি ব্যবহার করতে পারি যাতে খাঁটি সি অ্যাপ্লিকেশনগুলি সেগুলি ব্যবহার করতে পারে (যেমন printfএবং তেমন), তবে সেগুলি যদি কেবল একটি extern "C "ব্লকে মোড়ানো যায় তবে সিটিতে কোড কেন?


10
আপনি কি বিভিন্ন "সি ++ থাকা অবস্থায় কেন সি ব্যবহার করবেন?" দেখেছেন? প্রশ্ন এখানে? এই অগত্যা তাদের কোন সদৃশ নয়, কিন্তু তারা হয় সংশ্লিষ্ট।

1
"আপনি বহিরাগত" সি "এর ডি ব্লক থেকে সি ++ ফাংশনগুলিকে সি ++ হিসাবে কল করতে পারেন" আপনার অর্থ আপনি কী সি ফাংশন কল করতে পারবেন ...?
কোড-গুরু

@ কোড-গুরু না, কারণ রপ্তানি সি এবং সি ++ ফাংশন মধ্যে একমাত্র পার্থক্য নাম প্রসাধন এবং সি ++ এর সমষ্টি thisপরিবর্তনশীল
কোল জনসন

2
একটি আইএসআরে একটি ব্যতিক্রম ছুঁড়ে ফেলুন এবং দেখুন কী হয়
জেমস

তবুও অন্য সি বনাম সি ++ প্রশ্ন।
মাচাদো

উত্তর:


31

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


+1, আমি অনুমান করি যে এটি সবচেয়ে বাস্তবসম্মত উত্তর (এ ছাড়াও এমন কিছু উইন্ডোজ কার্নেল ডেভস থাকতে পারে যারা কেবল সি ++ পছন্দ করেন না বা সেই নিম্ন স্তরের স্টাফের জন্য সি ++ সংকলককে বিশ্বাস করেন না)) উদাহরণস্বরূপ দেখুন, এখানে stackoverflow.com/questions/520068/… , কেন লিনাক্স কার্নেল সিটিতে লেখা হয়
ডক ব্রাউন

@ back2dos - যদিও তাদের সি কোডটি ফেলে দেওয়া হবে না এর অর্থ এটি ব্যবহার করা হবে বা আপডেট হবে না। আমি আপনাকে গ্যারান্টি দিচ্ছি যে কমপক্ষে একটি পদ্ধতি রয়েছে যা এমন কিছু করে যা মূলত রচিত হয়েছিল এবং একটি সি লাইব্রেরির মধ্যে রয়েছে যা উইন্ডোজ 8
রামহাউন্ড

8
আমার বিশ্বাস করতে খুব কষ্ট হয় যে উইন্ডোজটির সাম্প্রতিক প্রকাশে উইন্ডোজ 1.0 কোড রয়েছে। উইন্ডোজ এমই সর্বশেষ উইন্ডোজ রিলিজ যা উইন্ডোজ এনটি কোড বেসের ভিত্তিতে নয়। এমনকি এটি মূলত নতুন আরটি কার্নেল দ্বারা প্রতিস্থাপন করা হয়েছে (যা আমি বুঝতে পেরেছি, পিছনের সামঞ্জস্যের পথে খুব একটা প্রতিশ্রুতি দেয় না)।
টিএমএন

@ টিএমএন: যুক্তিটি সম্ভবত সম্ভবত সঠিক - আমি উইন 1.0 থেকে শুরু করে এখন পর্যন্ত সিটিতে প্রচুর গ্রন্থাগার ছিল যা এখনও বর্তমান উইন 8 কোড বেসের অংশ, এবং এমএস-এ কেউ দেখেনি এগুলিকে C ++ এ পুনরায় লিখতে সুবিধা।
ডক ব্রাউন

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

24

যেহেতু বেশিরভাগ লোকেরা উল্লেখ করেছেন, কারণগুলি অনেক areতিহাসিক, তবে অন্যরকম কিছু উল্লেখ করা হয়নি এবং আমি বিশ্বাস করি যে এটি এখনও লোকেরা নিম্ন-স্তরের জন্য সি কোড লেখেন।

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

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

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


4
খাঁটি সিতে মিশন সমালোচনামূলক সফ্টওয়্যার উল্লেখ করার জন্য +1 (যেমন অ্যারোনটিকাল সফ্টওয়্যার)। তবে, মেডিকেল সফ্টওয়্যারটিতে সি ++ ব্যবহার করা হয় (একটি আনুষ্ঠানিক যাচাইয়ের পরিবর্তে বিস্তৃত পরীক্ষা করা হয়, যা সি ++ তে অত্যন্ত শক্ত হবে)।
জর্জিও

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

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

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

2
এটি সঠিক হিসাবে এটি সেরা উত্তর হিসাবে নির্বাচন করা উচিত ছিল। অন্যরা যারা সি এর প্রস্তাব কেবল historicalতিহাসিক কারণে ব্যবহার করে তা হিস্টিরিয়াল।
রব

15
  1. সি রানটাইম অনেক ছোট।
  2. নিম্ন স্তরের কনস্ট্রাক্টগুলিতে সি ++ এর অনুবাদ সি এর তুলনায় স্বচ্ছ নয় (দুটি দ্রুত উদাহরণের জন্য রেফারেন্স এবং vtables দেখুন)
  3. সি সাধারণত একটি স্থিতিশীল এবিআই থাকে। সি ++ সাধারণত হয় না। এর অর্থ হ'ল ন্যূনতম, সিস্টেম কল ইন্টারফেসটি সি স্টাইল হওয়া উচিত। তদতিরিক্ত, আপনি যদি কোনও ধরণের গতিশীল মডিউল চান তবে সামঞ্জস্যপূর্ণ এবিআই থাকা আপনাকে যথেষ্ট সহায়তা করে।

(2) এবং (3) এর জন্য +1। আমি (1) এর সাথে বিশ্বাসী নই।
থমাস এডিং

7
@ থমাস এডিং: সি ++ রানটাইমটিতে সি রানটাইম, প্লাস সি ++ বৈশিষ্ট্য যেমন ব্যতিক্রম, আরটিটিআই এবং অন্য মেমরি বরাদ্দকারী রয়েছে। ওয়াইএমএমভি হিসাবে এটি যে আরও বৃহত্তর গণনা করা হয়েছে । (এবং তারপরে স্ট্যান্ডার্ড লাইব্রেরি আছে ...)
জানুন

আহ, আমি ব্যতিক্রম এবং নতুন / পুল মুছার কথা ভুলে গেছি। আরটিটিআই আমি যদিও কখনও ব্যবহার করি না: ডি
টমাস এডিং

11

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

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


6

কার্নেল বিকাশকারীরা প্রায়শই এমন ধরণের লোক হন, যারা আনন্দিত হন, যখন উত্স থেকে তাৎক্ষণিকভাবে স্পষ্ট হয়ে যায়, কোডটি আসলে কী করে।

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

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

তবে কার্নেল এপিআই কোনও সি ++ এপিআই হতে পারে না, এটি অবশ্যই একটি ভাষা-অজ্ঞাত এপিআই হতে হবে, সুতরাং সি ++ এর বেশিরভাগ সুন্দর জিনিস সেই ইন্টারফেসে সরাসরি ব্যবহারযোগ্য হবে না। তদ্ব্যতীত, কার্নেলটি সত্যতই "লাইব্রেরি" এবং "অ্যাপ্লিকেশন" অংশগুলিতে বিভক্ত নয় যা আরও বেশি প্রচেষ্টা সহ যৌক্তিকভাবে একটি লাইব্রেরিতে যায়, যাতে প্রচুর অ্যাপ্লিকেশন তৈরির কাজ সহজ হয়।

এছাড়াও, কার্নেলের অভ্যন্তরে সুরক্ষা এবং স্থিতিশীলতা আরও গুরুতর, এবং ভার্চুয়াল পদ্ধতিগুলি আরও বেশি গতিশীল এবং তাই সাধারণ কলব্যাকস বা অন্যান্য সি-মত প্রক্রিয়াগুলির তুলনায় বিচ্ছিন্ন এবং যাচাই করা আরও শক্ত।

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


+1 টি। কার্নেল বিকাশকারী হিসাবে আমার "থাম্বের নিয়ম" হ'ল যদি আপনি "ক্যাশে লাইনগুলি স্পর্শ" সহজেই অনুমান করতে না পারেন তবে আপনি যে ভাষাটি ব্যবহার করছেন সেটি ভালর চেয়ে বেশি ক্ষতি করছে।
ব্রেন্ডন

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

5

১৯৯ 1999 সালের জুলাইয়ের এক সাক্ষাত্কারে বাজার্ন স্ট্রস্ট্রপ :

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


2
স্বাগতম ডেভিড। উদ্ধৃতি দেওয়ার সময় বা উদ্ধৃতি দেওয়ার সময়, একটি রেফারেন্স সরবরাহ করা ভাল ধারণা (যুক্ত হয়েছে!)
অ্যান্ড্রু

3

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

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

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


2
দক্ষতা সম্পর্কে, আমি নিজেকে পুনরাবৃত্তি করব: (1) সি ++ জনগণ আপনাকে বলবে যে এটি বুলিশিট। (২) আমি বলছি যে এটি হওয়া উচিত তার কোনও কারণ আমি দেখতে পাচ্ছি না, এবং এর দৃ concrete় উদাহরণ চাই। কম দক্ষ কোড লিখতে কীভাবে সহজ, তার উদাহরণ নয়, তবে সি এর মতো দক্ষ হওয়া কীভাবে অযৌক্তিক কদর্য প্রয়োজন examples

3
"কুশ্রী" সংজ্ঞায়িত করুন; আমি জীবিতের জন্য সি # তে কোড করি এবং যখনই আমি স্ট্যাকওভারফ্লোতে সি ++ কোডের উদাহরণ দেখি আমি ভাষার ক্রমবর্ধমান দিনের ব্যবহারে ক্রুফটকে কতটা স্বাভাবিক বলে বিবেচনা করা হয় সেটিতে ক্রিঙ্ক করি। আমি যখন সি ++ এ কোড করেছিলাম যখন ফিরে আসি, আমি প্রায়শই সি কোডটি দেখেছিলাম এবং ক্রিংড ছিলাম; হ্যান্ড-প্যাকিং কাঠামোর ধরণ, ম্যানুয়াল জাম্পগুলির জন্য এক্সিকিউশন পয়েন্টার গণনা, এম্বেড হওয়া এএসএম ... ইয়াক। কিছু লোক জাভা /। নেট প্রোগ্রামারদের মধ্যে নিম্ন-স্তরের জ্ঞানের ক্ষতির জন্য শোকে; আমি এটিকে উত্পাদনশীলতার জন্য একটি বিশাল वरदान হিসাবে বিবেচনা করি।
কিথস

1
আপনি আমার প্রশ্নের উত্তর দেননি;) "কুরুচিপূর্ণ" দ্বারা আমি "C ++ গুরুদের মানদণ্ডে কুৎসিত" বলতে চাইছি। অন্য কথায়, উদাহরণস্বরূপ যেখানে কেউ "আধুনিক সি ++" ব্যবহার করতে পারে না এবং সি হিসাবে দক্ষ হতে পারে

2
এটি সত্য হতে পারে (আমি সৎভাবে জানি না)। কার্নেল বিকাশের জন্য (এবং কয়েকটি অন্যান্য ক্ষেত্র), আমরা যদিও গড় প্রোগ্রামারগুলির বিষয়ে কথা বলছি না।

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

1

এটি এমন হতে পারে যে সি এর সাথে আপনি বেশিরভাগ সময় হাতের সমস্যার কথা এবং কীভাবে সমাধানটি কোড করবেন তা ভেবে ব্যয় করেন। সি ++ এ আপনি সি ++ এবং এর বৈশিষ্ট্য, ফাংশন এবং অস্পষ্ট সিনট্যাক্সের অগণিত সম্পর্কে চিন্তাভাবনা শেষ করেন।

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

আমার অভিজ্ঞতা হ'ল সমস্ত চতুর বৈশিষ্ট্য এবং সি ++ এর ওও বিশুদ্ধতার জন্য, সরল সিতে কোডিং কাজটি দ্রুত এবং আরও কার্যকরভাবে সম্পন্ন করে।


0

এটি সম্ভব যে সি অংশগুলি সি ++ অংশগুলির জন্য ব্যবহৃত সি ++ সংকলকটিতে সুন্দরভাবে বহনযোগ্য নয়। সি কোডটি সি কম্পাইলারের সাথে সি ++ কম্পাইলারের সাথে যেভাবে ভেঙে যায় তা চিমিযুক্ত।

আপনার যদি মানের সি ++ সংকলক থাকে তবে কোনও প্রকল্পে সি এবং সি ++ মিশ্রণের প্রায় কোনও কারণ নেই। প্রায়।

এর এক কারণ হ'ল আপনার প্রকল্পটি অন্যান্য প্রকল্পের সাথে সি কোড ভাগ করে, কোডটি সি ++ হিসাবে সংকলন করে না এবং আপনি সেই কোডটির সি ++ কাঁটাচামারী বজায় রাখতে চান না।


-1

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


-2

প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে সি ব্যবহার করে বিভিন্ন স্তরের এম্বেড প্ল্যাটফর্ম রয়েছে (অবশ্যই যে কোনও সময় সমাবেশের ভাষা ব্যবহার করা আপনার স্বাধীনতা)

'স্তর' এর জন্য আমি একটি সিস্টেমের জন্য অভ্যন্তরীণ এসআরএএম এবং রম সংস্থান স্তর সম্পর্কে কথা বলছি।

এই প্ল্যাটফর্মগুলি কখনও কখনও রিসোর্স সীমাবদ্ধ হয় (উদাহরণস্বরূপ কিছু 8051 প্ল্যাটফর্মগুলিতে কেবল ব্যবহারকারী এসআরএএম এর 128 বাইট থাকে)।

র‌্যামের জন্য এত অল্প পরিমাণে গতিশীল মেমরির বরাদ্দকে সমর্থন করা অর্থহীন। (নতুন / মুছুন) বা এমনকি সিলে ম্যালোক

সি থেকে সি ++ এর মূল উন্নতির একটি হ'ল অবজেক্ট-ওরিয়েন্টেড দৃষ্টান্ত। সি ++ আরও বড় মেমরির পদক্ষেপ সহ সফ্টওয়্যারে উপযুক্ত

তবে এম্বেড থাকা ফার্মওয়্যারগুলিতে নয় যার 32KB অবধি আকারের সীমাবদ্ধতা রয়েছে। (যেমন 16 বিট এমসিইউ প্লাটফর্মে)

একটি সি ++ সংকলক লাগবে না যা সাধারণত সি সংকলকটির চেয়ে জটিল। (কমপক্ষে এসডিকে সরবরাহকারীরা এটি করতে বিরক্ত করবেন না)।

প্রকৃতপক্ষে আমি 32-বিট এআরএম 7 প্ল্যাটফর্মের মাধ্যমে খুব কমই একটি সি ++ সংকলক খুঁজে পেতে পারি।

এটি কেবল জটিলতার পক্ষে মূল্য দেয় না

কিছু 8051 (8 বিট) এ: 1 এমবি রম, 128 বি র‌্যাম

টিআই এমএসপি 430 (16 বিট): 32 কেবি রম, 4 কেবি র‌্যাম

এসটি মাইক্রো ইলেক্ট্রনিক্স এআরএম 32-বিট কর্টেক্স M -M3 সিপিইউ কোর (এসটিএম 32 এফ 103 টি 4): এসআরএম এর 16 বা 32 কেবিটস ফ্ল্যাশ মেমরি 6 বা 10 কেবিট


2
ইতিমধ্যে এখানে পোস্ট করা অন্যান্য জবাবগুলিতে এটি নতুন কিছু নয়।
মার্টিজান পিটারস

এআরএম এর জন্য একটি 32-বিট সি ++ সংকলক? আপনি যদি চান, আপনি আইওএসের জন্য সি ++ সংকলক পেতে কয়েকটি পরিবর্তনের পরে উত্স থেকে এলএলভিএম সংকলন করতে পারবেন।
কোল জনসন 19

-4

আমি কয়েকটি সম্ভাব্য কারণ দেখছি:

  • সি ++ সমমানের সাথে তুলনা করা হলে সি কিছুটা বেশি দক্ষ।
  • কিছু গ্রন্থাগার তারা ব্যবহার করে সি-তে লেখা থাকে
  • তারা লিনাক্স কার্নেলের কিছু অংশ ব্যবহার করে যা সি তে লেখা হয়

সম্পাদিত: দেখা যাচ্ছে যে তৃতীয় যুক্তি সত্য নয় (মন্তব্য দেখুন)।


5
(1) সি ++ লোকেরা পৃথক হতে অনুরোধ করবে। এবং অবজেক্টিভ আমি দেখতে পাচ্ছি যে এরকম হওয়া উচিত নয়। (২) সি ++ সি কোডটিতে ঠিক সূক্ষ্ম কল করতে পারে (এটি পিছনের সামঞ্জস্যের পুরো পয়েন্ট এবং extern "C")।

1
এমএস যদি লিনাক্স কার্নেলের কিছু অংশ ব্যবহার করে এবং লিনাক্স কার্নেলটি জিপিএল হয়, তবে এর অর্থ কি উইন্ডোজকেও জিপিএল হতে হবে না?
টমজে

1
@ টমজে আসলে এই কারণেই লিনাক্সকে কয়েক হাজার লাইন দান করতে বাধ্য হয়েছিল। + আপনি কী ভাবেন যে তারা লিনাক্স বিকাশ সমর্থন করে?
পাইজুসন

2
@ পিয়াস তাঁর বক্তব্যটি (এবং তিনি সত্যই এএফআইকে), যদি উইন্ডোজ কার্নেলের সাথে জিপিএল কোড যুক্ত থাকে তবে পুরো কার্নেলটি জিপিএলড করতে হবে (কপিরাইটধারীদের সাথে পৃথক চুক্তি না থাকলে)।

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

-4

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

এবং কারণ সি ++ এর প্রচুর বৈশিষ্ট্য রয়েছে যা কার্নেলের ব্যবহারের সময় আপনি যত্নবান না হন তবে আপনার কোডটি ভেঙে ফেলতে পারে।


সি ++ ডায়নামিক লাইব্রেরি আশা করে? এবং গতিশীল স্মৃতি কি?

4
-1 এর জন্য [stuff] that C++ expects। সি ++ কেন সি এর চেয়ে বেশি গাদা ব্যবহার করে? সি ++ এর চেয়ে সি এর চেয়ে বেশি ঘরের দরকার কেন? কেবল সত্য নয়
থমাস এডিং

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

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

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