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