গেমসের জন্য এসটিএল, হ্যাঁ বা না? [বন্ধ]


145

প্রতিটি প্রোগ্রামিং ল্যাঙ্গুয়েজের ধারক, অ্যালগরিদম এবং অন্যান্য সহায়ক সামগ্রীর স্ট্যান্ডার্ড গ্রন্থাগার রয়েছে। সি #, জাভা এবং পাইথনের মতো ভাষাগুলির সাথে ভাষাটির স্ট্যান্ডার্ড লিব না করে ব্যবহার করা ব্যবহারিকভাবে অকল্পনীয় ।

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

তাহলে ... এসটিএল কি ঠিক ফিট?



1
হ্যাঁ, এটাই আমি বোঝাতে চেয়েছি "আমাদের নিজস্ব প্রয়োগকরণ" ব্যবহার করে। :)
উপুড়হস্ত

3
আপনার কাছে বেস্ট অফ গেম প্রোগ্রামিং রত্নগুলি সন্ধান এবং কেনার সুযোগ থাকলে তা করুন। অ্যারেনা নেট, জেমস বোয়ার, "গেম প্রোগ্রামিং এ এসটিএল ইন গেমিং প্রোগ্রামিং" এর একটি নিবন্ধ শিরোনাম রয়েছে, যেখানে তিনি এসটিএল ব্যবহারের ক্ষেত্রে সত্যই একটি ভাল মামলা করেছেন।
চিগুইরে

আসলে জাভা এর স্ট্যান্ডার্ড লিব ছাড়াই ব্যবহার করা বেশ অনুমেয়, একে
জে 2 এমই

1
দুর্দান্ত প্রশ্ন!
অ্যালান

উত্তর:


191

ফিরে যখন আমি পেশাদার গেম ডেভলপমেন্টে কাজ করি তখন এসটিএল খুব অপরিপক্ক এবং ফুলে যায়। তবে এটি ছিল> 10 বছর আগে।

এখন আমি সামরিক সিমুলেশনে কাজ করি, যার আরও শক্ততর পারফরম্যান্স প্রয়োজনীয়তাও রয়েছে (যেমন ফ্রেমরেট কখনও কোনও এফপিএসের নীচে যেতে পারে না)। সামরিক সিমুলেশনে এসটিএল পুরো জায়গা জুড়ে ব্যবহৃত হয়।

আপনাকে STL ব্যবহার না করতে বলে এমন কিছু লোক যুক্তিটি ব্যবহার করে যে এটি সর্বদা নিখুঁত বা এমনকি সমস্যাটির সর্বোত্তম সমাধান নয়। কিন্তু এটি প্রশ্নের উত্তর নয়। প্রশ্নটি হওয়া উচিত: গেমগুলিতে এসটিএল ব্যবহারের সাথে অন্তর্নিহিত কোনও ভুল আছে? আমি বলব না, এসটিএল হ'ল বেশিরভাগ সময় ব্যবহারকারী তার নিজের থেকে কী আসে তার চেয়ে ভাল বাস্তবায়ন হয়।

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


49
এটি বেশ কঠিন পরামর্শ। "এসটিএল স্লো" মেম কমপক্ষে পাঁচ বছর ধরে সত্য হয়নি এবং সম্ভবত এটি আরও দীর্ঘতর। এটি "জাভা ধীর" এবং "। নেট ধীর" ধীরে ধীরে ধীরে ধীরে অবধি অবিরত থাকবে, যতক্ষণ না এটি সবার আগে প্রকাশ হয়ে যায় যে এটি আর নেই। এসটিএল আপনাকে আরও ভাল প্রোগ্রাম লিখতে সহায়তা করে; আমি এতদূর যেতে পেরেছি যে এটি ব্যবহার না করা, বেশিরভাগ ক্ষেত্রে (যে কোথাও 0.1% বাদে) দায়বদ্ধ নয়। (। দাবী যে কোন প্রদত্ত সমস্যা ডোমেইন মাপসই করা হবে না প্রায়ই পথ সমস্যা মোকাবেলা এর একজন আর্জি আরো আছে, STL নিজেই ঠিক করুন না আপনার কোড, ভাবেন।)
এড Ropple

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

