সি ++ এর চেয়ে আলাদা কীভাবে?


21

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


3
কীভাবে তারা ব্যবহৃত হয়। আপনি অবশ্যই সি ++ এ সি লিখতে পারেন ... তবে আপনার উচিত হবে না।
এড এস।

উত্তর:


18

১৯৮০ এর দশকে, যখন সি ++ এর বিকাশ সবে শুরু হয়েছিল, তখন সি ++ প্রায় সি এর যথাযথ সুপারস্টেট ছিল That এভাবেই এটি সমস্ত শুরু হয়েছিল।
তবে সময়ের সাথে সাথে, সি এবং সি ++ উভয়ই বিবর্তিত হয়েছে এবং একে অপরের থেকে সরে গেছে, যদিও ভাষার মধ্যে সামঞ্জস্যতা বরাবরই গুরুত্বপূর্ণ হিসাবে বিবেচিত হয়েছে।

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

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


আমি মনে করি না প্রথম অনুচ্ছেদটি সঠিক। আমি বিশ্বাস করি সি এর কাছ থেকে সর্বদা অন্তর্ভুক্ত ingালাই ছিল void *তবে সি ++ কখনও করেনি। (ডাউনভোট করেনি)
বিকল্প

5
@ ম্যাথেপিক: "সর্বদা" সংজ্ঞায়িত করুন। সি সি ++ থেকে অকার্যকর * টাইপ নিয়েছে। কেএন্ডআর সি
ম্যালোক চরটি

19

স্ট্রাস্ট্রপ নিজেই তার উত্তর দেয় :

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

এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এবং জেনেরিক প্রোগ্রামিংয়ের জন্য সমর্থন যা সি ++ কে সি থেকে "সম্পূর্ণ আলাদা" করে তোলে আপনি করতে পারেন প্রায় খাঁটি সি লিখতে এবং তারপরে এটি একটি সি ++ সংকলক দিয়ে সংকলন করতে পারেন (যতক্ষণ আপনি কঠোর প্রকারের পরীক্ষার যত্ন নেবেন)। তবে আপনি এখনও সি লিখছেন - আপনি সি ++ লিখছেন না।

আপনি যদি সি ++ লিখছেন, তবে আপনি এটির অবজেক্ট ওরিয়েন্টেড এবং টেম্পলেট বৈশিষ্ট্যগুলি ব্যবহার করছেন এবং এটি আপনি সি-তে দেখতে যা পছন্দ করেন তেমন কিছুই নয়


"এটি আপনি সিতে দেখতে পাবেন এমন কিছুই নয়" " এই শব্দবন্ধ মজার শোনায়! "সি তে দেখুন"। সি ইন সি! এটি এক ধরণের কবিতা।
গ্যালাক্সি

13

সহজ কথায় বলতে গেলে, সি-তে যা মূর্তিযুক্ত বলে বিবেচিত হয় তা অবশ্যই সি ++ এ মুশকিল নয়।

C এবং C ++ অনুশীলনে খুব আলাদা ভাষা, কারণ লোকেরা যেভাবে তাদের ব্যবহার করে। সি এর লক্ষ্য ন্যূনতমবাদে রয়েছে, যেখানে সি ++ একটি অত্যন্ত জটিল ভাষা, যেখানে প্রচুর বৈশিষ্ট্য রয়েছে।

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


4
সি-স্টাইলের কোডটি সি ++ এ অ-পরিচয়যুক্ত নয় এমনটিই নয়। ব্যতিক্রমী সুরক্ষার অভাবে সি-স্টাইলের কোডিংটি আসলে সি ++ এ সমস্যাযুক্ত
dan04

4

সি ++ অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংকে সমর্থন করে এমন স্পষ্ট সত্যতা ছাড়াও আমার মনে হয় আপনার উত্তর এখানে রয়েছে: http://en.wikedia.org/wiki/Compatibility_of_C_and_C++

এই নিবন্ধটিতে কোডের উদাহরণ রয়েছে যা সিতে ঠিক আছে তবে সি ++ তে নয় stuff এই ক্ষেত্রে:

int *j = malloc(sizeof(int) * 5); /* Implicit conversion from void* to int* */

সি প্রোগ্রামিংকে সি ++ এ পোর্ট করা প্রায়শই সোজা থাকে এবং বেশিরভাগ সংকলন ত্রুটিগুলি সংযোজন করে (ক্যাসট যুক্ত করা, নতুন কীওয়ার্ড ইত্যাদি) consists


