সি ++ এম্বেড থাকা সিস্টেমগুলির জন্য উপযুক্ত?


168

একটি সাধারণ প্রশ্ন, এখানে এবং অন্য কোথাও। সি ++ এম্বেড থাকা সিস্টেমগুলির জন্য উপযুক্ত?

মাইক্রোকন্ট্রোলারের? RTOSes? টোস্টার? এম্বেড পিসি?

মাইক্রোকন্ট্রোলারগুলিতে কি ওওপি কার্যকর?

সি ++ কার্যকর হওয়ার জন্য হার্ডওয়্যার থেকে প্রোগ্রামারটিকে খুব দূরে সরিয়ে দেয়?

আরডুইনোর সি ++ (কোনও গতিশীল মেমরি পরিচালনা, টেমপ্লেট, ব্যতিক্রম ছাড়া) "রিয়েল সি ++" হিসাবে বিবেচনা করা উচিত?

(আশা করি, এই উইকি এই সম্ভাব্য পবিত্র যুদ্ধকে ধারণ করার জায়গা হিসাবে কাজ করবে)


5
তাত্ক্ষণিক প্রশ্ন: আপনি যখন এমবেড বলেছেন , আপনি কি মাইক্রোকন্ট্রোলার বোঝাতে চান? মাইক্রোপ্রসেসর? এম্বেডেড x86 / এম্বেড পিসি?
জে.পলফার

1
আমি কোন পবিত্র যুদ্ধের ইচ্ছা করি নি; উদ্দেশ্যটি ছিল আপনার যুক্তিগুলি এর বিরুদ্ধে কী ছিল তা শিখতে হবে।
জে.পলফার

2
এটি আগে বেশ কয়েকটি প্রশ্নের মধ্যে উঠে এসেছে, তাই আমি ভেবেছিলাম একটি কেন্দ্রীয় জায়গা ভাল হবে।
টবি জাফি

4
সি ++ বনাম এম্বেড করা একটি বিতর্কিত বিষয়। আমার দৃ strong় মতামত আছে তবে আমি প্রশ্ন উত্থাপন এবং স্কোরিং পয়েন্টগুলিতে খেলাই মোটামুটি মনে করি নি। আমি আশা করি একটি সম্প্রদায় উইকি আরও সুষম আলোচনার জন্য তৈরি করবে।
টবি জাফি

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

উত্তর:


135

হ্যাঁ, সি ++ এম্বেড থাকা সিস্টেমে এখনও কার্যকর। যেমনটি অন্য সবাই বলেছে, এটি এখনও সিস্টেমের উপর নির্ভর করে, 8-বিট ইউসির মতো সম্ভবত আমার বইতে একটি নোংরা হবে যদিও সেখানে একটি সংকলক রয়েছে এবং কিছু লোক এটি (কাঁপানো) করে do আপনি যখন 8-বিট মাইক্রো ওয়ার্ল্ডে এমনকি "সি +" এর মতো কিছুতে এটি স্কেল করেন তখনও সি ++ ব্যবহার করার সুবিধা রয়েছে। "সি +" বলতে আমি কী বুঝি? আমার অর্থ নতুন / মুছুন না, ব্যতিক্রমগুলি এড়াবেন না, উত্তরাধিকারের সাথে ভার্চুয়াল ক্লাসগুলি এড়িয়ে চলুন, সম্ভবত একসাথে উত্তরাধিকার এড়িয়ে চলুন, টেমপ্লেটগুলির সাথে খুব সাবধান থাকুন, ম্যাক্রোর পরিবর্তে ইনলাইন ফাংশন ব্যবহার করুন এবং constপরিবর্তে পরিবর্তনশীল ব্যবহার করুন #defines

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

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

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

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

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

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


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

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

2
এটি কেবল আপনাকে দংশনকারী বাগগুলি নয়, অবিস্মরণীয় কোড যা আপনাকেও কামড় দেবে। অবশ্যই, আপনি যখন সেই প্রকল্পগুলি প্রচ্ছন্ন সি ++ ব্যবহার করে শুরু করেন তখন সবকিছু সাঁতার কাটে, তবে 2 বা 3 বছর পরে যদি আপনার বিকাশের সাথে কোনও গুরুতর প্রচেষ্টা না নেওয়া হয় তবে এনট্রপিকে কিক দেওয়া হবে। আমি এখনই এটির মুখোমুখি হয়েছি he সি ++ তে সময়ের সাথে সাথে কোডগুলি দ্রুতগতিতে আসে।
জে অ্যাটকিনসন

2
ইউএমএল এবং স্টেটম্যাচাইনস। আপনাকে সত্যই রাষ্ট্র-ম্যাচ.কম.কমের মিরো সামেকের স্টাফগুলিতে নজর দেওয়া দরকার । তিনি একটি দক্ষ সিস্টেম তৈরি করেছেন যা সহজেই চুল্লী এবং পরিবর্তন করতে সহজ, তবে এটি ছাঁটাই করতে কিছুটা সময় নেয় না।
জে অ্যাটকিনসন

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

56

এম + এম্বেড থাকা সিস্টেমগুলির জন্য সি ++ একেবারে উপযুক্ত। আমি এখন কোনও নির্দিষ্ট মাইক্রোপ্রসেসর ব্যবহার করব কিনা তা আমার প্রাথমিক মানদণ্ড হিসাবে ভাল বিকাশের সরঞ্জামগুলির উপস্থিতি / অনুপস্থিতি (বা এর অভাব) ব্যবহার করি।

