मुझे लगता है कि इसके लिए सबसे बड़ी प्रेरणा, और सबसे बड़ा परिणाम संकलन समय में सुधार है। तकनीकी पूर्वावलोकन वीडियो ने कम समय अवधि में बड़ी मात्रा में कोड संकलित करने की उनकी क्षमता का एक प्रमुख बिंदु बनाया (उनका उदाहरण मैकबुक पर 8 सेकंड में कोड की 200,000 लाइनें थी - कोई मशीन चश्मा नहीं दिया गया था)।
तकनीकी वीडियो में, वे विशेष रूप से उल्लेख करते हैं कि मॉड्यूल को संकलित और लिंक करने के तरीके को बदलने में सबसे बड़े तरीकों में से एक था।
क्लास ए हेडर फाइल C_H में परिभाषित किया गया और C_CPP में कार्यान्वित किया जाता:
यहाँ कैसे कुछ एक मौजूदा सी में काम करेगा/C++ प्रणाली का एक उदाहरण है। कक्षा बी सी से निकला है और फ़ाइलों B_H और B_CPP में लागू किया गया है। कक्षा ए बी से निकला है और फ़ाइलों को ए_एच और ए_सीपीपी में लागू किया गया है।
व्युत्पन्न श्रृंखला के कारण, ए_सीपीपी में ए_एच, बी_एच, और सी_एच शामिल हैं। बी_सीपीपी में बी_एच और सी_एच शामिल हैं। सी_सीपीपी में सी_एच शामिल है। सी प्रीप्रोसेसर की प्रकृति के कारण, जो अनिवार्य रूप से # कट को एक कट और पेस्ट ऑपरेशन में बदल देता है, सी_एच की सामग्री कंपाइलर के माध्यम से 3 बार चलती है और बी_एच दो बार से गुजरती है।
आगे, ए_सीपीपी, बी_सीपीपी, और सी_सीपीपी की सामग्री सभी अपनी ऑब्जेक्ट फाइलों में रहते हैं। इसलिए जब लिंकर एओ को हल करने के लिए जाता है, तो इसे बीओ और सीओ दोनों को लोड और प्रोसेस करने के लिए मजबूर होना पड़ता है। साथ ही, जब यह बीओ को हल करता है, तो उसे फिर से सीओ को संसाधित करना पड़ता है।
प्रीकंपिल्ड हेडर इस समस्या के पहले भाग के साथ काफी मदद कर सकते हैं, लेकिन वे बनाए रखने के लिए शाही दर्द भी हो सकते हैं और मैं ऐसे कई डेवलपर्स को जानता हूं जो इस कारण से उनका उपयोग नहीं करते हैं। यह मूल रूप से समस्या को भी परिवर्तित नहीं करता है - हेडर अभी भी कई स्तरों पर कई बार संसाधित होते हैं, केवल अब एक प्रीकंपिल्ड बाइनरी स्रोत के बजाय संसाधित किया जाता है। कई कदम कट किए जाते हैं, लेकिन पूरी प्रक्रिया नहीं।
गो चीजों को अलग-अलग दृष्टिकोण देता है। शब्द सीधे PDF from their tech talk से बाहर में:
"जाओ संकलक वस्तु फ़ाइल से सकर्मक निर्भरता प्रकार की जानकारी खींचती है - लेकिन केवल यह क्या जरूरत है A.go B.go पर निर्भर करता है, तो सी पर निर्भर करता है। .go: - संकुचित कागो, बीगो, फिर एगो - एगो संकलित करने के लिए, कंपाइलर बो को सह स्केल को पढ़ता है, यह गतिशील हो सकता है। "
ठीक है, मामूली स्पर्श किया जाता है। यह प्रासंगिक क्यों है? उत्तर गो टेक टॉक पीडीएफ में भी है:
"पैकेज मॉडल: स्पष्ट निर्भरता तेजी से निर्माण सक्षम करने के लिए।"
मेरा अनुमान है कि कि जाओ डेवलपर्स रुख यह है कि जब संकलन बार यहां तक कि बहुत बड़ी परियोजनाओं के लिए, सेकंड में मापा जाता है, कि यह लिए डेवलपर्स के लिए अधिक उपयोगी है संकलन बार कम है कि रखने के ले लिया। मान लें कि मुझे कोड की 200,000 लाइनों को संकलित करने में 8 सेकंड लगते हैं और पता चलता है कि मुझे यह पता लगाने और इसे ठीक करने के लिए एक अतिरिक्त पैकेज आयात, 5-10 सेकेंड (एक अच्छा आईडीई, या अपने देव पर्यावरण के साथ अच्छी परिचितता) मिला है, और recompile करने के लिए एक और 8 सेकंड। इसे 30 सेकंड कुल कॉल करें - और अब मेरे सभी भविष्य संकलन 10 सेकंड रेंज में रहते हैं। या हम अनावश्यक निर्भरताओं सहित हमारे मॉड्यूल को बढ़ने दे सकते हैं, और उस संकलन समय को 8 से 10, 12, या 15 सेकंड तक रेंगते हैं। यह बहुत अधिक प्रतीत नहीं होता है क्योंकि हम सभी मिनटों के समय पर संकलन करने के लिए उपयोग किए जाते हैं - लेकिन जब आप यह महसूस करना शुरू करते हैं कि यह 25% प्रदर्शन गिरावट है, तो आप एक मिनट के लिए इसके बारे में सोचें और सोचें।
संकलन समय पहले से ही बिजली तेज हो रहे हैं। इस बात पर भी विचार करें कि प्रोसेसर की गति अभी भी बढ़ रही है (अगर अतीत में उतनी ज्यादा नहीं है) और यह कि उपलब्ध कोर की संख्या भी बढ़ रही है (और बड़ी मात्रा में कोड संकलित करना बहु-थ्रेडिंग के लिए उपयुक्त है)। 8 सेकंड में कोड की 200,000 लाइनों का मतलब आज है कि 10 साल में तत्काल तत्काल संकलन की 200,000 लाइनों की कल्पना करना अनुचित नहीं है। मुझे लगता है कि गो टीम ने अतीत की बातों को संकलित करने के लिए यहां एक सचेत निर्णय लिया है, और जब आप जिस मुद्दे को लाते हैं, वह केवल इसका एक छोटा सा हिस्सा है, तो अभी भी इसका एक हिस्सा है।
पूरी तरह से एक और नोट पर, गो टीम ने एक भाषा डिजाइन का दर्शन विकसित किया है जो कुछ अच्छे प्रोग्रामिंग प्रथाओं को मजबूर करता है।उनके क्रेडिट के लिए, उन्होंने बिना किसी गंभीर प्रदर्शन दंड के हासिल करने का प्रयास किया है, और बड़े पैमाने पर सफल हुए हैं। [इसके अलावा: केवल दो चीजें जो मैं सोच सकता हूं कि वास्तव में प्रदर्शन पर असर पड़ता है कचरा संग्रह और जबरन प्रारंभिक चर - और बाद में इस दिन और उम्र में बहुत छोटा है।] यह कुछ प्रोग्रामर को रॉयल रूप से परेशान करने जा रहा है, जबकि दूसरों को खुश । यह प्रोग्रामिंग दुनिया में एक पुराना, पुराना तर्क है, और यह बहुत स्पष्ट है कि किस तरफ गो की तरह नीचे आ गया है या नहीं।
मुझे लगता है कि दोनों सेनाओं ने एक साथ अपने फैसले को प्रभावित किया है, और मुझे लगता है कि दिन के अंत में यह जाने का एक अच्छा तरीका है, हालांकि मैं यहां अन्य टिप्पणीकारों का समर्थन करता हूं जिन्होंने "सख्त" ध्वज या कुछ को अनुमति देने का सुझाव दिया है इस विशेष व्यवहार को वैकल्पिक बनाने के लिए, खासकर एक परियोजना के जीवन चक्र के प्रारंभिक चरणों के दौरान। मैं आसानी से खुद को वैरिएबल परिभाषित कर सकता हूं या संकुल समेत देख सकता हूं जब मैं पहली बार कोड लिखना शुरू करता हूं जो मुझे पता है कि मुझे बाद में आवश्यकता होगी, भले ही मैंने अभी तक कोड नहीं लिखा है। आईडीई-आधारित डिज़ाइन के लिए
+1। मैं वही निष्कर्ष तक पहुंच गया हूं, मुख्य रूप से इस तथ्य से कि केवल ऑब्जेक्ट फ़ाइलों में हेडर जैसा कुछ भी है, और साथ ही गो में पार्सिंग गो के लिए मॉड्यूल भी शामिल हैं। सख्त मोड के लिए –