শুরু করার জন্য, সবসময় এমন কিছু সমস্যা থাকবে যা এক ভাষাতে অন্যের চেয়ে ভাল সমাধান করা যায়। "আরও ভাল" এর কিছু সংজ্ঞার জন্য এখানে সবসময় এমন ভাষা থাকবে যা অন্য যে কোনও ভাষার চেয়ে নির্দিষ্ট সমস্যাগুলি "আরও ভাল" সমাধান করে। তবে, খুব খুব বড় সংখ্যক সমস্যার খুব অনুরূপ চাহিদা রয়েছে (কিছু আই / ও, কিছু গণনা) এবং অনুরূপ প্রয়োজনীয়তার মুখোমুখি হয় (যুক্তিসঙ্গত নির্ভরযোগ্যতা, যুক্তিসঙ্গত কর্মক্ষমতা)।
যেমন আপনি ইতিমধ্যে সি জানেন, সেখানে প্রচুর সমস্যার জন্য, আমি জানিয়েছি যে সি ++ কোনও উল্লেখযোগ্য ডাউনসাইড এবং বেশ কয়েকটি উল্লেখযোগ্য উন্নতি সরবরাহ করে না। সাহসী? কিছু লোক মনে হয় এটি মনে করে তবে এটি সত্যই ঘটনা the আসুন কয়েকটি খুব সাধারণ সি ++ ভুল বোঝাবুঝি পরিষ্কার করে শুরু করি:
সি ++ সি-র চেয়ে ধীরে ধীরে ! অনেক সি প্রোগ্রাম বৈধ সি ++ প্রোগ্রামও হয় - এবং সি সি সংকলক বা সি ++ সংকলক দুটি দিয়ে সংকলিত হওয়ার সাথে এই জাতীয় সি প্রোগ্রাম অভিন্ন গতিতে চলতে হবে।
সি ++ নির্দিষ্ট বৈশিষ্ট্যগুলির জন্য ওভারহেড প্রয়োজন। ভুল! নির্দিষ্ট সি ++ নির্দিষ্ট বৈশিষ্ট্য (যেমন ভার্চুয়াল ফাংশন কল বা ব্যতিক্রমগুলি) দ্বারা পরিচিত তথাকথিত ওভারহেড আপনি ওভারহেডের সাথে তুলনীয় যা আপনি নিজেই পরিচয় করিয়ে দিবেন যদি আপনি সি তে একই বৈশিষ্ট্যটি প্রয়োগ করেন should
সি ++ অবজেক্ট ওরিয়েন্টেড। ভুল! সি ++ ভাষাতে কিছু ভাষার বর্ধন রয়েছে যা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এবং জেনেরিক প্রোগ্রামিংয়ে সহায়তা করে। সি ++ কোথাও অবজেক্ট ওরিয়েন্টড ডিজাইনকে জোর করে না - এটি কেবল এটির অনুমতি দেয়। সি পাশাপাশি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়েরও অনুমতি দেয়, সি ++ কেবল এটিকে সহজ এবং কম ত্রুটি-প্রবণ করে তোলে।
সুতরাং, আপনি যদি আমাকে বিশ্বাস করেন তবে আমরা প্রতিষ্ঠিত করেছি যে "সি ++ সি এর চেয়ে উল্লেখযোগ্যভাবে খারাপ নয়"। আসুন দেখে নেওয়া যাক কী সি ++ কে আরও ভাল সি করে তোলে:
শক্তিশালী টাইপিং সি ++ এ টাইপ সিস্টেমটি সি এর চেয়ে বেশি শক্তিশালী This এটি অনেকগুলি সাধারণ প্রোগ্রামিং ত্রুটিগুলি প্রতিরোধ করে - পরবর্তী খুব গুরুত্বপূর্ণ বৈশিষ্ট্যটির সাথে মিলিতভাবে, শক্তিশালী টাইপ সিস্টেম এমনকি কোনও অসুবিধা না হওয়ার জন্য পরিচালনা করে।
প্যারামিটারাইজড প্রকারের টেমপ্লেট কীওয়ার্ডটি প্রোগ্রামারকে অ্যালগোরিদমের জেনেরিক (টাইপ-অজোনস্টিক) প্রয়োগকরণ লেখার অনুমতি দেয়। সি-তে যেখানে কেউ জেনেরিক তালিকা প্রয়োগের মতো উপাদান সহ লিখতে পারে:
struct element_t {
struct element_t *next, *prev;
void *element;
};
সি ++ এটিকে এমন কিছু লেখার অনুমতি দেয়:
template <typename T>
struct element_t {
element_t<T> *next, *prev;
T element;
};
কেবল সি ++ বাস্তবায়নই সাধারণ প্রোগ্রামার ত্রুটিগুলি আটকাতে পারে না (যেমন তালিকায় ভুল টাইপের একটি উপাদান রাখার মতো), এটি সংকলক দ্বারা আরও ভাল অপ্টিমাইজেশনেরও অনুমতি দেয়! উদাহরণস্বরূপ, জেনেরিক সাজানোর বাস্তবায়ন সি এবং সি উভয় ক্ষেত্রে উপলব্ধ is
সি রুটিন হিসাবে সংজ্ঞায়িত করা হয়:
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
যদিও সি ++ রুটিন হিসাবে সংজ্ঞায়িত করা হয়
template void sort(RandomAccessIterator first, RandomAccessIterator last);
পার্থক্যটি হ'ল উদাহরণস্বরূপ, একটি পূর্ণসংখ্যার অ্যারে বাছাই করার জন্য, সি ক্ষেত্রে, প্রতিটি একক তুলনা করার জন্য একটি ফাংশন কল প্রয়োজন হবে, যেখানে সি ++ বাস্তবায়ন সংকলকটিকে পূর্ণসংখ্যার তুলনা কলগুলিকে ইনলাইন করার অনুমতি দেয়, আসল সাজানোর রুটিন হিসাবে সংকলক দ্বারা সংকলন সময়ে স্বয়ংক্রিয়ভাবে টেম্পলেট আর্গুমেন্টে সঠিক প্রকারগুলি সন্নিবেশিত হয়।
- একটি বড় স্ট্যান্ডার্ড লাইব্রেরি সি ++ সি স্ট্যান্ডার্ড লাইব্রেরির সম্পূর্ণ ব্যবহারের অনুমতি দেয়। এটি অবশ্যই খুব গুরুত্বপূর্ণ, কারণ সত্যিকারের প্রোগ্রামগুলি লেখার সময় সি স্ট্যান্ডার্ড লাইব্রেরি একটি অমূল্য সম্পদ resource তবে সি ++ এর মধ্যে স্ট্যান্ডার্ড টেম্পলেট লাইব্রেরি অন্তর্ভুক্ত রয়েছে। এসটিএলে উপরের সাজানোর রুটিনের মতো বেশ কয়েকটি দরকারী টেম্পলেট রয়েছে। এটি দরকারী সাধারণ তথ্য কাঠামো যেমন তালিকা, মানচিত্র, সেট ইত্যাদি অন্তর্ভুক্ত করে থাকে সাজানোর রুটিনের মতো, অন্যান্য এসটিএল রুটিন এবং ডেটা স্ট্রাকচারগুলি প্রোগ্রামারের নির্দিষ্ট প্রয়োজনীয়তার জন্য "উপযুক্ত" হয় - সমস্ত প্রোগ্রামারকেই পূরণ করতে হয় ধরনের।
অবশ্যই, এসটিএল কোনও রূপালী বুলেট নয় - তবে সাধারণ সমস্যাগুলি সমাধান করার সময় এটি প্রায়শই একটি দুর্দান্ত সহায়তা সরবরাহ করে। কতবার আপনি সিতে একটি তালিকা প্রয়োগ করেছেন? আরবি-ট্রি কতবার ভাল সমাধান হতে পারত, যদি কেবল আপনি এটি করার সময় পেতেন? এসটিএল দিয়ে আপনার এ জাতীয় সমঝোতা করার দরকার নেই - গাছটি আরও ভাল ফিট হলে ব্যবহার করুন, তালিকাটি ব্যবহারের মতোই সহজ।
ঠিক আছে, তাই আমি কেবল ভাল অংশগুলি নিয়ে আলোচনা করেছি। কোন ডাউনসাইড আছে? অবশ্যই আছে। তবে দিন দিন তাদের সংখ্যা সঙ্কুচিত হচ্ছে। আমাকে বিস্তারিত বলতে দাও:
কোনও ভাল সি ++ সংকলক নেই এটি দীর্ঘ সময় ধরে এটির মতো ছিল। তবে আপনাকে অবশ্যই মনে রাখতে হবে যে ভাষাটি 1998 সালে প্রমিত করা হয়েছিল - এটি একটি জটিল ভাষা, সি এর চেয়েও জটিল comp এটি কম্পাইলারদের মান ধরে নিতে দীর্ঘ সময় নিয়েছে। তবে এই লেখাটি হিসাবে, সেখানে বহুল ব্যবহৃত ব্যবহৃত প্ল্যাটফর্মগুলির জন্য ভাল সংকলক উপলব্ধ রয়েছে; সংস্করণ ৩. এক্স-এ জিসিসি সাধারণত খুব ভাল, এবং এটি জিএনইউ / লিনাক্স এবং বেশিরভাগ ইউনিক্স প্ল্যাটফর্মগুলিতে চলে। উইন 32 এর জন্য ইন্টেলের একটি ভাল সংকলক রয়েছে - এটিও বেশ ভাল, তবে দুর্ভাগ্যক্রমে এটি এখনও এমএস এসটিএলে নির্ভর করে যা সাব-পার হয়।
লোকেরা ভাল সি ++ জানেন না এটি প্রায়শই শোনা অভিযোগ নয়, তবে এটি এমন একটি বিষয় যা আমি অনেক কিছুই দেখি। সি ++ একটি বড় এবং জটিল ভাষা - তবে এটি এমন একটি ভাষাও ব্যবহৃত হত যা প্রচুর সংক্রামিত হয়েছিল, বিশেষত "ওওপি ক্ষুধা নিবারণ করে, এইডস এবং ক্যান্সার নিরাময় করে" দিনগুলিতে। ফলাফলটি মনে হচ্ছে যে অনেকগুলি সত্যই দুর্বল সি ++ কোড, মূলত খারাপ সি এখানে কয়েক শ্রেণির ঘোষণার সাথে রয়েছে এবং এখানে রয়েছে এবং শেখার উপাদান হিসাবে ব্যবহৃত হচ্ছে। এর অর্থ প্রচুর লোক যারা বিশ্বাস করে যে তারা সি ++++++++++++++++++++++++++++++++++++++> G> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>वान্তवानंतंतাস্তান হয়? এটি খুব খারাপ, এবং এটি একটি সমস্যা তবে আমি মনে করি এটি সি ++ এর জন্য দোষ দেওয়া অন্যায্য।
সুতরাং, সি ++ সহ কেবলমাত্র দুটি প্রধান সমস্যা হ'ল সি ++ এর অল্প বয়স্ক ভাষা হওয়ার ফলাফল। সময়মতো তারা অদৃশ্য হয়ে যাবে। এবং সেখানকার বেশিরভাগ সমস্যার জন্য, আপনি যদি ভাল প্রোগ্রামার পেতে পারেন (বা নিজে ভাল সি ++ শিখতে পারেন) তবে সমস্যাগুলি আজকের দিনে আসলেই সমস্যা নয়।