এম + এম্বেড করা সিস্টেমগুলিতে সি ++ এর ক্ষেত্রগুলি ব্যবহার করা ভাল কারণ তাদের সংস্থান কম রয়েছে:

  • ক্লাস / স্ট্রাকচারের ভাল ব্যবহার করে মডুলারিটি আনা হয়েছে
  • টেমপ্লেটগুলি যদি সংকলক দক্ষতার সাথে তাদের সংকলনের একটি ভাল কাজ করে। টেমপ্লেটগুলি বিভিন্ন ডেটা ধরণের অ্যালগরিদমের পুনঃব্যবহারের জন্য একটি ভাল সরঞ্জাম।

ঠিক আছে অঞ্চলগুলি:

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

অঞ্চলগুলি ব্যবহার না করা, বেশিরভাগ রান-টাইম ওভারহেডের কারণে যা ছোট সিস্টেমে অগ্রহণযোগ্য is

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

ইনপুট জন্য ধন্যবাদ। আকর্ষণীয় এবং আমি যা পড়েছি তার সাথে খুব মিল।
কর্টুক

1
আসলে গতিশীল মেমরির বরাদ্দ ভাল, এবং কখনও কখনও অনিবার্য। এটি ডায়নামিক মেমরি ডিএলোকেশন (এবং পরবর্তী পুনরায় ব্যবহার) যা সমস্যা। আরটিটিআই হ'ল মেমরি হোগ, আমি এটির সাথে একমত। তবে ব্যতিক্রম নিয়ে কী সমস্যা?
ওয়াউটার ভ্যান ওইজেন

1
@ ওউটারওয়ানওইজেন: ব্যতিক্রমগুলির সাথে সমস্যাটি হ'ল যদি একটি / ব্লকের মধ্যে fooকল হয় এবং কিছু অবজেক্ট এবং কলগুলি তৈরি করে যা একটি ব্যতিক্রম ছুঁড়ে ফেলে, সিস্টেমটি নিয়ন্ত্রণে ফিরে আসার আগে তৈরি হওয়া অবজেক্টগুলির জন্য বিনষ্টকারীদের কল করতে হয় । ব্যতিক্রমগুলি সম্পূর্ণরূপে অক্ষম করা না থাকলে, কোনওরকম নিক্ষিপ্ত হতে পারে কিনা তা জানার কোনও উপায় থাকবে না এবং এই সম্ভাবনার পক্ষে অনুমতি দেওয়ার জন্য অতিরিক্ত কোড অবশ্যই অন্তর্ভুক্ত করতে হবে। আমি এটি মোকাবেলায় "চেক করা ব্যতিক্রমগুলি" সহ সি ++ এর ভিন্নতা দেখতে চাই; যদি রুটিনগুলি যা ব্যতিক্রমগুলি পালানোর অনুমতি দিতে পারে ...bartrycatchbarbozbarfoobarboz
সুপারক্যাট

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

