একটি বৃহত কোড বেস (সংকলন) এর সমস্যাটি কীভাবে মোকাবেলা করতে হবে?


10

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

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

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

সংকলিত ভাষায় রচিত একটি প্রকল্পের সাহায্যে এখন আমি কীভাবে এটি করতে পারি? আমি কয়েকটি ওপেন-সোর্স প্রকল্পগুলিতে অবদান রাখতে চাই এবং এই প্রশ্নটি আমাকে তীব্র করে তুলছে। প্রকল্প সম্ভবত প্রকল্পের থেকে পরিস্থিতি পৃথক হয় যেখানে তাদের কিছু যারা আগে থেকে বুদ্ধিমানের সাথে বিবেচিত হয়েছিল তারা কোনওভাবে "মডুলার" হবে যখন অন্যরা কেবল একটি বড় ব্লব হবে যা পুনরায় পুনরায় সংশোধন করা দরকার needs

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

ধন্যবাদ।


4
Ob। Xkcd এবং প্রাসঙ্গিক thinkgeek টি-শার্ট * 8 ')
মার্ক বুথ

1
যদি আপনি একটি বিশাল পর্যাপ্ত বাজেটের সাথে একটি বৃহত পর্যায়ে প্রকল্পে কাজ করেন তবে আপনি আপনার জন্য এই
সংকলনটি

@ চাদ - আমি এটি জানি, তবে এই মুহূর্তে এটি কেবল আমার বাড়ির জিএনএন / লিনাক্স ডেস্কটপ মেশিন এবং আমি :)
pootzko

@ চ্যাড ওকে, তাই আপনি আমাদের বলছেন জাভা (বা অন্য কোনও সংকলিত ভাষা) বাল্ক মোকাবেলা করার জন্য আমাদের ডেডিকেটেড সার্ভারগুলি দরকার ? এটি মোট ছাঁটাই
কলব ক্যানিয়ন

1
@ কলবক্যানিয়ন - না আমি বলছি এমন একটি স্কেল রয়েছে যা আপনি কাজ করতে পারেন যেগুলি তাদের প্রয়োজন হবে। এবং এগুলি এখন যথেষ্ট সস্তা যে পরীক্ষাগুলির দ্রুত সংকলন এবং অটোমেশনকে উত্সর্গীকৃত অন অন ডিমান্ড ভিএম করা এতটাই সহজ যে স্কেলটি এত বড় নয়।
SoylentGray

উত্তর:


8

ঠিক যেমন বলা হয়েছে, প্রতিবার আপনি যখন একটি ছোট পরিবর্তন করেন তখন আপনি কখনই পুরো প্রকল্পটি পুনরায় সংকলন করেন না। পরিবর্তে আপনি কেবল কোডটির যে অংশটি পরিবর্তিত হয়েছে সেই অংশটি, পাশাপাশি এর উপর নির্ভর করে সমস্ত কোডটি পুনরায় সংকলন করুন।

সি / সি ++ তে, সংকলনটি বেশ সোজা is আপনি কম্পাইল মেশিন কোড প্রতিটি সোর্স ফাইল অনুবাদ করুন (আমরা কল তাদের ফাইল * ণ অবজেক্ট) এবং তারপর আপনি সংযোগ আছে এক বিশাল এক্সিকিউটেবল মধ্যে আপনার সমস্ত বস্তুর ফাইল।

মাইনমা ​​যেমন উল্লেখ করেছেন, কিছু লাইব্রেরি পৃথক ফাইলগুলিতে তৈরি করা হয়েছে, যা সঞ্চালনের সময় সঞ্চালনের সময় গতিশীলভাবে যুক্ত হবে। এই লাইব্রেরিগুলিকে ইউনিক্সে ভাগ করা অবজেক্টস (* .so) এবং উইন্ডোজে ডায়নামিকালি লিঙ্কড লাইব্রেরি (ডিএলএল) বলা হয়। ডায়নামিক লাইব্রেরিগুলির অনেক সুবিধা রয়েছে, যার মধ্যে একটি হ'ল তাদের সংকলন / লিঙ্ক করার দরকার নেই, যদি না তাদের উত্স কোড কার্যকরভাবে পরিবর্তন হয়।

