দীর্ঘ কি অতীতের একটি বিষয় সংকলন করা হয়?


38

একটি সংকলন কত সময় নিতে পারে সে সম্পর্কে অসংখ্য যুদ্ধের গল্প রয়েছে। এমনকি এক্সকেসিডি এটির একটি উল্লেখ করেছে।

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

আমি কি দীর্ঘ সংকলনের সময়যুক্ত প্রকল্পগুলিতে সবেমাত্র উন্মুক্ত হইনি? এটি কি অতীতের একটি প্রতীক যা আধুনিক যুগে ঘটে যাওয়া কিছু নয়? একটি সংকলন কেন এত দীর্ঘ সময় নিবে?


31
ক্রোমিয়াম সংকলনের চেষ্টা করুন।
UldisK

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

সাম্প্রতিক একটি বৃহত প্রকল্প আমাকে সংকলন করতে 40 মিনিট সময় নিয়েছে (40,000 উত্স কোড ফাইলগুলি মাভেনের সাথে সংকলন করে)। অনেকগুলি সিপিইউ কোরে সংকলনটিকে প্যারালাইজাইজ করতে কাজ করা হয়েছে।
নিক্লাস রোসক্র্যান্টজ

2
একটি উত্স লিনাক্স বিতরণ বাছাই করুন (ভদ্রলোক, এলএফএস, ...) তারপরে আপনি ইনস্টল করা প্রতিটি সফ্টওয়্যার সংকলন করে দিন ব্যয় করুন।
বেসিল স্টারিনকিভিচ

6
দীর্ঘ সংজ্ঞায়িত করুন ... স্কুল থেকে সতেজ হওয়া কিছু বাচ্চাকে দীর্ঘ এক মিনিট মনে হতে পারে, কয়েক দশক ধরে খাঁচায় থাকা এক প্রবীণকে কয়েক ঘন্টা ভ্রু বাড়াবেন না।
30-15

উত্তর:


48

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

  • স্পষ্টতই বড় কোডের আকার। বড় প্রকল্পগুলিতে কয়েক লক্ষ লাইনের কোড থাকবে।

  • সি এর #includeপ্রিপ্রোসেসর নির্দেশিকা, যা কার্যকরভাবে একই কোডকে কয়েকবার সংকলিত করে। ম্যাক্রো সিস্টেমটিতে একই রকম সমস্যা রয়েছে, কারণ এটি একটি পাঠ্য স্তরের কাজ করে। প্রিপ্রসেসর প্রকৃতপক্ষে কোড আকারটি ফুটিয়ে তোলে যা প্রকৃতপক্ষে সংকলককে দিয়ে গেছে। প্রিপ্রোসেসিংয়ের পরে কোনও ফাইলের দিকে তাকানো (যেমন: মাধ্যমে gcc -E) আপনার চোখ খোলা উচিত।

  • সি ++ এর টেমপ্লেটগুলি টিউরিং সম্পূর্ণ, যার অর্থ হ'ল তাত্ত্বিকভাবে আপনি সংকলন সময়ে স্বেচ্ছামূলক গণনা সম্পাদন করতে পারেন। কেউ সত্যিই এটি করতে চায় না, তবে এমনকি প্রচুর সরল কেসগুলি টেমপ্লেটগুলি বিশেষায়িত করার জন্য বেশ কিছুটা সময় ব্যয় করে।

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

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


14
প্রকৃতপক্ষে, স্কালার টাইপ সিস্টেম টিউরিং-সম্পূর্ণ, তাই টাইপ-চেকিং অসীম পরিমাণ সময় নিতে পারে এবং এটি নির্ধারণ করা সংকলকের পক্ষে অসম্ভব।
Jörg ডব্লু মিটাগ

7
অপটিমাইজেশন ভুলবেন না। একটি (উদাঃ) সি / সি ++ সংকলক যেগুলি অনেক অপ্টিমাইজেশন করবে তা অত্যন্ত ব্যয়বহুল (যেমন এত ব্যয়বহুল যে জেআইটি সেগুলি মোটেও বহন করতে পারে না)। সবচেয়ে খারাপ ক্ষেত্রে বেশিরভাগ সরঞ্জাম-চেইন এখন পুরো প্রোগ্রামের অপটিমাইজেশনকে সমর্থন করে, যা বিল্ডের সময়কে উল্লেখযোগ্যভাবে বাড়ানোর জন্য পরিচিত।
ব্রেন্ডন

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

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

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

17

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

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


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

10