22
@ সিমন: সমস্ত যথাযথ সম্মানের সাথে, শেষ উদাহরণটি চূড়ান্ত অজ্ঞতার পরিচায়ক এবং এসটিএল এর সাথে তার কোনও যোগসূত্র নেই ... সেই ব্যক্তি তালিকা অনুসারে বাছাই করা যায় এমন কোনও ভাষায় একই কাজ করবে। এটাই তার ভাবনা ভেঙে গেছে।
ggambett

@ এডরপ্পল পিপিএম চিত্র ফাইলগুলির জন্য একটি এসটিএল পার্সার প্রয়োগ করার চেষ্টা করুন (কেবলমাত্র পি 6 বা পি 3 টার্গেট করাতে কোডের 100 টিরও কম লাইন)। ফলাফলের অর্ধেক কোডটি কেবল মন্তব্য লাইনগুলি এড়িয়ে যাওয়ার জন্য কারণ এসটিএল এর মতো কিছু সরবরাহ করে নাif(stream.nextCharacter() == '#') stream.skipLine();
গেমডেভোপার

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

63

আমি বলতে হবে যে, আমার মাথার উপরে বন্ধ, এটা STL ব্যবহার করতে যদি না জানেন একটি উন্নততর ধারণা ঠিক কেন আপনি তা ব্যবহার করতে চাই না।

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

এসটিএল "বিশ্বের সংকীর্ণ দৃষ্টিভঙ্গি" প্রয়োগ করে যে অভিযোগগুলি আমাকে একটু নির্বোধ বলে আঘাত করে। তারা পাত্রে। তাদের অপারেশনগুলির একটি সীমিত সেট রয়েছে কারণ ধারকগুলির অপারেশনগুলির সীমিত সেট রয়েছে। আপনি কি করছেন যে এই সঙ্গে জিব না?


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

2
সুতরাং আপনি সাধারণত পরীক্ষিত, জোরালো শক্তিশালী কোডের চেয়ে বাড়ির ঘূর্ণিত কোডটি চান? সমস্যা ডোমেইন প্রকল্পের যে প্রকল্প থেকে বিভিন্ন সব নয় (হয়তো এমবেডেড প্রকল্প এমনকি থেকে সরাইয়া কনসোল শালীন STL বাস্তবায়নের এই দিন আছে!)। গেম নির্বিশেষে, আপনার সমস্যাটি ঠিক তেমন আলাদা নয় এবং আপনি যদি শিপিংয়ের উদ্দেশ্যে কিছু তৈরি করে থাকেন তবে আপনার দৃ rob় কোড লেখার একটি অন্তর্গত দায়িত্ব রয়েছে have চাকা হতে যাচ্ছে reimplementing হয় ভাল বলিষ্ঠতার এবং নমনীয়তা? আমি "না" এর দিকে ঝুঁকছি। এটি "একমাত্র উপায়" বোঝায় না যে এটি সাধারণত উচ্চতর নয়।
এড রুপল

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

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

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

35

গেমসের জন্য এসটিএল ব্যবহার না করার খুব কম কারণ আমি দেখেছি।

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

অবশ্যই, আপনি যদি এসটিএল ব্যবহার করছেন এবং বড়, নন-পয়েন্টার ধরণের স্ট্রিংয়ের মানচিত্রের মতো বোবা জিনিস করছেন তবে আপনার নিজের হাতে আরও বড় সমস্যা রয়েছে।


প্রকৃতপক্ষে মানচিত্রে বৃহত নন পয়েন্টার প্রকারগুলি ব্যবহার করা ভাল ব্যবহারের ক্ষেত্রে কারণ স্ট্ডলিব মানচিত্রে পুনরাবৃত্তকারীকে অকার্যকর না করার প্রয়োজনীয়তা রয়েছে যা পয়েন্টারগুলি এবং পৃথকভাবে বরাদ্দকৃত ম্যাপযুক্ত উপাদানগুলি প্রয়োগের ক্ষেত্রে প্রয়োগকে বাধ্য করে। গেমসের সর্বোত্তম সমাধান হ'ল google::sparse_mapনিজের নিজের ব্যবহার বা লেখা।
v.oddou