3
@ ওউটারওয়ানওইজেন: প্রসঙ্গক্রমে, আমি যদি এআরএম-এ এই জাতীয় ব্যতিক্রম হ্যান্ডলিংয়ের জন্য যদি এবিআই ডিজাইন করতাম, তবে আমি সেই কোডটি উল্লেখ করতাম যা একটি রুটিনকে কল করে যা ব্যতিক্রম হয়ে প্রস্থান করতে পারে কাঙ্ক্ষিত ফেরতের ঠিকানার আগে একটি ঠিকানা দুটি বাইটে আর 14 পয়েন্ট থাকা উচিত (এটি হবে কলর যদি 16-বিট শব্দের মাধ্যমে কল নির্দেশ অনুসরণ করে তবেই স্বাভাবিকভাবে ঘটে। নামক রুটিনটি তখন সাধারণত add r15,r14,#2পরিবর্তে বাইরে বেরিয়ে আসত mov r15,r14; ব্যতিক্রম মাধ্যমে প্রস্থান করতে ldrhs r0,[r14] / add r15,r14,r0,। স্বাভাবিক প্রস্থানের জন্য জিরো চক্রের ব্যয় এবং স্ট্যাক-ফ্রেমের কোনও বিধিনিষেধ নেই।
সুপারক্যাট

37

হ্যাঁ, সি ++ এম্বেড থাকা সিস্টেমগুলির জন্য অবশ্যই উপযুক্ত। প্রথমে সি এবং সি ++ এর মধ্যে পার্থক্য সম্পর্কে কয়েকটি ভুল ধারণা মুছে ফেলা যাক:

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

a[i] = b[j] * c[k];

এই ভেরিয়েবলগুলির প্রকৃতির উপর নির্ভর করে প্রায় 4 পৃষ্ঠাগুলির নির্দেশাবলী উত্পন্ন করতে পারে।

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

এম এম্বেড এমসিইউগুলির জন্য সি কি উপযুক্ত? হ্যাঁ, যতক্ষণ না আপনি উত্পন্ন কোডটিতে নজর রাখবেন।
এম্বেড এমসিইউগুলির জন্য কি সি ++ উপযুক্ত? হ্যাঁ, যতক্ষণ না আপনি উত্পন্ন কোডটিতে নজর রাখবেন।

এখানে আমি কেন 8-বিট এমসিইউতে এমনকি সি ++ সি এর চেয়ে ভাল বলে মনে করি: সি ++ এর জন্য উন্নত সমর্থন সরবরাহ করে:

  • তথ্য গোপন করা হচ্ছে
  • শক্তিশালী টাইপিং / চেকিং
  • ক্লাস ব্যবহার করে একাধিক পেরিফেরিয়াল স্বচ্ছতা
  • টেমপ্লেটগুলি (সর্বদা সতর্কতার সাথে ব্যবহৃত হলে)
  • সূচনা তালিকা
  • const

এই বৈশিষ্ট্যগুলির কোনওটি সি এর বৈশিষ্ট্যযুক্ত বৈশিষ্ট্যের চেয়ে কোনও ভারী নয়

আপনি 16 বা 32 বিট এমসিইউতে চলে যাওয়ার পরে, সি এর ভারী বৈশিষ্ট্যগুলি (স্ট্যাক, হিপ, পয়েন্টার, অ্যারে, প্রিন্টফ ইত্যাদি) ব্যবহার করা বুদ্ধিমান হতে শুরু করে একই পদ্ধতিতে, আরও শক্তিশালী এমসিইউ যথাযথ হয়ে ওঠে সি ++ এর ভারী বৈশিষ্ট্যগুলি ব্যবহার করতে (স্ট্যাক, গাদা, রেফারেন্স, এসটিএল, নতুন / মুছুন)।

সুতরাং, একটি পিক 16 এ সি ++ এর চিন্তায় কাঁপানোর দরকার নেই। আপনি যদি নিজের ভাষা এবং আপনার এমসিইউ সঠিকভাবে জানেন তবে আপনি কীভাবে উভয়কে কার্যকরভাবে একসাথে ব্যবহার করবেন তা আপনি জানতে পারবেন।


3
এটি প্রশ্নের একটি খুব ভাল প্রকাশিত এবং যুক্তিসঙ্গত উত্তর। +1 চিয়ার্স!
ভিসাতচু

1
" a[i] = b[j] * c[k];এই ভেরিয়েবলগুলির প্রকৃতির উপর নির্ভর করে নির্দেশের প্রায় 4 পৃষ্ঠাগুলি উত্পন্ন করতে পারে।" যদি আপনার এমসিইউ / সংকলক এটি করে, এটি কারণ আপনি 80 এর দশক থেকে কিছু গ্যারেজ শখের সিপিইউ ব্যবহার করছেন।
লন্ডিন

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

2
@ রকেটম্যাগনেট ঠিক আছে 1990 এর দশকে? আজকাল কৃপণ 8 বিটার 32 বিটার হিসাবে একই দামে আসে। প্রাক্তনটিকে বাছাইয়ের একমাত্র কারণ হ'ল বর্তমান খরচ। এবং কোনও স্ট্যাকহীন অতিরিক্ত-কৃপণ 8-বিটার সম্পর্কিত: আপনি যদি এই জাতীয় সীমাবদ্ধ এমসিইউয়ের জন্য এসেম্বলারের পরিবর্তে সি লিখছেন, আপনি সম্ভবত এটি ভুল করছেন। উত্পন্ন 4 পৃষ্ঠাগুলি তখন সিপিইউর জন্য খুব জটিল প্রোগ্রাম লেখার জন্য আপনার নিজের ত্রুটি এবং মূলত সিটি কার্যটির জন্য ভুল সরঞ্জাম। (আমি ফ্রিস্কেল আরএস08 এ অতীতে এটি করেছি, এটি একটি অত্যন্ত মূ idea় ধারণা ছিল))
লন্ডিন

@ লন্ডিন 32-বিট প্রসেসর 16-বিটের চেয়ে দ্রুত কোনও প্রয়োজন হয় না। পিসি বিশ্বে 16-32-বিবিট প্রোগ্রামের ট্রানজিশন চলছিল সেদিনের এই বিষয়টি স্পষ্টতই প্রকাশিত হয়েছিল।
বার্লিম্যান

24

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

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

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

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

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

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

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

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

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

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

এই অভিজাতটি নিয়ে কিছুটা দূরে থাকায় দুঃখিত, এই বিষয়ে আমার বেশ দৃ strong় মতামত রয়েছে।


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

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

1
PRD = পণ্যের প্রয়োজনীয়তা নথি, এমআরডি = বিপণনের প্রয়োজনীয়তা নথি, টিআরডি = প্রযুক্তিগত প্রয়োজনীয়তা নথি। টিডিডি = পরীক্ষা চালিত বিকাশ।
জে অ্যাটকিনসন

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

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

17

যে কোনও ভাষা এম্বেড থাকা সিস্টেমের জন্য উপযুক্ত হতে পারে। এম্বেডের অর্থ হ'ল: একটি বিনামূল্যে-ব্যবহারযোগ্য কম্পিউটারের বিপরীতে বৃহত্তর যন্ত্রপাতিগুলির অংশ।

যখন (হার্ড) রিয়েল টাইম বা সীমিত-সংস্থান সিস্টেমের জন্য জিজ্ঞাসা করা হয় তখন প্রশ্নটির আরও প্রাসঙ্গিকতা রয়েছে ।

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

খুব রিসোর্স-সীমাবদ্ধ সিস্টেমের জন্য (8-বিট চিপস, কয়েক কেবি র্যামের চেয়ে কম, অ্যাক্সেসযোগ্য স্ট্যাক) পূর্ণ সি ++ অপরিহার্য হতে পারে, যদিও এটি এখনও আরও ভাল সি হিসাবে ব্যবহার করা যেতে পারে।

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

================================================== ==============

সম্পাদনা: আমি নতুন প্রশ্নের উত্তর লিখছিলাম ("আমরা মাইক্রোকন্ট্রোলারগুলি প্রোগ্রামিং করার সময় কোন ক্ষেত্রে সি ++ প্রয়োজনীয়"?) যা এই প্রশ্নের উত্তর উল্লেখ করে বন্ধ করা হয়েছিল, তাই আমি যা লিখেছি তা যুক্ত করব:

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

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

ছোট ব্লগগুলিতে (= মাইক্রো-কন্ট্রোলার) সি ++ ব্যবহার করার বিষয়ে আমার ব্লগে কিছু লেখাগুলি রয়েছে।


15

আমার অভিজ্ঞতায়, সি ++ সাধারণত ছোট এম্বেডড সিস্টেমে অসুস্থ। যার অর্থ, মাইক্রোকন্ট্রোলার এবং ওএস-কম ডিভাইস।

অনেক সি ++ ওওপি কৌশল গতিশীল মেমরি বরাদ্দের উপর নির্ভর করে। এটি প্রায়শই ছোট সিস্টেমে অনুপস্থিত।

এসটিএল এবং বুস্ট সত্যই সি ++ এর শক্তি প্রদর্শন করে, উভয়ই পদক্ষেপে বিশাল।

সি ++ প্রোগ্রামারটিকে মেশিনটি দূরে রাখতে উত্সাহিত করে, যেখানে সীমাবদ্ধ সিস্টেমগুলিতে এটি আলিঙ্গন করতে হয়।

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


আমি ছোট সিস্টেমে রেফারেন্সে একমত, তবে আমি মনে করি আমাদের ছোট সিস্টেমগুলির বিভিন্ন সংজ্ঞা রয়েছে। আপনার কাছে যখন রম 1kB থাকে এবং ভাল লিখিত সি কোডটি ROM এর 1 বাইট ব্যতীত সমস্ত লাগে, এটি একটি ছোট সিস্টেম।
কর্টুক

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

4
সুতরাং আপনার বক্তব্যটি কী আপনি সি ++ ব্যবহার করতে চান না, আপনি সি এবং সি ++ এর মধ্যে কিছু ব্যবহার করতে চান (কেবল এটি সি + বলতে পারি?)। সেক্ষেত্রে আমি সম্মত হচ্ছি, সি ++ এর লোকেরা প্রচুর বকাঝকা ব্যবহার করে কারণ এটি উপলব্ধ because প্রায় কোনও ভাষাই ভাল, দ্রুত কোড তৈরি করতে সক্ষম, এটি এটি কীভাবে ব্যবহৃত তা বিষয়। ভাষাগুলির উপরে সর্বাধিক পবিত্র যুদ্ধগুলি ভাষাগুলির ক্ষমতার ফলাফল নয় তবে একজন বোকা মানুষের পক্ষে বোকা কাজ করা কতটা সহজ তার পক্ষে যুক্তি, যা সত্যই একটি মূর্খ যুক্তি: p
মার্ক

2
"ভাষাগুলির উপর সর্বাধিক পবিত্র যুদ্ধগুলি ভাষাগুলির ক্ষমতার ফলাফল নয় তবে একজন বোকা লোকের পক্ষে বোকামি কাজ করা কতটা সহজ এটির পক্ষে যুক্তি, যা সত্যই একটি বোকামি যুক্তি" " খুব উপভোগ্য বাক্য ছিল। আমার আপনার শেষ নাম দরকার তাই আমি সেইটির উদ্ধৃতি দিতে পারি।
কর্টুক

1
আমি যদিও সি তে ডায়নামিক মেমরিটি ব্যবহার করি না। আমার কাছে এটি কোথাও নেই। দীর্ঘমেয়াদে আমি পড়েছি যে এটি খুব বিভাজন পেতে পারে এবং সমস্যা তৈরি করতে শুরু করে। স্মৃতিশক্তি ফুরিয়ে যাওয়ার জন্য আমার খুব স্পষ্টভাবে ডিজাইন করা মামলাগুলি থাকা দরকার এবং ঠিক কতটা বাকি রয়েছে তা নিরীক্ষণ করতে সক্ষম হওয়া দরকার।
কর্টুক

11

আমি বেয়ার মেটাল এবং রিসোর্স সীমাবদ্ধ সিস্টেমগুলিতে সি ++ সম্পর্কে এই আলোচনায় উত্তাপের চেয়ে আরও আলো বাড়ানোর আশা করি।

সি ++ এ সমস্যা:

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

  • আরটিটিআই সম্ভবত কখনই ওভারহেডের পক্ষে মূল্যবান নয়, এটি বন্ধ করা উচিত

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

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

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

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

উপসংহারে সি ++ এর কিছু সমস্যা রয়েছে তবে সেগুলি মূলত সমস্ত স্থিরযোগ্য বা এড়ানো যায়।

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

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

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

দিনের শেষে একটি সি দল প্রায়শই তার দুর্বলতম প্রোগ্রামার হিসাবে শক্তিশালী হয় এবং ফলস্বরূপ কোডের সুবিধার হয় হয় 1 এর একটি মাল্টিপ্লেয়ার বা পারফরম্যান্স পেনাল্টি। আমি এর দ্বারা যা বোঝাতে চাইছি এটি হ'ল হয় অনন্য ডিজাইনের সিদ্ধান্তগুলির এক অনন্য পরিবেশে একমাত্র এবং একমাত্র অনন্য কাজের জন্য উচ্চ কার্যকারিতা বা এটি একাধিক পরিবেশে ব্যবহার করার জন্য যথেষ্ট জেনারিক (অন্যান্য মাইক্রোকন্ট্রোলার, অন্যান্য মেমরি পরিচালনা কৌশল, অন্যান্য বিলম্বিত বনাম) enough থ্রিপুট ট্রেড অফস ইত্যাদি ইত্যাদি) তবে এর অন্তর্নিহিত পারফরম্যান্স ব্যয় রয়েছে।

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

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


আমার উত্তরটিতে দুর্দান্ত সংযোজন :) এই রহস্যময় সি ++ প্রেমিকা কে হবেন? তাঁর প্রোফাইলে বলা হয়েছে "স্পষ্টতই, এই ব্যবহারকারীরা তাদের সম্পর্কে রহস্যের বাতাস রাখতে পছন্দ করেন।" (খারাপ ইংরাজী, বিটিডাব্লু) তবে আহা লোকেশনটি "বোচুম, জার্মানি" ..... সম্মেলনে দেখা হবে!
ওয়াউটার ভ্যান ওইজেন 17'17