বিল্ড অটোমেশন সরঞ্জাম রয়েছে যা আপনাকে সহায়তা করে:

  • আপনার উত্স গাছের বিভিন্ন অংশের মধ্যে নির্ভরতা নির্দিষ্ট করুন।
  • সময়ানুষ্ঠান, বিচক্ষণ সংকলন কেবলমাত্র সেই অংশে চালু করা হয়েছে যা পরিবর্তিত হয়েছিল in

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

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


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

@ কেভিঙ্কলাইন আমি এটি দ্বিতীয় - এএনটি সমস্ত কিছু সংকলন করে আপনি যদি build.xmlফাইলটিতে আলাদা কিছু উল্লেখ না করেন
কলব ক্যানিয়ন

7

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

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



5

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

এই টুকরাগুলি পৃথকভাবে অবজেক্ট তৈরি করতে সংকলিত । চূড়ান্ত পণ্য গঠনের জন্য অবজেক্টগুলি একসাথে যুক্ত হয়। [একটি উপায়ে, এটি লেগোসের বাইরে সাজানোর মতো জিনিস। আপনি একটি বড় প্লাস্টিকের টুকরোটি থেকে চূড়ান্ত জিনিসটিকে ছাঁচানোর চেষ্টা করবেন না, পরিবর্তে আপনি এটি তৈরি করার জন্য একগুচ্ছ ছোট ছোট টুকরো একত্রিত করবেন]]

প্রকল্পটি পৃথকভাবে সংকলিত টুকরো টুকরো টুকরো করে কিছু ঝরঝরে জিনিস ঘটতে দেয়।

বর্ধিত বিল্ডিং

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

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

অংশ পরিক্ষাকরণ

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

টেস্ট প্রয়োগের সীমাবদ্ধ ক্ষেত্রে টেস্ট ড্রাইভেন ডেভলপমেন্ট (টিডিডি) দেখা যায়। এই বিকাশের মডেলটিতে, কোনও ব্যর্থ পরীক্ষা ঠিক না করা পর্যন্ত কোনও কোড লিখিত / সংশোধিত হয় না।

এটিকে আরও সহজ করে তোলা

সুতরাং জিনিসগুলি ভেঙে ফেলা ভাল বলে মনে হচ্ছে, তবে এটির মতো মনে হচ্ছে প্রকল্পটি তৈরির জন্য অনেক কাজ করা দরকার: আপনার কী টুকরোগুলি পরিবর্তিত হয়েছে এবং সেই টুকরাগুলির উপর কি নির্ভর করে, প্রতিটি টুকরোটি সংকলন করুন এবং তারপরে সমস্ত কিছু একসাথে লিঙ্ক করুন।

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

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

* প্রকৃতপক্ষে প্রোগ্রামাররা আসলেই অলস নয়, তারা সমস্যাগুলির সাথে কাজ করতে তাদের সময় ব্যয় করতে পছন্দ করে, পুনরাবৃত্তিমূলক কাজগুলি না করে যা কোনও প্রোগ্রাম দ্বারা স্বয়ংক্রিয় করা যায়।


5

এখানে আমার স্টাফগুলির তালিকা যা আপনি সি / সি ++ বিল্ডগুলি গতি বাড়ানোর চেষ্টা করতে পারেন:

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

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

আর একটি সস্তা সমাধান একটি tmpfs মধ্যে সংকলন হয়। সংকলন প্রক্রিয়া IO- সীমাবদ্ধ থাকলে পারফরম্যান্স ব্যাপকভাবে বৃদ্ধি করতে পারে।
আর্টফ্যাক্ট 2

4

"যদি এটি কাজ করে" এবং "এটি কীভাবে কাজ করে / অনুভব করে" চেষ্টা করে দেখার জন্য প্রতিটি ছোটখাট পরিবর্তনের পরে বারবার ডব্লিউপি এর মতো বড় কিছু পুনরায় সংকলন করার ধারণাটি কেবল অদক্ষ, ধীর এবং ভুল বলে মনে হয়।

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

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


1
আমি বিশ্বাস করি যে আমার প্রশ্নটির অর্থ বনাম বনাম সংকলন পদ্ধতির বিতর্ককে বোঝানো হয়নি। পরিবর্তে আমি কেবলমাত্র একটি বৃহত (সংকলিত) প্রকল্পের বিকাশ কীভাবে সঠিকভাবে করা হয় তার জন্য পরামর্শ চেয়েছিলাম। যদিও বর্ধিত পুনর্গঠন ধারণা জন্য ধন্যবাদ।
pootzko