ঘন মানচিত্র কেন নয়?
গেম ডেভেলপার

23

ডিফল্ট এসটিএলে বেশ কয়েকটি সমস্যা রয়েছে যা গেমসের সাথে ব্যবহার করা কঠিন করে তোলে, বিশেষত যখন স্মৃতি প্রান্তিককরণের ক্ষেত্রে আসে।

EA STL এর মতো একটি কাস্টমাইজড বৈকল্পিক গেমসের জন্য বিশেষভাবে ডিজাইন করা হয়েছে এবং আপনাকে আরও ভাল মেমরির পারফরম্যান্স এবং কনসোল ব্যবহারযোগ্যতা পেতে পারে। এটি ২০১ 2016 সালে বিএসডি -৩ অনুচ্ছেদের অধীনে গিটহাবের একটি সংগ্রহস্থল সহ ওপেন সোর্সে পরিণত হয়েছে ।


19
এসটিএল এর মেমরির ব্যবহার এবং গেমসের সমস্যাগুলি কাস্টম বরাদ্দকারী ক্লাসগুলির সাথে সমাধান করা যায়। প্রকৃতপক্ষে, আমার আগের চাকরিতে, আমাদের "কাস্টম" ভেক্টর শ্রেণি কেবলমাত্র একটি পাতলা মোড়ক ছিল std::vectorযা ডিফল্ট বরাদ্দকারীকে ছাড়িয়ে যায়।
ব্লেয়ার হলোয়ে

1
@ ব্লেয়ার হলোয়ে: "কাস্টম বরাদ্দকারী শ্রেণিভিত্তিক, উদাহরণ-ভিত্তিক নয় All দুর্ভাগ্যক্রমে, stl- বরাদ্দকারীদের সাথে সমস্যাগুলি। " EA এসটিএল এসটিডি বরাদ্দকারীদের খারাপ হওয়ার জন্য আরও বেশ কয়েকটি বৈধ কারণ জানায়। এটি কেবল "ওয়েথার বা এগুলি ওভাররাইড করা যায় না" নয়।
সাইমন

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

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

1
@ সিমন: আমি এখানে পার্টিতে কিছুটা দেরি করেছি, তবে আপনি যদি এর অর্থ বোঝাতে চান তবে আপনি যদি একটি নির্দিষ্ট উদাহরণ দিয়ে থাকেন তবে আমি আগ্রহী। এসটিএল দক্ষতার সাথে সমাধান করার পক্ষে খুব সাধারণভাবে কোনও নির্দিষ্ট সমস্যা সমাধানের একটি উত্তম উদাহরণ কী?
ব্রাফল

21

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

এসটিএল / বুস্ট, এটি কি গেমদেবের অন্তর্গত? যদি এর অংশ হয়, কোনটি?

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

আমি আরও লক্ষ্য করেছি যে বেশিরভাগ প্রো গেম ডেভেলপাররা সি ++ এর চেয়ে সিটির দিকে বেশি প্রচেষ্টা করে।


18
সি এর দিকে আরও বেশি প্রচেষ্টা চালানোর বিষয়ে আমি একমত নই, গেমস বিকাশকারীদের পাশাপাশি এসডিকে লেখকরা সি ++ ব্যবহার করেন। প্রকৃতপক্ষে সর্বশেষ প্রধান সি ব্যবহারকারী আইডি ছিলেন এবং এমনকি কারম্যাক এখন সি ++ তে চলে গেছে ...
Goz