4
এর মতো একটি প্রোগ্রাম পোর্টিং আপনাকে সি ++ প্রোগ্রাম দেয় না। এটি আপনাকে সি দেয় যা সি ++ সংকলনে সংকলিত হতে পারে। এটি এটি সি ++ করে না (আমি এখনও ফলাফল কোড সি কল করব (এমনকি ক্লাস সহ সিও নয়))।
মার্টিন ইয়র্ক

@ মার্টিনইয়র্ক এটাকে খারাপ সি বলুন, শব্দার্থবিদ্যা আলাদা হতে পারে এবং আমি সম্মতি জানাই। ফলাফল অবশ্যই সি যদিও।
Deduplicator

2

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


2

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


আপনি কি আরও কার্যকর বৈশিষ্ট্যগুলির একটি উদাহরণ গণনা করতে পারেন যে সি ++ এর সি নেই?
টেম্পলার

2
@ ডার্কটেম্পলার: আরআইআই-র সাথে ইজি-মোড রিসোর্স ম্যানেজমেন্ট কীভাবে? অথবা টেমপ্লেটগুলি ব্যবহার করে দুর্দান্ত জেনেরিক ডেটা স্ট্রাকচার? শুধু দিয়ে শুরু করা।
ডেড এমজি

1

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


সি এরও স্ট্রাক্ট নেই? সি ফাইলগুলি কি আলাদা আলাদা মডিউল নয় (মূলত, অবজেক্টস)? প্রক্রিয়াগত এবং অবজেক্ট-ওরিয়েন্টেড মধ্যে সঠিক পার্থক্য কি তা নিশ্চিত নন ...
ডার্ক টেম্পলার

1
অন্ধকার আপনি আমার বক্তব্য চিত্রিত করেছেন। এটি ভাষার কোনও সীমাবদ্ধতা নয় যা আপনাকে প্রক্রিয়াগতভাবে বা কোনও বস্তু-ভিত্তিক উপায়ে এটি একটি নীতি বা চিন্তাভাবনার উপায় লিখতে দেয়।
পিঁপড়া

0

যদিও সি ++ সিনট্যাকটিক পদগুলিতে সি এর একটি সুপার সেট হতে পারে - অর্থাৎ সি প্রোগ্রামের যে কোনও নির্মাণই সি ++ সংকলক দ্বারা সংকলিত হতে পারে।

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

বর্তমান পোস্টের বিষয়টি হ'ল সি ++ এর নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে যে একটি ভাল সি ++ প্রোগ্রামার অবশ্যই সি সমতুল্য সংকলন করা সত্ত্বেও প্রোগ্রামিংয়ের সেরা অনুশীলন হিসাবে ব্যবহার করতে পারে।

এটি সি ++ এর ওপরে কীভাবে করা উচিত

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

  2. বেসরকারীকরণ - শ্রেণি এবং এমনকি কাঠামোগুলিতে ব্যক্তিগত সদস্যরা থাকে। এটি একটি শ্রেণীর এনক্যাপসুলেশনকে সম্ভব করে তোলে। সি এর সমতুল্য হ'ল অ্যাপ্লিকেশনটিকে অবৈধ * হিসাবে টাইপকাস্ট করার মাধ্যমে যাতে অ্যাপ্লিকেশনটির অভ্যন্তরীণ ভেরিয়েবলগুলিতে অ্যাক্সেস না থাকে। তবে, সি ++ এ আপনার জনসাধারণের পাশাপাশি বেসরকারী ক্লাসগুলির উপাদান থাকতে পারে।

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

  4. নতুন এবং মুছুন বনাম ম্যালোক এবং বিনামূল্যে। নতুন () এবং মুছুন () বিবৃতিগুলি কেবল মেমরি বরাদ্দ করে এবং ডি-বরাদ্দ করে না, কোডটিকে ডানস্ট্রাক্ট-এর অংশ হিসাবে কার্যকর করার জন্য একটি শৃঙ্খলে কল করার অনুমতি দেয়। আপনি যদি সি ++ ব্যবহার করেন - ম্যালোক এবং ফ্রি ব্যবহার করা আসলে BAD।

  5. আইও প্রকার এবং অপারেটর ওভারলোডিং অপারেটর ওভারলোডিং ভালভাবে করা থাকলে কোড পাঠযোগ্য বা আরও স্বজ্ঞাত করে তোলে। << এবং >> আইও অপারেটরগুলির জন্য একই। এটি করার সি উপায়টি হ'ল ফাংশন পয়েন্টার ব্যবহার করা - তবে এটি অগোছালো এবং কেবল অগ্রিম প্রোগ্রামারদের জন্য।

  6. "স্ট্রিং" ব্যবহার করা হচ্ছে। সি থেকে চর * সর্বত্র কাজ করে। সুতরাং সি এবং সি ++ অনেকটা একই। তবে আপনি যদি সি ++ তে থাকেন - স্ট্রিং ক্লাস ব্যবহার করা সর্বদা আরও ভাল (এবং নিরাপদ) যা আপনাকে দৌড়ানোর চেয়ে অ্যারেগুলির বিপদ থেকে রক্ষা করে যা প্রায় প্রতিটি জিনিস।

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

  1. স্মার্ট পয়েন্টার - হ্যাঁ, তারা খুব স্মার্ট! এবং বেশিরভাগ স্মার্ট জিনিসের মতো - এগুলি ভাল শুরু হয় এবং পরে অগোছালো হয়ে যায়! আমি ব্যবহার করতে বেশ পছন্দ করি না