@ পুটজকো: ঠিক আছে, আপনি যখন ব্যাখ্যা করার ডাউনসাইড সম্পর্কেও কথা বলছেন না তখন সংকলনের ডাউনসাইডগুলি নিয়ে আলোচনা করা বেশ অন্যায়।
ডেড এমএমজি

1
না এইটা না. এটি অন্য বিতর্ক এবং আমার প্রশ্নের সাথে কোন সম্পর্ক নেই। আমি বলছি না এটি এমন কিছু যা নিয়ে আলোচনা করা উচিত নয়। এটা করা উচিত, কিন্তু এখানে না।
pootzko

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

আমি জানতাম না যে আমাকে "জিজ্ঞাসা করা" কীভাবে আমার প্রশ্ন জিজ্ঞাসা করতে হবে ..? : ওআই আমার দৃষ্টিভঙ্গিকে আরও ভালভাবে ব্যাখ্যা করার জন্য এটি লিখেছিল যাতে অন্যেরা এটি আরও ভালভাবে বুঝতে পারে এবং সংকলিত ভাষার সাথে একই / অনুরূপ জিনিস কীভাবে অর্জন করতে হয় তা আমাকে ব্যাখ্যা করতে পারে। আমি আবার - করিনি - কাউকে জিজ্ঞাসা করতে বলুন যদি ব্যাখ্যা করা ভাষাগুলি ব্যবহারকারীর পিসিতে খারাপ সময়ের প্রয়োজনীয়তা সৃষ্টি করে। আমি এটি জানি, এবং আমার প্রশ্নের সাথে এর কোনও যোগসূত্র নেই - "সংকলিত ভাষাগুলির সাথে এটি কীভাবে করা হয়", দুঃখিত। অন্যান্য লোকেরা আমার কাছে যা চেয়েছিল তা আবিষ্কার করেছে বলে মনে হয়, তাই আমার প্রশ্নটি যথেষ্ট পরিষ্কার হয় না বলে মনে করি ..
pootzko

4
  • আংশিক পুনর্নির্মাণ

যদি প্রকল্পটি সঠিক সংকলন নির্ভরতা ডিএজি প্রয়োগ করে তবে আপনি কেবলমাত্র তার পরিবর্তনের দ্বারা প্রভাবিত অবজেক্ট ফাইলগুলির সংশোধন করেই পালাতে পারবেন।

  • একাধিক সংকলন প্রক্রিয়া

যথাযথ সংকলন নির্ভরতা ডিএজি অনুমান করে, আপনি একাধিক প্রক্রিয়া ব্যবহার করে সংকলন করতে পারেন। কোর / সিপিইউয়ের জন্য একটি কাজ আদর্শ।

  • নির্বাহযোগ্য পরীক্ষা

আপনি পরীক্ষার জন্য একাধিক এক্সিকিউটেবল তৈরি করতে পারেন যা কেবলমাত্র নির্দিষ্ট অবজেক্ট ফাইলগুলিকেই লিঙ্ক করে।


2

মেইনএমএর উত্তর ছাড়াও, আমরা যে মেশিনগুলিতে কাজ করি তার সবেমাত্র আপগ্রেড করেছি। আমরা যে সেরা ক্রয় করেছিলাম তা হ'ল এসএসডি যখন আপনি সহায়তা করতে না পারেন তবে পুরো প্রকল্পটি পুনরায় কম্পাইল করতে পারেন।

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

আমাদের 37,000 ফাইল প্রকল্পটি এই পরিবর্তনগুলি করার আগে স্ক্র্যাচ থেকে সংকলন করতে প্রায় 15 মিনিট সময় নিয়েছিল। পরিবর্তনগুলি পরে এটি কেটে রাখা হয়েছিল 2-3 মিনিট।

অবশ্যই, এটি আবার ময়নামার বক্তব্য উল্লেখ করার মতো। প্রতিবার আপনি পরিবর্তন দেখতে চাইলে পুরো প্রকল্পটি পুনরায় সংকলন করবেন না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.