82
মিঃ অ্যাক্টনের মন্তব্যটি স্কেচি মনে হচ্ছে। সাধারণভাবে বলতে গেলে এই সমস্যাগুলির জন্য এসটিএল একটি ভাল ফিট । আপনি যদি এমনভাবে কিছু করার চেষ্টা করছেন যে এসটিএল পদ্ধতির "ভুল" বলে মনে হচ্ছে আপনার পদ্ধতির পুনরায় মূল্যায়ন করা এবং আপনি বাস্তবে এটি একটি স্মার্ট উপায়ে করছেন কিনা তা দেখতে সম্ভবত একটি ভাল ধারণা। আমার অভিজ্ঞতা, প্রায়শই না আপনি সম্ভবত না। (আইএমও, আপনার সরঞ্জামটিকে প্রারম্ভ থেকে পুনরায় করার জন্য আপনার সরঞ্জামগুলি ফেলে দেওয়ার চেয়ে আপনার সরঞ্জামগুলির প্রসঙ্গে
দৃ strongly়ভাবে

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

5
এটি ডিএসে যেমন কাজ করে অন্য কোনও প্ল্যাটফর্মে যেমন কাজ করে তেমনি কার্যকর। আমি সমস্ত ইউআই এবং এআই কোড জুড়ে এসটিএল ব্যবহার করেছি। গেমটি ds.ign.com/articles/832/832147p1.html ছিল । আমি একটি ছোট স্টুডিওতে কাজ করছিলাম যা
আমাজের

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

19

আপনি যদি কোনও কারণে নিজেকে এসটিএলে ইতিমধ্যে বিদ্যমান এমন কিছু আবার লিখতে দেখেন তবে থামান । এসটিএল ব্যবহার করুন।

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


7
মানচিত্র <> কোনও গেমের প্রসঙ্গে মেমরি বা সিপিইউ দক্ষ কোনও কিছুর জন্য আপনি যা ব্যবহার করতে চান তা প্রায় কখনও নয়। হ্যাশ_ম্যাপ <> প্রায় সবসময়ই একটি ভাল পছন্দ, যদিও হ্যাশ_ম্যাপের কার্যকারিতা বিক্রেতার সাথে খুব আলাদা fers যদি আপনি এমন কোনও গেম তৈরি করছেন যা হয় কনসোলের জন্য হয় বা স্কেলযোগ্য নেটওয়ার্ক প্লে বৈশিষ্ট্যযুক্ত এসটিএল আপনার উদ্দেশ্যগুলির জন্য একেবারে ধীর বা প্রস্ফুটিত হতে পারে।
বেন জেইগলার

3
আনর্ডার্ড_ম্যাপ <> এখন ব্যাপকভাবে উপলব্ধ এবং বর্তমান টিআর 1 খসড়ায় অত্যন্ত কঠোর পারফরম্যান্স প্রয়োজনীয়তা রয়েছে। (অতিরিক্ত স্পেসিফিকেশনের পর্যায়ে আমি মনে করি - এটি এমনকি খোলা হ্যাশিং নিষিদ্ধ করে, এবং এটি সাধারণত ধীরে ধীরে ধীরে ধীরে থাকাকালীন, আমি মনে করি না এটি স্ট্যান্ডার্ডের দ্বারা একেবারে নিষিদ্ধ করা উচিত))

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

সত্যটি unordered_mapহয় সি ++ ১১ এর বা বুস্ট উভয়ই ধীরে ধীরে, আপনি যা চান তা একটি মুক্ত ঠিকানা হ্যাশ মানচিত্র, যেমন গুগল :: স্পার্স_ম্যাপ বা আপনার নিজস্ব।
v.oddou

16

এসটিএল কি গেমসের জন্য উপযুক্ত? স্পষ্টভাবে. গেমগুলি সফ্টওয়্যারের জটিল টুকরো, এসটিএল এমন বৈশিষ্ট্য সরবরাহ করে যা জটিলতা পরিচালনা করতে সহায়তা করে, তাই এটি ভাল।

এটি কি আপনার প্ল্যাটফর্মের জন্য উপযুক্ত? অগত্যা। আপনি যদি কনসোলের জন্য লিখছেন তবে আপনাকে মেমরি এবং ক্যাশের ব্যবহার সম্পর্কে খুব সতর্ক থাকতে হবে। এসটিএল এটি খুব সহজ করে না।