আপনার emBO আসছে ++, এটি একটি ভাল ভিড় হতে হবে জানতে) যথাযথ; Ah Yeah আমার প্রোফাইল আপডেট
odinthenerd

10

আমার ব্যাকগ্রাউন্ড: পুরানো বেল ল্যাবস প্রোগ্রামারদের অধীনে স্কুল প্রশিক্ষণের বাইরে; আন্ডারগ্র্যাড গবেষণা প্রকল্পে 3 বছর ধরে কাজ করছেন; ভিবি.এনইটি তে ডেটা অধিগ্রহণ / প্রক্রিয়া নিয়ন্ত্রণ। ভিবি 6-তে একটি এন্টারপ্রাইজ ডাটাবেস অ্যাপ্লিকেশনটিতে 1.5 বছর কাজ করে। বর্তমানে এম্বেড পিসির জন্য 2 জিবি স্টোরেজ, 512 এমবি র‌্যাম, 500 মেগাহার্টজ এক্স 86 সিপিইউ সহ প্রকল্পের কাজ করছেন ; এর মধ্যে একটি আইপিসি প্রক্রিয়া সহ সি ++ তে একযোগে লেখা বেশ কয়েকটি অ্যাপ্লিকেশন। হ্যাঁ, আমি তরুণ।

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

  • সি ++ সি এর চেয়ে মৌলিকভাবে পৃথক (যেমন, কোনও সি / সি ++ নেই)। যদিও বৈধ সি বৈধ प्रत्येकটি বৈধ সি ++, সি ++ একটি ভিন্ন ভাষা এবং কোনও পরিস্থিতিতে কার্যকরভাবে এটি ব্যবহার করার জন্য সি ++ তে কীভাবে প্রোগ্রাম করা যায় তা শিখতে হবে । সি ++ এ আপনাকে প্রক্রিয়াগতভাবে নয়, প্রক্রিয়াগতভাবে নয়, এবং এই দুটিয়ের সংকর নয় (প্রচুর ফাংশন সহ বড় শ্রেণি)। সাধারণভাবে, আপনার কয়েকটি ফাংশন দিয়ে ছোট ক্লাস তৈরি করার দিকে মনোনিবেশ করা উচিত এবং সমস্ত ছোট ক্লাস একসাথে একটি বৃহত্তর সমাধানে রচনা করা উচিত। আমার এক সহকর্মী আমাকে বুঝিয়ে দিয়েছিলেন যে আমি বস্তুগুলিতে পদ্ধতিগতভাবে প্রোগ্রাম করতাম, যা একটি দুর্দান্ত জগাখিচুড়ি এবং এটি বজায় রাখা শক্ত। আমি যখন আরও অবজেক্ট-ওরিয়েন্টেড কৌশল প্রয়োগ করতে শুরু করি তখন আমার কোডটির রক্ষণাবেক্ষণ / পঠনযোগ্যতা বেড়ে গেছে।

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

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