আমি সি সম্পর্কে পছন্দ করি এবং সি ++ এ মিস করি

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

  2. সরল থ্রেড। আপনি যখন থ্রেডগুলি তৈরি করেন pthreads ছিল - এটি বেশ সহজ এবং পরিচালনাযোগ্য। এটি যখন তখন থ্রেড তৈরি করতে হবে যা ক্লাসগুলির জন্য "ব্যক্তিগত" বলে মনে করা হয় (যাতে তারা ব্যক্তিগত সদস্যদের অ্যাক্সেস পায়)। নেই বুস্ট মৌলিক সি কিন্তু কিছুই ++, - অবকাঠামো ধরণ।

Dipan।


0

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

lock_mutex(&mutex);

// call some functions
...

unlock_mutex(&mutex);

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

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

void f(const Foo* f1)
{
    Foo f2;
    memcpy(&f2, f1, sizeof f2);
    ...
}

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

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

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

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

একটি ব্যাখ্যা

এখানে একটি আকর্ষণীয় মন্তব্য আমি গভীরতায় আরও কিছুটা প্রতিক্রিয়া জানাতে চেয়েছিলাম (আমি এখানে মন্তব্যগুলি অক্ষরের সীমাতে এত কঠোর):

memcpy(&f2, f1, sizeof f2); সি-তেও "নরকফায়ার শাসনকারী সর্বনাশা" হ'ল যদি ফু এর নিজস্ব পয়েন্টার থাকে বা আরও খারাপ হয় কারণ এর সাথে মোকাবিলা করার সরঞ্জামগুলিরও আপনার অভাব রয়েছে।

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

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

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

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

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


2
memcpy(&f2, f1, sizeof f2);এছাড়াও "জাহান্নামে reigning ব্যাপক ধ্বংস" সি থাকে তাহলে Fooকোন মালিক পয়েন্টার আছে, অথবা, এমনকি খারাপ হিসাবে আপনি আরো সরঞ্জামগুলি আমাদের কাছে মোকাবেলা করার অভাব। সুতরাং সি লেখার লোকেরা এ জাতীয় জিনিসগুলি তেমন করে না
ক্যালথ

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

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

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

অন্য ক্ষেত্রে যেখানে আমি মাঝে মাঝে সি এর কাছে পৌঁছে যাই সেগুলি হ'ল কোডগুলি কম বিমূর্ত হয়ে এবং আদিমগুলিতে মনোনিবেশ করার মাধ্যমে পছন্দটিকে পুনরায় ব্যবহারযোগ্য হতে পারে, API void filter_image(byte* pixels, int w, int h);যেমন পছন্দ করার বিপরীতে সরল উদাহরণ হিসাবে API void filter_image(ImageInterface& img);(যা আমাদের কোডকে এই জাতীয় চিত্রের ইন্টারফেসের সাথে যুক্ত করে, এর প্রয়োগযোগ্যতা সঙ্কুচিত করা)। এই জাতীয় ক্ষেত্রে আমি মাঝে মধ্যে কেবলমাত্র সি তে এই জাতীয় ফাংশনগুলি বাস্তবায়ন করি যেহেতু সি ++ তে খুব কম লাভ হয় না এবং এটি এমন কোডের ভবিষ্যতের পরিবর্তনের প্রয়োজনের সম্ভাবনা হ্রাস করে।
ড্রাগন শক্তি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.