আমি মনে করি যে প্রায়শই আমরা "উচ্চতর পারফরম্যান্স রিয়েল-টাইম গেমগুলি এম্বেড করা বা বিসপোক হার্ডওয়ারে চালিত হয়" এর জন্য "গেমস" ভুল করি, তবে এটি আলাদা করা গুরুত্বপূর্ণ important যদি আপনি এমন একটি উইন্ডোজ গেম লিখছেন যা ধ্রুবক 60fps তে পূর্ণস্ক্রিনে চালানোর চেষ্টা করছে না তবে স্ট্যান্ডার্ড লাইব্রেরি আপনাকে যে সরঞ্জামগুলি দেয় তা এড়াতে কোনও কারণ নেই।


10

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

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

কাস্টম বরাদ্দকারী মেমরি সমস্যা হ্যান্ডেল করার একটি উপায়, তবে অন্যটি (প্রায়শই অবহেলিত) বিকল্পটি শ্রেণিভিত্তিক নতুন ব্যবহার করা এবং মুছুন। বিশাল কর্মক্ষমতা বৃদ্ধি এইভাবে হতে পারে।

সমস্যা সমাধানের বিষয়ে বুস্ট এবং এসটিএলগুলির একটি সংক্ষিপ্ত দৃষ্টিভঙ্গি ধারণাটি খাঁটি উন্মাদনা। বৈশিষ্ট্য এবং নীতিগুলির মাধ্যমে এসটিএল এবং বুস্টে কয়টি জিনিস কাস্টমাইজ করতে সক্ষম তা দেখে আমি হতবাক। উদাহরণ হিসাবে স্বতন্ত্র স্ট্রিং তুলনা ক্ষেত্রে দেখুন।

দীর্ঘ লিঙ্ক সময় এবং কোড ব্লাট সম্পর্কিত, নতুন বহিরাগত টেম্পলেটটি এতে সহায়তা করবে। সাধারণত আমি দীর্ঘ সংকলন সময় অতিরিক্ত সংযোগ এবং pch অপব্যবহার থেকে আসে।

হোমস্পানের উপর দিয়ে এসটিএল ব্যবহার করার সবচেয়ে জোরালো কারণ হ'ল এমন কয়েক মিলিয়ন লোক আছেন যারা আপনাকে এসটিএল সাহায্য করতে পারেন। সর্বদা হিসাবে, অকালে এবং পরীক্ষা, পরীক্ষা, পরীক্ষা অপ্টিমাইটিস করবেন না।


আকর্ষণীয় ধারণা; " ক্লাস ভিত্তিক নতুন ব্যবহার এবং মুছুন " বলতে কী বোঝ ? আপনার অর্থ, ইতিমধ্যে গাদাতে থাকা অবজেক্টগুলি ব্যবহার করে কোনও প্রক্রিয়া গতি বাড়িয়ে দেবেন?
জনবেকার্স

9

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


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

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

5

এটা নির্ভর করে. প্রকল্পটি কতটা বড়, কোন প্ল্যাটফর্ম (গুলি) এবং টাইমলাইনটি কী?

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

তবে অন্যান্য পরিস্থিতিতে যথাযথভাবে প্রয়োগ করার সময় এসটিএল এবং এমনকি বুস্টও খুব কার্যকর হতে পারে। আমি এমন শিরোনামগুলিতে কাজ করেছি যেগুলি এসটিএল / বুস্টের একটি নির্বাচন ব্যবহার করেছে এবং কোডগুলির জন্য এটি একটি নিখুঁত স্বপ্ন ছিল: কম বাগ / লিক এবং কোড বজায় রাখা সহজ মানে আরও মজাদার নতুন বৈশিষ্ট্যগুলির কোডিং! বিশেষত শখের প্রকল্পগুলির জন্য, এটি অনুপ্রেরণা বিভাগে একটি বিশাল জয়।

সুবিধার্থে ট্রেড পারফরম্যান্স কখন জানুন!