সম্পাদনা করুন:

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

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

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

এটা সবসময় সত্য। আমি এমন কোনও ভাষা শুনিনি যা ভাল নকশা প্রয়োগ করে। আমি মনে করি আমরা প্রায়শই বোঝাচ্ছি যে এটি বিকাশকারীদের কাজ এবং এটি সি ++ একটি সংগঠিত ফ্যাশনে ব্যবহার এবং প্রয়োগ করা সহজ করে তোলে।
কর্টুক

@ মার্ক - আমি সম্মত এটা আমার জন্য একটি শেখার প্রক্রিয়া ছিল।
জে পোলফার

7

হ্যাঁ, সি ++ সহ সমস্যাটি কোডের বর্ধিত পদচিহ্ন।

কিছু সিস্টেমে আপনি বাইটগুলি গণনা করছেন এবং সেই ক্ষেত্রে আপনাকে চলমান ব্যয় মানতে হবে যা আপনার সিস্টেমের সীমানার কাছাকাছি সি এর বর্ধিত ব্যয় are

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

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

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


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

গতিশীল মেমরির উপর যুক্তি আরও গুরুত্বপূর্ণ আইএমও। আমি এমন শিল্প সিস্টেমগুলি দেখেছি যা কয়েক সপ্তাহ অবিরত চলতে পারে তবে ডায়াগনস্টিক স্তরটি (সি ++ তে লিখিত) প্রায় 12 ঘন্টা পুনরায় চালু করতে সময় সীমাবদ্ধ করবে।
দিমিত্রি গ্রিগরিয়েভ

6

আমি ভেবেছিলাম লিনাস টরভাল্ডসের এই অ্যান্টি-সি ++ রেন্টটি আকর্ষণীয়।

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

তিনি এম্বেড থাকা সিস্টেম ওয়ার্ল্ড সম্পর্কে কথা বলছেন না, তবে লিনাক্স কার্নেল বিকাশের বিষয়ে কথা বলছেন। আমার কাছে, প্রাসঙ্গিকতাটি এ থেকে আসে: সি ++ এর জন্য আরও বৃহত্তর প্রসঙ্গটি বোঝার দরকার হয় এবং আমি অবজেক্ট টেম্পলেটগুলির একটি সেট ব্যবহার করতে শিখতে পারি, কয়েক মাসের মধ্যে আমি যখন কোড আপডেট করতে হয় তখন সেগুলি মনে রাখতে আমি নিজেকে বিশ্বাস করি না।

