আমি কয়েকটি ক্ষেত্রে জানি (গেম শিল্প, উদাহরণস্বরূপ), এসটিএল প্রস্তাবিত নয়। সুতরাং আমার প্রশ্ন: কিছু ক্ষেত্রে এসটিএল না ব্যবহার করা কি সত্যিই একটি ভাল অনুশীলন? যদি তা হয় তবে আধুনিক সি ++ এর এসটিএল না ব্যবহারের সবচেয়ে বড় কারণগুলি কী?
আমি কয়েকটি ক্ষেত্রে জানি (গেম শিল্প, উদাহরণস্বরূপ), এসটিএল প্রস্তাবিত নয়। সুতরাং আমার প্রশ্ন: কিছু ক্ষেত্রে এসটিএল না ব্যবহার করা কি সত্যিই একটি ভাল অনুশীলন? যদি তা হয় তবে আধুনিক সি ++ এর এসটিএল না ব্যবহারের সবচেয়ে বড় কারণগুলি কী?
উত্তর:
আমি কেবল একটি বৈধ কারণ সম্পর্কে ভাবতে পারি এবং এটি সত্যই বিরল: হার্ড রিয়েল টাইম। স্ট্যান্ডার্ড লাইব্রেরির অনেকগুলি জিনিস অভ্যন্তরীণভাবে মেমরির বরাদ্দ করে এবং এটি হার্ড রিয়েল-টাইম অ্যাপ্লিকেশনগুলির জন্য যথেষ্ট পরিমাণে নির্ধারক নয়, তাই এড়াতে হবে। এই অ্যাপ্লিকেশনগুলি সাধারণত বেশ সহজ, যদিও তারা অত্যন্ত কঠোর পর্যালোচনা এবং পরীক্ষার কারণে বিকশিত হতে অস্বাভাবিক সময় নেয়।
আমি একটি অবৈধ, তবে খুব সাধারণ কারণ সম্পর্কে ভাবতে পারি: বিকাশকারীরা যারা গণনা জটিলতা বোঝেন না, এসটিএলটির অপব্যবহার করেন এবং তারপরে গ্রন্থাগারটিকে দোষ দেন।
এসটিএল সাধারণত রান-টাইমে সি-স্টাইল সমাধানগুলির তুলনায় ক্যালব্যাক পয়েন্টার বা ভার্চুয়াল পদ্ধতিগুলির সাথে পলিমারফিজম-ভিত্তিক সমাধানগুলির চেয়ে দ্রুত হয় ( এই বার্জার স্ট্রোস্ট্রপের মূল বক্তব্যটিও দেখুন )। তবে যখন বিকাশকারী জটিল জটিলতার নির্দিষ্টকরণগুলি বুঝে না এবং কিছু জটিল বস্তুর ভেক্টরের ভেক্টরের মতো কিছু তৈরি করে গ্রন্থাগারটি অপব্যবহার করে (সি ++ 11 এ এটি আর সমস্যা হয় না, যদিও!), একটি কার্যকারিতা সমস্যা সৃষ্টি করে এবং নিজেকে রক্ষা করার চেয়ে "আপনি দেখেন, ভেক্টরগুলি বরং ধীর গতিতে", এটি এমন ধারণার কারণ হতে পারে যে স্ট্যান্ডার্ড লাইব্রেরিটি ধীর। এবং পরিচালকগণ যদি এই ধরণের ধারণাটি পেয়ে যায় তবে এটি সংস্থায় খুব বেশি দিন বাঁচতে পারে।
স্পষ্টতই আপনি যে প্ল্যাটফর্মটিকে লক্ষ্য করে যা সমর্থন করে না এমন কোনও কিছুই আপনি ব্যবহার করতে পারবেন না। তবে আমরা বর্তমানে চারটি সর্বাধিক প্রচলিত মোবাইল প্ল্যাটফর্মগুলি (অ্যান্ড্রয়েড, আইওএস, বাডা এবং পুরাতন উইনসিইসি) টার্গেট করছি এবং স্ট্যান্ডার্ড লাইব্রেরি এবং বুস্টের কয়েকটি অংশ ব্যবহার করছি ।
উইনসিইয়ের প্রথম দিকে মাইক্রোসফ্ট দ্বারা ব্যবহৃত স্ট্যান্ডার্ড লাইব্রেরির বেশিরভাগ অংশই অসমর্থিত ছিল (আইআইআরসি আইওস্ট্রিমগুলি কেবল ভিজ্যুয়াল স্টুডিও 2005 এর সাথে প্রকাশিত হয়েছিল) তবে এর পরিবর্তে এসটিএলপোর্ট ব্যবহার করা সম্ভব হয়েছিল । এবং আপনি যে কোনও কিছুতে সংকলন করার জন্য এটি পেতে পারেন। সুতরাং আমি এই কারণটিকেও অবৈধ বলব।
এছাড়াও, বেশ দীর্ঘ সময় ধরে এটি "এসটিএল" নয়, তবে এএনএসআই সি ++ স্ট্যান্ডার্ড লাইব্রেরি। এটি একেবারে একই স্ট্যান্ডার্ড ডকুমেন্ট দ্বারা সংজ্ঞায়িত করা হয়েছে যা ভাষাটি নিজেরাই সংজ্ঞায়িত করে। যে কোনও কিছু এটি সমর্থন করে না সেটিকে সত্যই সি ++ বলা যায় না।
sprintf
প্রায়শই স্মৃতিও বরাদ্দ করে। রিয়েলটাইম প্ল্যাটফর্মে, স্ট্যান্ডার্ড লাইব্রেরির ক্রিয়াকলাপগুলিতেও নির্ধারিত সীমা থাকে। এটি রিয়েলটাইম সি ++ বাস্তবায়নগুলি শক্ত করে তোলে: আপনাকে পুরো সি ++ স্ট্যান্ডার্ড লাইব্রেরিটি সাবধানতার সাথে বিকাশ করতে হবে, এটি কেবলমাত্র ছোট সি স্ট্যান্ডার্ড লাইব্রেরির চেয়ে বেশি কাজ।
আমি ইতিমধ্যে অনেক বছর ধরে এসটিএল এবং বুস্ট ব্যবহার করছি। যদি আমি এটিকে ত্যাগ করতে এবং আমার কাস্টম সরঞ্জামগুলি ব্যবহার করতে চাই, তবে অনুপ্রেরণাটি হ'ল:
সি ++ স্ট্যান্ডার্ড টেম্পলেট লাইব্রেরিটি ব্যবহার না করার একটি বড় বৈধ কারণ রয়েছে: আপনার টার্গেট প্ল্যাটফর্মগুলির মধ্যে একটির এটির পুরোপুরি মেনে চলার বাস্তবায়ন নেই (অথবা এটির কোনও প্রয়োগ নেই) এবং আপনি জানেন যে এটির একটি হবে না won't পরবর্তী বছরের মধ্যে।
জটিলতা (বাস্তবায়নের দক্ষতা) সম্পর্কে আমি জানি না তবে আমি স্টাডির পরিবর্তে কিউটি পাত্রে এবং স্ট্রিংগুলি ব্যাপকভাবে ব্যবহার করছি এবং তারা ভাল কাজ করে। আমি সেটগুলির কিউটি বাস্তবায়ন এবং ব্যবহারের জন্য আরও সহজ তালিকাটি পাই।
সুতরাং, আপনি যদি আপনার প্রয়োজনীয়তার সাথে খাপ খায় এমন কোনও লাইব্রেরি ব্যবহার করতে পারেন তবে এটি এসটিএল ত্যাগ করা ব্যবহারিক হতে পারে।
QList<T>::iterator
প্যাট্রিক পুরো এসটিএল ব্যবহার না করার কারণ উল্লেখ করেছেন , আপনার প্ল্যাটফর্মের (গুলি) নেই।
সব মিলিয়ে আমি মনে করি প্রশ্নটি বিন্দুটি অনুপস্থিত। এটি বেশিরভাগই সর্বস্ব বা কিছুই নয়, বেছে নেওয়া বাছাইয়ের একটি। আপনি পাত্রে এবং অ্যালগরিদমের সাথে ভালভাবে যেতে সিদ্ধান্ত নিতে পারেন, তবে স্ট্রিং এবং i / o এর জন্য স্ট্যান্ড লিবের বাইরে কিছু ব্যবহার করার সিদ্ধান্ত নিতে পারেন।
এটি ব্যবহারের পক্ষে ভারী কারণ না থাকলে এটি ব্যবহারিক নয়। এই জাতীয় কয়েকটি কারণগুলির মধ্যে আমি কেবলমাত্র এসটিএল (বা স্ট্যান্ডার্ড লাইব্রেরির অন্য কোনও অংশ) আংশিক বা অভাব বাস্তবায়ন বা একটি সংস্থান সীমাবদ্ধতা (মেমরি, সিপিইউ গতি, স্টোরেজ, ...) অন্তর্ভুক্ত যা আপনার কাছাকাছি যেতে হবে include আপনার নিজস্ব সরঞ্জামগুলি ঘূর্ণায়মান যা আপনাকে কী সম্পাদন করতে হবে তা মেনে চলে।
গেম ইন্ডাস্ট্রিতে বেশিরভাগ (কিছুটা হলেও ছোট) স্টুডিওগুলির অভ্যন্তরীণ লাইব্রেরি এবং অনেকগুলি স্ট্যান্ডার্ড লাইব্রেরি অংশগুলি প্রয়োগ করা হয় যা লক্ষ্য প্ল্যাটফর্মের জন্য অত্যন্ত উপযুক্ত এবং কিছু ক্ষেত্রে লক্ষ্যযুক্ত ইঞ্জিনি বা এমনকি গেমও থাকে। কনসোলগুলির জন্য একটি গেম বিকাশ করার সময় সহজভাবে বলা যায় আজকের মানগুলির দ্বারা হার্ডওয়্যারটি খুব সীমাবদ্ধ। একটি কারনে হাজারে হাজারে লাইনের হাতে তৈরি কারখানা রয়েছে assembly আপনার কোডে সমস্ত ধরণের রিসোর্স পদচিহ্নগুলি হ্রাস করা খুব গুরুত্বপূর্ণ যাতে গেমটি দ্রুত সঞ্চালিত হয় যা গেমের বিশ্বে আরও কন্টেন্টের (বা উদাহরণস্বরূপ আরও বড় একটি বিশ্ব) মঞ্জুরি দেয় যা আশাবাদী একটি ভাল পণ্যের ফলস্বরূপ।
"প্রতিটি সফল গেমটি আপনার নিজের লিঙ্কযুক্ত তালিকার বাস্তবায়ন ঘটাতে শুরু করে।"