1
"সুবিধার্থে কখন ব্যবসায় বাণিজ্য করবেন তা জানুন" Know হ্যাঁ. এই বাক্যটি একাকী যতটা উত্তরের উত্তর। আপনার গেমটি দিয়ে আপনার কী অর্জন করতে হবে তা নির্ধারণ করুন, সমবয়সীদের সাথে পরামর্শ করুন এবং সিদ্ধান্ত নিন যে এসটিএল আপনাকে সেখানে পৌঁছতে বা আপনাকে বাধা দিতে সাহায্য করবে কিনা। আমি বলব যদি আপনি আপনার গেমের সাথে নেক্সট-জেন গ্রাফিক্স এবং পারফরম্যান্সের জন্য বার নির্ধারণ না করে থাকেন তবে এসটিএল সম্ভবত আপনাকে সহায়তা করবে।
gkimsey

4

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

আপনি যখন গেমের এআই, ব্যবহারকারীর অভিজ্ঞতা, বা আরও ভাল কিছু নিয়ে কাজ করতে পারেন তখন চাকাটিকে পুনরায় উদ্বেগ করা কেন বিরক্ত করবেন; পরীক্ষা এবং ডিবাগিং?


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

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

4

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

সর্বাধিক গুরুত্বপূর্ণ বিষয় হ'ল প্রতিটি ধারক প্রকারের শক্তি এবং দুর্বলতাগুলি কী তা বোঝা এবং আপনি যে কাজটি করছেন তার জন্য সঠিক ধারকটি চয়ন করুন।


4

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

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


4

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


3

আমি এসটিএল ব্যবহার করে গেমস তৈরি করেছি এবং আমি এটি পছন্দ করি এবং এটি দুর্দান্ত পারফর্ম করে বলে মনে হয়।


3

ভাল প্রশ্ন! আরও সুনির্দিষ্ট প্রশ্ন হ'ল কোন গেমের এমন কিছু সাধারণ প্রয়োজনীয়তা কী যা এসটিএল এবং বুস্টের সাথে পূরণ করা যায় না।

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

অধিকন্তু, টেমপ্লেটগুলির অত্যধিক ব্যবহারের ফলে একটি বিশাল কোড বেসে খুব দীর্ঘ সংকলনের সময় হতে পারে এবং এটি আপনার এক্সিকিউটেবলের আকারটি স্ফীত করে দেবে যাতে এটি পিএস 3 এর একটি সহায়ক কোর এর ক্যাশের মধ্যে আর ফিট করে না।

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


2

আপনার গেমের জন্য যদি এসটিএল ভাল ফিট হয় তবে আপনার গেমের জন্য এসটিএল একটি ভাল ফিট।

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

লোকেরা তাদের গেমগুলিতে এসটিএল ব্যবহার করা এড়ানো উচিত নয় কারণ অন্যান্য লোকেরা গেমগুলিতে এসটিএল ব্যবহার করা এড়িয়ে যায়; তারা যদি তাদের সমস্ত বিকল্পকে ওজন করে নিয়েছে এবং তারা সত্যই বিশ্বাস করে যে অন্য একটি বাস্তবায়ন তাদের পণ্যের মান উন্নত করবে they


2
আমি আপনার মন্তব্যের শেষ অংশের সাথে 100% সম্মত, তবে আমি আরও এগিয়ে যাব: আপনি যদি নির্ধারণ করে দেখাতে পারেন যে এসটিএল কেন একটি ভাল বিকল্প নয়, এসটিএল ব্যবহার করবেন না। অন্যথায়, না। কার্গো কাল্ট ("ওহ, গেম ডেভেলপাররা সি ++ ব্যবহার করে!" থেকে "ওহ, গেম ডেভেলপাররা এসটিএল ব্যবহার করে না!") অস্বাস্থ্যকর। তবে আমি আপনার দ্বিতীয় অনুচ্ছেদে একটি সমস্যা নিয়ে কিছুটা নিয়ে যাব: এসটিএলকে পুনরায় বাস্তবায়ন করার পক্ষে এখনও যথেষ্ট নিখুঁত vectorলোকেরা এসটিএল লোকদের চেয়ে আরও ভাল ধারণা গড়ে তুলবে এমনটি অসম্ভব সম্ভাবনা । আপনি যখন এটি করতে পারবেন ততক্ষণে আপনি আর ভাবেন না যে আপনার প্রয়োজন হবে! :-)
এড রপ্পল