(অন্যদিকে, আমি বর্তমানে পাইথন (সি ++ নয়, তবে একই ওওপি দৃষ্টান্ত ব্যবহার করছি) ব্যবহার করে একটি এমবেডড ডিভাইসে কাজ করছি যা হুবহু সমস্যাটি হবে my আমার ডিফেন্সে, এটি এম্বেডেড সিস্টেমকে যথেষ্ট শক্তিশালী বলে একটি পিসি বলা যেতে পারে powerful 10 বছর আগে।)


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

পুরোপুরি এনক্যাপসুলেশন এবং ক্লাসে সম্মত। অপারেটর ওভারলোডিং এবং উত্তরাধিকার, এত বেশি নয়।
পিংসওয়েপ্ট

1
হাহাহা, হ্যাঁ, অপারেটর ওভারলোডিং কোডের ফাংশনটিকে অস্পষ্ট করতে ব্যবহার করা যেতে পারে। যদি কেউ অপারেটর অতিরিক্ত চাপিয়ে থাকে তবে এটি সুস্পষ্ট কারণে হওয়া বা হওয়া উচিত নয় done উত্তরাধিকার কেবলমাত্র নির্দিষ্ট ক্ষেত্রে ব্যবহার করা উচিত যেখানে আপনি আসলে এমন কিছু করছেন যা কিছু সংযোজন সহ পিতামাতার মতো। আমি মনে করি আমি প্রতিটি ব্যবহার OOP এ ফাংশন করব না। আমি উভয় ব্যবহার করেছি, তবে এম্বেড থাকা সিস্টেমে কোনও কেস আমি করতাম তা ভাবতে পারি না। ভেরিয়েবলের নামের সাথে 80 টি চরিত্রের সীমা সহ একটি সংকলককে তত্ক্ষণাত স্ক্র্যাপ করা উচিত।
কর্টুক

2
পাইথনের এমসিইউ প্রোগ্রামিংয়ের চিন্তাভাবনায় আমি কেবল আমার মুখে কিছুটা ফেলে দিয়েছিলাম ...
ভিস্যাটাকু

আপনি একমাত্র নন, তবে এটি যদি ভালভাবে কাজ করে এবং দক্ষ হয় তবে আমি ক্ষমা করতে পারি।
কর্টুক

6

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

ছোট মাইক্রোকন্ট্রোলারদের জন্য (8-বিট) কোনও উপায় নেই। আপনি কেবল নিজেকে আঘাত করতে বলছেন, লাভ নেই এবং আপনি প্রচুর সংস্থান ত্যাগ করবেন।

হাই-এন্ড মাইক্রোকন্ট্রোলারদের জন্য (যেমন 32-বিট, 10s বা এমবি 100 গিগাবাইটের র‌্যাম এবং স্টোরেজ) এর যে একটি শালীন ওএস রয়েছে এটি পুরোপুরি ঠিক আছে এবং আমি বলতে সাহস করব, এমনকি প্রস্তাবিতও।

তাহলে প্রশ্ন হ'ল সীমানা কোথায়?

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

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


2
আমাকে এখানে একমত হতে হবে না, এটি হ'ল কোনও আকস্মিক বিন্দু নয় যেখানে সিস্টেম রিসোর্সের কারণে সি ++ গ্রহণযোগ্য হয়ে ওঠে, ভাল ডিজাইনের অনুশীলনটি সি ++ এর পদচিহ্ন যেখানে সিটির পদাঙ্কটি রাখতে পারে। এটি একই স্থান গ্রহণকারী ওওপি ডিজাইনের কোডে ফলাফল করে। দুর্বল লেখা সি এর মতোই খারাপ হতে পারে।
কর্টুক

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

4