বড় প্রকল্পগুলি দীর্ঘ সময় নিতে পারে। এটি একটি বড় যথেষ্ট প্রকল্পের জন্য এক ঘন্টা বা তার বেশি হতে পারে। আমার কম্পিউটারে উত্স থেকে সংকলন করতে হয়েছে এমন বেশ কয়েকটি গ্রন্থাগার রয়েছে যা খুব দীর্ঘ সময় নেয় - যেমন ওপেনক্যাসকেড। লিনাক্স কার্নেল নিজে থেকেই বেশ দীর্ঘ সময় নেয় যদি আপনার এটি স্ক্র্যাচ থেকে তৈরি করতে হয়।

তবে অন্যান্য সংকলনের মতো প্রক্রিয়া রয়েছে যা অনেক বেশি সময় নিতে পারে। ডিজিটাল সার্কিট ডিজাইনের (এএসআইসি বা এফপিজিএগুলির জন্য) একটি স্থান এবং রুটের পদক্ষেপের প্রয়োজন। স্থান এবং রুটের পদক্ষেপটি যেখানে পৃথক লজিক গেটস, ফ্লিপ-ফ্লপস, রেজিস্টারস, র‌্যামস এবং অন্যান্য উপাদানগুলির স্থান আন্তঃসংযোগের তারের জন্য রাউটিংয়ের সাথে নির্ধারিত হয়। সফটওয়্যারটি সম্ভাব্য প্লেসমেন্টগুলির জন্য গেট এবং রাউটিংয়ের বিলম্ব নির্ধারণের জন্য সময় মডেলগুলি ব্যবহার করে, এগুলি সময় সীমাবদ্ধতার দ্বারা প্রদত্ত সীমাগুলির সাথে তুলনা করে এবং তারপরে প্রয়োজনীয়তাগুলি পূরণ করার জন্য চেষ্টা করার জন্য প্লেসমেন্টের অবস্থান এবং তারের পথগুলিকে সামঞ্জস্য করে। কখনও কখনও সফ্টওয়্যার এমনকি সময় পূরণের জন্য গেটগুলি পুনরায় আকার দিতে এবং বাফার যুক্ত করতে হয়। এই পদক্ষেপটি অত্যন্ত গণনামূলকভাবে নিবিড় এবং এটি সম্পূর্ণ হতে অনেক ঘন্টা বা এমনকি কয়েক দিন সময় নিতে পারে। এটি আসলে খুব ভালভাবে সমান্তরাল হয় না। আমি একটি বছর বা তার আগে কাজ করছিলাম এমন একটি এফপিজিএ নকশা ছিল যা ভার্टेেক্স 6 এইচএক্সটি 565 এফপিজিএ (565 কে এলইউটির মধ্যে ~ 300k) প্রায় অর্ধেক গ্রাস করেছিল এবং জায়গা এবং রুটটি সম্পূর্ণ করতে 7 ঘন্টা সময় নিয়েছিল। কোর আই 7 সিপিইউ ডিজাইনের মতো কোনও জায়গায় জায়গা এবং রুট চালাতে কত সময় লাগবে তা আমি ভাবতে পারি না - সম্ভবত কমপক্ষে বেশ কয়েক সপ্তাহ।


4

অন্যান্য জবাব ইতিমধ্যে উল্লেখ করেছে যে হ্যাঁ, বড় প্রকল্পগুলির কোড, যেখানে বৃহত্তর অর্থ 500k লাইন থাকে এবং বিশেষত স্ক্র্যাচ থেকে বিল্ডিংয়ের সময় উল্লেখযোগ্য সময় নিতে পারে।

অতিরিক্ত বিষয় হ'ল কয়েকটি প্রকল্প একাধিক লক্ষ্য পরিবেশের জন্য তৈরি করতে হবে। যখন এই পরিবেশগুলিকে হোস্ট করা মেশিনগুলি উপলভ্য থাকে না তখন বিল্ডটি আপনার যে মেশিনগুলিতে থাকে তার ক্রমিক সংকলন দ্বারা সিরিয়াল করে নেওয়া আবশ্যক। এটি উল্লেখযোগ্য বিল্ডিং সময় হতে পারে । একটি প্রকল্পের জন্য আমি কাজ করেছি, রাতের বিল্ডটি 10 ​​ঘন্টা সময় নিতে পারে। আফসোস হ'ল তুমিই যে এটা ভেঙে ফেলেছ!

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


3

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

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


2

এটি প্রকল্প এবং পরিবেশের উপর নির্ভর করে যা এটি সংকলিত হয়েছে। আমি সি ++ প্রকল্পে কাজ করেছি যা সংকলন করতে বেশ কয়েক মিনিট সময় নিয়েছে (এমএসভিএসে একাধিক প্রকল্প হিসাবে সেট আপ), যা সম্ভবত তরোয়াল যুদ্ধের জন্য যথেষ্ট সময়।

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

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