2

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

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

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


2

আমি মনে করি এই আলোচনাটি সংক্ষেপে নিম্নরূপ দেওয়া যেতে পারে:

মাঝারিভাবে লেখা অ্যাপ্লিকেশন-স্পেসফিক কোড <সুনির্দিষ্ট লিখিত সাধারণ উদ্দেশ্য কোড <ভালভাবে লেখা অ্যাপ্লিকেশন-নির্দিষ্ট কোড

যার বাড়ির বিকাশযুক্ত সমাধান 3 বিভাগে আসবে তারা অবশ্যই তাদের বিশেষ সমস্যার জন্য মূল প্রশ্নের উত্তর জানে। এসটিএল 2 বিভাগে আসে, সুতরাং যার কাছে প্রশ্ন জিজ্ঞাসা করা দরকার, " আমাকে এসটিএল ব্যবহার করা উচিত ", উত্তরটি সম্ভবত হ্যাঁ।


2

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


1

আমি মনে করি এই প্রশ্নটি আসলেই একটি বড় আনসকেড প্রশ্ন - আমার ওয়াইতে কি এক্স ব্যবহার করা উচিত ? এবং সত্যই উত্তর দেওয়ার একমাত্র উপায় হ'ল এটি নিজের জন্য চেষ্টা করা। আপনার খুঁজে পাওয়া প্রত্যেক ব্যক্তির জন্য যে এক্স দুর্দান্ত কাজ করে বলে, আপনি এমন কাউকে খুঁজে পাবেন যাকে বলে যে এটি ভয়ঙ্কর। এবং তাদের উভয়ই সঠিক - তাদের প্রকল্পের জন্য।

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


1
আপনি ঠিক বলেছেন, রিফ্যাক্টরিং জন্য একটি বিশাল জরিমানা হতে পারে; সুতরাং একটি স্বেচ্ছাসেবীর পরিবর্তে একটি অবগত সিদ্ধান্ত গ্রহণ আপনার দীর্ঘ সময়ের জন্য সময় সাশ্রয় করবে।
অ্যালান

1

আমি এসটিএলকে না বলি। আমার কারণটি বেশ সহজ:

  1. গেমগুলি লেখার জন্য আপনার দরকার নেই L এমনকি বড় বেশী না।
  2. এসটিএল আপনার সংকলনের সময় নাটকীয়ভাবে বৃদ্ধি করে।
  3. বড় সংকলন সময় আপনার বিকাশ উপর কম পুনরাবৃত্তি বাড়ে।

আমি পুনরাবৃত্তি গণনাটিকে সর্বাধিক গুরুত্ব হিসাবে ধরে রাখি, সুতরাং আমি কেবল এসটিএল এবং অন্য যে কোনও বিকাশ কৌশল যা পুনরাবৃত্তিকে ধীর করে দেয় (যেমন এর প্রয়োজনে আর্কিটেকিং, বা সংকলন করা দরকার এমন স্ক্রিপ্ট ভাষাগুলি)।

ব্যয়বহুল পুনরাবৃত্তির ফলে লোকেরা বিশাল বিকাশ ঘটায় যা খুব কম সংখ্যক ঘটতে শুরু করে stuff আমি এটি দেখেছি এবং শুনেছি এবং অপরাধীদের মধ্যে একটি টেম্পলেট লাইব্রেরির জন্য সময় সংকলন বলে মনে হয়।


1
আমি সংকলন সময় সম্পর্কে একমত। যে কোনও উল্লেখযোগ্য সংকলন সময় হারিয়ে যাওয়া কাজের পরিমাণ দ্বিগুণ করে; উদাহরণস্বরূপ, যদি সংকলনটি 5 মিনিট স্থায়ী হয়, আপনি প্রতিবার 10 মিনিট কফি পান করতে ব্যয় করবেন। ;)
Ipsquiggle

যদিও আমি এই তর্কটির উভয় পক্ষই দেখছি, অবশ্যই বলতে হবে আমি আপনার যুক্তির সাথে দৃ argument়ভাবে একমত, রিচার্ড। +1 টি।
ইঞ্জিনিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.