সি ++ এর কয়েকটি বৈশিষ্ট্য রয়েছে যা এম্বেড থাকা সিস্টেমে কার্যকর। ব্যতিক্রমগুলির মতো আরও কিছু রয়েছে, যা ব্যয়বহুল হতে পারে এবং যার ব্যয়গুলি সর্বদা সুস্পষ্ট নাও হতে পারে।

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

  1. কিছুটা জাভা-র মতো হ্যান্ডলিং ব্যতিক্রম, যেখানে ব্যতিক্রম ছোঁড়া বা ফাঁস করতে পারে এমন ফাংশনগুলি অবশ্যই সেই হিসাবে ঘোষণা করা উচিত। প্রোগ্রামিং দৃষ্টিকোণ থেকে এই জাতীয় ঘোষণার প্রয়োজনীয়তা কিছুটা বিরক্তিকর হতে পারে, তবে কোডের স্বচ্ছতার ক্ষেত্রে এমন একটি ক্ষেত্রে উন্নতি হবে যেখানে কোনও ফাংশন যদি সাফল্য অর্জন করে স্বেচ্ছাচারিত পূর্ণসংখ্যার ফিরিয়ে দিতে পারে তবে ব্যর্থও হতে পারে। অনেক প্ল্যাটফর্মগুলি কোডে সস্তা হিসাবে এটি পরিচালনা করতে পারে যেমন একটি রেজিস্টারে রিটার্ন মান এবং ক্যারি পতাকাটিতে সাফল্য / ব্যর্থতার ইঙ্গিত দিয়ে।
  2. কেবল স্থিতিশীল এবং ইনলাইন ফাংশনগুলির ওভারলোডিং; আমার বোধগম্যতা হ'ল সি এর জন্য মানক সংস্থাগুলি ফাংশন ওভারলোডিং এড়িয়ে চলেছে যাতে নাম ম্যাংলিংয়ের প্রয়োজন এড়াতে পারে। স্থিতিশীল এবং ইনলাইন ফাংশনগুলির ওভারলোডগুলি কেবল সেই সমস্যাটি এড়াতে পারে এবং বহিরাগত ফাংশনগুলি ওভারলোডিংয়ের 99%% সুবিধা দেয় (যেহেতু .h ফাইলগুলি পৃথক-নামযুক্ত বহিরাগত ফাংশনের ক্ষেত্রে ইনলাইন ওভারলোডগুলি সংজ্ঞায়িত করতে পারে)
  3. স্বেচ্ছাসেবী বা নির্দিষ্ট সংকলন-সময়-সমাধানযোগ্য স্থির পরামিতি মানগুলির জন্য ওভারলোডগুলি। কোনও ধ্রুবক মান দিয়ে পাস করার সময় কিছু ফাংশন খুব দক্ষতার সাথে ইনলাইন করতে পারে তবে ভেরিয়েবলটি পাস হলে খুব ভালভাবে ইনলাইন করতে পারে। অন্যান্য সময় কোড যা একটি মান স্থির থাকলে অপ্টিমাইজেশন হতে পারে এটি যদি না হয় তবে হতাশ হতে পারে। উদাহরণ স্বরূপ:
    ইনলাইন শূন্য অনুলিপি অনুলিপি করুন (uint32_t * ভাগ্য, কনটেন্ট uint32_t * এসসিআর, __is_const ইন্ট এন)
    {
      যদি (n <= 0) ফিরে আসে;
      অন্যথায় যদি (এন == 1) {গন্তব্য [0] = এসআরসি [0];
      অন্যথায় যদি (n == 2) {গন্তব্য [0] = এসআরসি [0]; গন্তব্য [1] = এসসিআর [1];
      অন্যথায় যদি (n == 3) {লক্ষ্য [0] = এসআরসি [0]; গন্তব্য [1] = এসআরসি [1]; গন্তব্য [2] = এসসিআর [2];
      অন্যথায় যদি (এন == 4) {গন্তব্য [0] = এসআরসি [0]; গন্তব্য [1] = এসআরসি [1]; গন্তব্য [2] = এসসিআর [2]; গন্তব্য [3] = এসসিআর [3];
      অন্যথায় মেমকি ((শূন্য *) ভাগ্য, (কনস্ট অকার্যকর *) এসসিআর, এন * আকারের (* এসআরসি));
    }
    
    সংকলনের সময় যদি 'এন' মূল্যায়ন করা যায় তবে উপরের কোডটি মেমকি-তে কল করার চেয়ে কার্যকর হবে, তবে 'এন' সংকলনের সময় যদি মূল্যায়ন করা না যায় তবে উত্পন্ন কোডটি কোডের তুলনায় অনেক বড় এবং ধীর হতে পারে যাকে মেমকি বলা হয়।

আমি জানি যে সি ++ এর পিতা কেবলমাত্র সি ++ এর এম্বেড থাকা সংস্করণে খুব আগ্রহী নন, তবে আমি মনে করি এটি কেবল সি ব্যবহারের ক্ষেত্রে কিছুটা উন্নতি করতে পারে I

যে কেউ জানেন যে উপরের মতো কোনও কিছুর জন্য কোনও ধরণের মান বিবেচনা করা হচ্ছে?



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

"সি ++ এর জনকের এম্বেড থাকা সিস্টেম প্রোগ্রামিংয়ের শূন্য অভিজ্ঞতা রয়েছে, তবে কেন কেউ তার মতামতটি যত্ন করবেন?
লন্ডিন

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

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

3

সি ++ হ'ল এক প্রোগ্রামিং ভাষা:

ক) এটি একটি "আরও ভাল" সি) এটি একটি অবজেক্ট ভিত্তিক ভাষা গ) এটি এমন একটি ভাষা যা আমাদের জেনেরিক প্রোগ্রামগুলি লেখার অনুমতি দেয়

যদিও এই সমস্ত বৈশিষ্ট্য পৃথকভাবে ব্যবহার করা যেতে পারে যখন একই সাথে তিনটি ব্যবহার করা হয় তখন সেরা ফলাফলগুলি পাওয়া যায়। তবুও, আপনি যদি তাদের মধ্যে একটি চয়ন করতে চান তবে এম্বেডড সফ্টওয়্যারটির গুণমান বাড়বে।

ক) এটি একটি "আরও ভাল" সি

সি ++ একটি শক্তিশালী টাইপ করা ভাষা; সি এর চেয়ে শক্তিশালী আপনার প্রোগ্রামগুলি এই বৈশিষ্ট্যটি থেকে উপকৃত হবে।

কিছু লোক পয়েন্টারগুলিকে ভয় পায়। সি ++ এর মধ্যে উল্লেখগুলি অন্তর্ভুক্ত রয়েছে। অতিরিক্ত লোড ফাংশন।

এবং বলা বাহুল্য: বড় বা ধীর প্রোগ্রামগুলিতে এই বৈশিষ্ট্যগুলির কোনওটিই ব্যয় করে না।

খ) এটি একটি অবজেক্ট ওরিয়েন্টেড ভাষা

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

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

/ * ম্যাচের জন্য টাইমার সেটআপ এবং TICKRATE_HZ এ ব্যাঘাত ঘটায় * /

Chip_TIMER_Reset (LPC_TIMER32_0);

