উদাহরণস্বরূপ, অতীত থেকে সিসইন্টার্নালস সরঞ্জাম "ফাইলমোন" এর মধ্যে একটি কার্নেল-মোড ড্রাইভার রয়েছে যার উত্স কোডটি সম্পূর্ণরূপে একটি 4,000-লাইন ফাইলে রয়েছে। প্রথম লিখিত পিন প্রোগ্রামের জন্য একই লিখিত (~ 2,000 এলওসি)।
উদাহরণস্বরূপ, অতীত থেকে সিসইন্টার্নালস সরঞ্জাম "ফাইলমোন" এর মধ্যে একটি কার্নেল-মোড ড্রাইভার রয়েছে যার উত্স কোডটি সম্পূর্ণরূপে একটি 4,000-লাইন ফাইলে রয়েছে। প্রথম লিখিত পিন প্রোগ্রামের জন্য একই লিখিত (~ 2,000 এলওসি)।
উত্তর:
একাধিক ফাইল ব্যবহার করতে সর্বদা অতিরিক্ত প্রশাসনিক ওভারহেডের প্রয়োজন হয়। পৃথক সংকলন এবং লিঙ্কিংয়ের সাথে একটি বিল্ড স্ক্রিপ্ট এবং / অথবা মেকফিল সেটআপ করতে হবে, বিভিন্ন ফাইলের মধ্যে নির্ভরতা সঠিকভাবে পরিচালিত হয়েছে তা নিশ্চিত করে, ইমেল বা ডাউনলোডের মাধ্যমে উত্স কোডের সহজ বিতরণের জন্য একটি "জিপ" স্ক্রিপ্ট লিখতে হবে এবং তাই উপর. আধুনিক আইডিই আজ সাধারণত সেই বোঝা অনেকটাই নেয়, তবে আমি যখন প্রথম পিং প্রোগ্রামটি লেখা হয়েছিল তখন আমি খুব নিশ্চিত যে এ জাতীয় কোনও আইডিই উপলব্ধ ছিল না। এবং 4000 ডলারের মতো ছোট ফাইলের জন্য , যেমন কোনও আইডিই ছাড়াই আপনার পক্ষে একাধিক ফাইল পরিচালনা করে, উল্লিখিত ওভারহেডের মধ্যে বাণিজ্য এবং একাধিক ফাইল ব্যবহারের সুবিধাগুলি লোকজনকে একক ফাইলের পদ্ধতির জন্য সিদ্ধান্ত নিতে দেয়।
কারণ সি মডিউলাইজেশনে ভাল নয়। এটি অগোছালো (শিরোলেখের ফাইল এবং # টি অন্তর্ভুক্ত, এক্সটার্নাল ফাংশন, লিংক-টাইম ত্রুটি ইত্যাদি) পেয়ে যায় এবং আপনি যত বেশি মডিউল আনেন ততই ট্র্যাফিকটি তা পায়।
আরও আধুনিক ভাষাগুলির অংশে আরও উন্নততর মডুলারাইজেশন ক্ষমতা রয়েছে কারণ তারা সি এর ভুল থেকে শিখেছিল এবং তারা আপনার কোডবেসকে ছোট, সরল ইউনিটে বিভক্ত করা সহজ করে তোলে। তবে সি এর মাধ্যমে, সমস্ত সমস্যা এড়ানো বা হ্রাস করা উপকারী হতে পারে, এমনকি যদি এটি কোনও একক ফাইলের জন্য খুব বেশি কোড হিসাবে বিবেচিত হবে তবে লম্পট করাও।
Performanceতিহাসিক কারণগুলি বাদ দিয়ে আধুনিক কার্য সম্পাদন-সংবেদনশীল সফ্টওয়্যারটিতে এটি ব্যবহার করার একটি কারণ রয়েছে। সমস্ত কোড যখন একটি সংকলনের ইউনিটে থাকে, তখন সংকলক পুরো প্রোগ্রামের অপটিমাইজেশন সম্পাদন করতে সক্ষম হয়। পৃথক সংকলন ইউনিট সহ, সংকলক নির্দিষ্ট উপায়ে পুরো প্রোগ্রামটিকে অনুকূল করতে পারে না (যেমন নির্দিষ্ট কোডটি অন্তর্ভুক্ত করে)।
সংযোগকারীটি যা করতে পারে তা ছাড়া লিঙ্কার অবশ্যই কিছু অপ্টিমাইজেশন সম্পাদন করতে পারে তবে সমস্ত কিছু নয়। উদাহরণস্বরূপ: আধুনিক লিঙ্কারগুলি একাধিক অবজেক্ট ফাইল জুড়েও অবাস্তব ফাংশনগুলি এলিডিংয়ে সত্যই ভাল। তারা অন্য কিছু অপ্টিমাইজেশান সম্পাদন করতে সক্ষম হতে পারে তবে কম্পাইলার কোনও ফাংশনের অভ্যন্তরে কী করতে পারে তার মতো কিছুই নয়।
একক উত্স কোড মডিউলটির একটি সুপরিচিত উদাহরণ হ'ল এসকিউএলাইট। আপনি এসকিউএলাইট সম্মিলন পৃষ্ঠায় এটি সম্পর্কে আরও পড়তে পারেন ।
1। নির্বাহী সারাংশ
"Sqlite3.c" নামক সি-কোডের একক বৃহত ফাইলগুলিতে 100 টিরও বেশি পৃথক উত্স ফাইলগুলি সংমিশ্রিত হয় এবং "সংহতকরণ" নামে পরিচিত। সংমিশ্রণটিতে এসকিউএলাইট এম্বেড করার জন্য অ্যাপ্লিকেশনটির প্রয়োজনীয় সমস্ত কিছু রয়েছে। সংমিশ্রণ ফাইলটি 180,000 লাইনের বেশি লম্বা এবং 6 মেগাবাইট আকারের।
এসকিউএলাইটের জন্য সমস্ত কোডকে একটি বড় ফাইলে একত্রিত করা এসকিউএলাইটকে মোতায়েন করা আরও সহজ করে তোলে - ট্র্যাক রাখার জন্য কেবল একটি ফাইল রয়েছে। এবং সমস্ত কোড একক অনুবাদ ইউনিটে থাকায়, সংকলকরা 5% থেকে 10% এর মধ্যে দ্রুততর মেশিন কোডের ফলে আন্তঃ-পদ্ধতি অপটিমাইজেশন আরও ভাল করতে পারে।
$(CC) $(CFLAGS) $(LDFLAGS) -o $(TARGET) $(CFILES)
যা একটি একক সোডেস ফাইলে সমস্ত কিছু স্থানান্তরিত করার চেয়ে। এমনকি আপনি পুরো টার্গেটটি সংকলনটি traditionalতিহ্যবাহী বিল্ড স্ক্রিপ্টের বিকল্প টার্গেট হিসাবে করতে পারেন যা উত্সের পরিবর্তনের পরিবর্তিত সোর্স ফাইলগুলি পুনরায় সংশোধন করতে এড়িয়ে যায়, লোকেরা কীভাবে উত্পাদন লক্ষ্যমাত্রার জন্য প্রোফাইলিং এবং ডিবাগিং বন্ধ করে দিতে পারে তার অনুরূপ। সবকিছু যদি একটি বড় হিপ ও উত্সে থাকে তবে আপনার কাছে সেই বিকল্প নেই। লোকেরা যা অভ্যস্ত তা নয়, তবে এটি সম্পর্কে জটিল কিছু নেই।
অন্যান্য উত্তরদাতা যে সরলতার ফ্যাক্টরটি উল্লেখ করেছেন সেগুলি ছাড়াও অনেকগুলি সি প্রোগ্রাম একটি ব্যক্তি দ্বারা রচিত হয়।
যখন আপনার একটি দল থাকে, কোড পরিবর্তনের ক্ষেত্রে অকার্যকর দ্বন্দ্ব এড়াতে বিভিন্ন উত্স ফাইল জুড়ে অ্যাপ্লিকেশনটি বিভক্ত করা বাঞ্ছনীয় হয়ে ওঠে। বিশেষত যখন উন্নত এবং খুব জুনিয়র প্রোগ্রামার উভয়েই প্রকল্পটিতে কাজ করছেন।
যখন একজন ব্যক্তি নিজে কাজ করছেন, এটি কোনও সমস্যা নয়।
ব্যক্তিগতভাবে, আমি অভ্যাসগত জিনিস হিসাবে ফাংশনের ভিত্তিতে একাধিক ফাইল ব্যবহার করি। তবে তা কেবল আমিই।
কারণ C89 এর inline
কার্যকারিতা ছিল না । যার অর্থ হ'ল আপনার ফাইলটিকে ফাংশনে বিভক্ত করার ফলে স্ট্যাকের উপর চাপ দেওয়া মানগুলির ওভারহেড এবং চারপাশে ঝাঁপিয়ে পড়ে। এটি 1 বৃহত সুইচ স্টেটমেন্ট (ইভেন্ট লুপ) এ কোডটি প্রয়োগের ক্ষেত্রে একটি ওভারহেডের বেশ কিছুটা যোগ করেছে। তবে কোনও ইভেন্টের লুপটি আরও বেশি পরিমার্জনযুক্ত সমাধানের চেয়ে দক্ষতার সাথে প্রয়োগ করা (বা এমনকি সঠিকভাবে) সবসময় অনেক বেশি কঠিন। সুতরাং বড় আকারের প্রকল্পগুলির জন্য লোকেরা এখনও মডুলারাইজ করতে বেছে নেবে। কিন্তু যখন তারা নকশাটি আগে থেকেই চিন্তাভাবনা করে এবং 1 টি স্যুইচ বিবৃতিতে রাষ্ট্রকে নিয়ন্ত্রণ করতে পারে, তারা তার পক্ষে বেছে নিয়েছিল।
আজকাল, এমনকি সিতে, একটিকে মডুলারাইজ করার জন্য পারফরম্যান্স ত্যাগ করতে হবে না কারণ এমনকি সি ফাংশনেও অন্তর্ভুক্ত করা যেতে পারে।
inline
কীওয়ার্ড ছিল না সেহেতু ইনলাইন করতে পারছিল না এজন্য আপনাকে একটি বিশাল ফাংশনে সমস্ত কিছুই লিখতে হয়েছিল ভুল। inline
পারফরম্যান্স অপটিমাইজেশন হিসাবে আপনার কখনই ব্যবহার করা উচিত নয় - সংকলকটি সাধারণত আপনার চেয়ে ভাল জানবে (এবং কীওয়ার্ডটিকে পাশাপাশি উপেক্ষা করতে পারে)।
inline
শব্দ linker সংক্রান্ত শব্দার্থবিদ্যা যা হোক বা না হোক ইন-লাইন অপ্টিমাইজেশন সম্পাদন করতে প্রশ্নে চেয়ে আরও বেশি গুরুত্বপূর্ণ হয়ে গেছে, কিন্তু কিছু বাস্তবায়নের ইন-আস্তরণের নিয়ন্ত্রণ করতে এবং এই ধরনের জিনিস কখনও কখনও খুবই গুরুত্বপূর্ণ হতে পারে অন্যান্য নির্দেশনা আছে। কিছু ক্ষেত্রে, কোনও ক্রিয়াকলাপটি দেখতে অনেকটা বড় আকারের হওয়ার মতো হতে পারে তবে ধ্রুবক ভাঁজগুলি আকার এবং সম্পাদনের সময়টিকে প্রায় কোনও কিছুই হ্রাস করতে পারে। একটি সংকলক যা ইন-
এটি বিবর্তনের উদাহরণ হিসাবে গণ্য, যা আমি অবাক হয়ে এখনও উল্লেখ করা হয়নি।
প্রোগ্রামিংয়ের অন্ধকার দিনগুলিতে, একটি একক ফাইলের সংকলন কয়েক মিনিট সময় নিতে পারে। যদি কোনও প্রোগ্রামটি সংশোধন করা হয়, তবে প্রয়োজনীয় শিরোলেখ ফাইলগুলি অন্তর্ভুক্ত করা (কোনও পূর্বনির্ধারিত শিরোনাম বিকল্প নেই) হতাশার একটি উল্লেখযোগ্য অতিরিক্ত কারণ হতে পারে। অতিরিক্তভাবে সংকলকটি ডিস্কে নিজেই কিছু তথ্য রাখার / বেছে নিতে পারে, সম্ভবত স্বয়ংক্রিয়ভাবে অদলবদল ফাইলের সুবিধা ছাড়াই।
এই পরিবেশগত কারণগুলি যে অভ্যাসগুলি চলমান উন্নয়ন অনুশীলনগুলিতে পরিচালিত করেছিল এবং সময়ের সাথে ধীরে ধীরে মানিয়েছে।
একক ফাইল ব্যবহার করা থেকে প্রাপ্ত উপায়ে এইচডিডি এর পরিবর্তে এসএসডি ব্যবহার করে আমরা পেয়ে যাব।