पाईक https://talks.golang.org/2012/splash.article में इसके बारे में कुछ और लिखा है:
1984 में, ps.c
का एक संकलन, यूनिक्स ps कमांड के स्रोत, #include <sys/stat.h>
37 बार करने के लिए समय सभी preprocessing था द्वारा मनाया गया किया गया। हालांकि सामग्री को 36 बार छोड़ दिया जाता है, जबकि अधिकांश सी कार्यान्वयन फ़ाइल खोलेंगे, इसे पढ़ें, और इसे सभी 37 बार स्कैन करें। महान चतुरता के बिना, वास्तव में, सी प्रीप्रोसेसर के संभावित जटिल मैक्रो अर्थशास्त्र द्वारा व्यवहार की आवश्यकता होती है।
कंपाइलर काफी चालाक हो गए हैं: https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html, इसलिए यह अब एक मुद्दा से कम है।
Google पर एक एकल सी ++ बाइनरी का निर्माण हजारों बार सैकड़ों व्यक्तिगत शीर्षलेख फ़ाइलों को खोल और पढ़ सकता है। 2007 में, Google के निर्माण इंजीनियरों ने प्रमुख Google बाइनरी के संकलन का वाद्य यंत्र किया। फ़ाइल में लगभग दो हजार फाइलें हैं, यदि बस एक साथ संयोजित, कुल 4.2 मेगाबाइट्स। उस समय # समावेशन का विस्तार किया गया था, संकलक के इनपुट में 8 गीगाबाइट वितरित किए जा रहे थे, प्रत्येक सी ++ स्रोत बाइट के लिए 2000 बाइट्स का झटका लगा।
2003 में एक और डेटा बिंदु के रूप में, Google की बिल्ड सिस्टम को एकल मेकफ़ाइल से प्रति-निर्देशिका डिज़ाइन में बेहतर-प्रबंधित, स्पष्ट निर्भरताओं के साथ स्थानांतरित किया गया था। एक सामान्य द्विआधारी फ़ाइल आकार में लगभग 40%, केवल रिकॉर्ड की गई अधिक सटीक निर्भरताओं से कम हो गई। इसके बावजूद, सी ++ (या उस मामले के लिए सी) के गुण स्वचालित रूप से उन निर्भरताओं को सत्यापित करने के लिए अव्यवहारिक बनाते हैं, और आज हमारे पास अभी भी बड़ी Google सी ++ बाइनरी की निर्भरता आवश्यकताओं की सटीक समझ नहीं है।
बाइनरी आकारों के बारे में बिंदु अभी भी प्रासंगिक है। कंपाइलर्स (लिंकर्स) अप्रयुक्त प्रतीकों को अलग करने के संबंध में काफी रूढ़िवादी हैं। How to remove unused C/C++ symbols with GCC and ld?
योजना 9 में, हेडर फाइल आगे #include
खंड युक्त करने से मना कर रहे थे; सभी #includes
को शीर्ष-स्तरीय सी फ़ाइल में होना आवश्यक था। इसके लिए कुछ अनुशासन की आवश्यकता थी, निश्चित रूप से प्रोग्रामर सही क्रम में आवश्यक निर्भरताओं को सूचीबद्ध करने के लिए आवश्यक था-लेकिन दस्तावेज़ीकरण में मदद मिली और प्रैक्टिस में यह बहुत अच्छी तरह से काम करता था।
यह एक संभावित समाधान है।एक और संभावना है कि एक उपकरण है जो आपके लिए शामिल करता है, उदाहरण के लिए MakeDeps।
एकता निर्माण भी होता है, जिसे कभी-कभी एससीयू कहा जाता है, एकल संकलन इकाई बनाता है। इसे प्रबंधित करने में सहायता के लिए उपकरण हैं, जैसे https://github.com/sakra/cotire
वृद्धिशील संकलन की गति के लिए अनुकूलित करने वाली एक बिल्ड सिस्टम का उपयोग करना भी फायदेमंद हो सकता है। मैं Google के बैज़ल और इसी तरह के बारे में बात कर रहा हूं। यह आपको हेडर फ़ाइल में बदलाव से सुरक्षित नहीं करता है, हालांकि बड़ी संख्या में अन्य फ़ाइलों में शामिल है।
अंत में, कार्यों में सी ++ मॉड्यूल के लिए एक प्रस्ताव है, महान सामग्री https://groups.google.com/a/isocpp.org/forum/#!forum/modules। यह भी देखें What exactly are C++ modules?
मुझे यह जवाब बहुत उपयोगी लगता है। मजेदार बात यह है कि मैं एक और अधिक विडंबनात्मक तरीके से सहमत हूं: यदि कंप्यूटर मेरा काम कर सकता है, तो मैं ऐसा क्यों करूँगा? ;) –