চিপ_আইপিআইএমআইচিএল ম্যাচএনেবল ইন্ট (এলপিসি_আরআইপিএমআইআরইসি 3232, 1);

চিপ_আমিআইআর_সেট ম্যাচ (এলপিসি_আমপিআরআইএমসিআইপিআইআরআইএমসিআইপিআইআরসিআইআরসিএইচজেড 2));

চিপ_আইটিএমআইসেটস রিসেটআনম্যাচএইনবল (এলপিসি_আম_আর।

Chip_TIMER_Enable (LPC_TIMER32_0);

আপনি কি বিমূর্ততা দেখতে পাচ্ছেন? সুতরাং, একই উদ্দেশ্যে সি ++ ব্যবহার করার সময় শূন্য ব্যয়ে সি ++ এর বিমূর্ততা এবং এনক্যাপসুলেশন ব্যবস্থার মাধ্যমে বিমূর্তিটি পরবর্তী স্তরে আনা হয়!

গ) এটি এমন একটি ভাষা যা আমাদের জেনেরিক প্রোগ্রামগুলি লেখার অনুমতি দেয়

জেনেরিক প্রোগ্রামগুলি টেমপ্লেটগুলির মাধ্যমে অর্জন করা হয় এবং টেমপ্লেটগুলিরও আমাদের প্রোগ্রামগুলির জন্য কোনও ব্যয় থাকে না।

এছাড়াও, টেমপ্লেটগুলি দিয়ে স্থির পলিমারফিজম অর্জন করা হয়।

ভার্চুয়াল পদ্ধতি, আরটিটিআই এবং ব্যতিক্রম।

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

অবশেষে, আরটিটিআই এবং ব্যতিক্রম সম্পর্কে একটি পরামর্শ: এম্বেড থাকা সিস্টেমে তাদের ব্যবহার করবেন না। এগুলি এলোমেলো করুন !!


2

আমার পটভূমি, এম্বেড (এমসিইউ, পিসি, ইউনিক্স, অন্যান্য), রিয়েলটাইম। সুরক্ষা গুরুতর। আমি একজন পূর্ববর্তী নিয়োগকর্তাকে এসটিএলে পরিচয় করিয়ে দিয়েছি। আমি আর এটি করি না।

কিছু শিখা বিষয়বস্তু

সি ++ এম্বেড থাকা সিস্টেমগুলির জন্য উপযুক্ত?

সাধরণ। সি ++ লেখার জন্য একটি ব্যথা এবং বজায় রাখার জন্য একটি ব্যথা। সি + ঠিক আছে (ঠিক আছে কিছু বৈশিষ্ট্য ব্যবহার করবেন না)

মাইক্রোকন্ট্রোলারগুলিতে সি ++? RTOSes? টোস্টার? এম্বেড পিসি?

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

মাইক্রোকন্ট্রোলারগুলিতে কি ওওপি কার্যকর?

সত্যই. ইউআআআরটি একটি অবজেক্ট ..... ডিএমএসি হ'ল একটি অবজেক্ট ...

অবজেক্ট স্টেট মেশিনগুলি খুব সহজ।

সি ++ কার্যকর হওয়ার জন্য হার্ডওয়্যার থেকে প্রোগ্রামারটিকে খুব দূরে সরিয়ে দেয়?

এটি পিডিপি -11 না থাকলে সি আপনার সিপিইউ নয়। সি ++ মূলত সি এর একটি প্রিপ্রসেসর ছিল তাই বজরেন স্ট্রস্ট্রপ এটিএন্ডটিটিতে থাকাকালীন সিমুলা সিমুলেশন থাকার কারণে হাসাহাসি করা বন্ধ করে দিত। সি ++ আপনার সিপিইউ নয়।

একটি এমসিইউ পান যা জাভা বাইটকোডগুলি চালায়। জাভা প্রোগ্রাম। সি ছেলেদের উপর হাসি।

আরডুইনোর সি ++ (কোনও গতিশীল মেমরি পরিচালনা, টেমপ্লেট, ব্যতিক্রম ছাড়া) "রিয়েল সি ++" হিসাবে বিবেচনা করা উচিত?

নাঃ। এমসইউ'র জন্য ঠিক সেখানে সমস্ত জারজবদ্ধ সি সংকলকগুলির মতো।

চতুর্থটি, এম্বেডেড জাভা বা এম্বেডেড এডিএ মানকৃত হয় (ইশ); অন্য সব দুঃখ হয়।


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

2
এম্বেইউগুলি এমন কী আছে যা এম্বেড থাকা জাভা সমর্থন করে?
জে। পোল্ফার

www.ajile.com শুরু করার জন্য।
টিম উইলিসক্রফ্ট

অ্যাডার জন্য +1। এটি আরডুইনোস সহ এম্বেড থাকাতে এটির পক্ষে প্রচুর পরিমাণে গেছে।
ব্রায়ান ড্রামন্ড

সি লিখিত মাইক্রোগুলির জন্য পোর্টেবল জাভা ভিএম ওপেন সোর্স। dmitry.co/index.php?p=./04.Thoughts/…
টিম উইলিসক্রফ্ট

-2

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


6
আমি এই বিষয়টি আলোচনায় কী যুক্ত করে তা সত্যই নিশ্চিত নই।
ডেভ টুইট করেছেন

-3

<গলাবাজি>

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

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

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

বিষয়গুলি আসলে যে বিষয়গুলি তার চেয়ে সহজতর তা এই ভেবে আপনি নিজেকে কেন বিভ্রান্ত করতে চান?

</ গলাবাজি>


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

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

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

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

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