क्या Google बंद करना एक सच्चा संकलक है?


19

यह सवाल इस ढेर अतिप्रवाह सवाल पर टिप्पणियों में बहस से प्रेरित है । गूगल बंद संकलक प्रलेखन राज्यों निम्नलिखित (जोर जोड़ा):

क्लोजर कंपाइलर जावास्क्रिप्ट डाउनलोड और तेजी से चलाने के लिए एक उपकरण है। यह जावास्क्रिप्ट के लिए एक सच्चा संकलक है। एक स्रोत भाषा से मशीन कोड के संकलन के बजाय, यह जावास्क्रिप्ट से बेहतर जावास्क्रिप्ट को संकलित करता है।

हालाँकि, विकिपीडिया "कंपाइलर" की निम्नलिखित परिभाषा देता है:

एक कंपाइलर एक कंप्यूटर प्रोग्राम (या कार्यक्रमों का सेट) है जो एक प्रोग्रामिंग भाषा (स्रोत भाषा) में लिखे गए स्रोत कोड को दूसरी कंप्यूटर भाषा में बदल देता है ... एक भाषा राइटर आमतौर पर एक प्रोग्राम होता है जो बिना किसी बदलाव के अभिव्यक्ति के रूप का अनुवाद करता है। भाषा: हिन्दी।

उसके आधार पर, मैं कहूंगा कि Google बंद करना एक संकलक नहीं है। लेकिन तथ्य यह है कि Google स्पष्ट रूप से बताता है कि यह वास्तव में "सच्चा संकलक" है मुझे आश्चर्य होता है कि क्या इसमें और भी कुछ है। क्या गूगल क्लोजर वास्तव में एक जावास्क्रिप्ट कंपाइलर है?


2
मैं शर्त लगाता हूं कि जेएस आउटपुट सभी कानूनी जेएस का उचित उपसमूह है; इस अर्थ में, इसके उत्पादन भाषा है "एक और" भाषा।
आकाशवाणी

जवाबों:


23

क्लोजर कंपाइलर एक मिनिफ़ायर , एक अनुकूलक और एक सत्यापनकर्ता ऑल-इन-वन है। उस तरह की यह अपनी श्रेणी में रखता है, क्योंकि आप सही हैं कि एक कंपाइलर को कम से कम कुछ ऐसा लेना चाहिए जो अपने वर्तमान रूप में नहीं चलेगा और इसे कुछ ऐसे में बदल देगा जो ( ईसीएमएस्क्रिप्ट -आधारित उदाहरण के लिए टाइपस्क्रिप्ट ले )।

लेकिन क्या आप Google को शब्दावली के विस्तार के लिए दोषी मानते हैं? वे और क्या कहते थे? Google Minifier नहीं, यह इससे कहीं अधिक है, और वहां सैकड़ों लोग हैं। Google ऑप्टिमाइज़र? यह इससे कहीं अधिक है। Google Validator? नहीं, यह इससे कहीं अधिक है।

तो पसंद है

  • इसे Google क्लोजर फ़ॉगल कहिए और लेक्सिकॉन में एक बिल्कुल नया अन्यथा अर्थहीन शब्द पेश कीजिए।
  • इसे Google क्लोजर मिनोपाइलाइडिएटर कहें, जो इरादे में स्पष्ट है लेकिन याद रखना कठिन है।
  • इसे Google क्लोजर कंपाइलर कहें, जो सत्य के काफी करीब है।

यह वह सब कुछ करता है जिसकी आप संकलक से अपेक्षा करते हैं, केवल एक अर्थगत अंतर के साथ। और, अंत में, सभी शब्दों को उनके उपयोग द्वारा, कुछ हद तक परिभाषित किया गया है। इसलिए यदि Google लोगों को इस संकलक को कॉल करने के लिए मना सकता है, तो संकलक की परिभाषा थोड़ी बदल जाती है। निश्चित रूप से किसी भी तरह से नहीं जो समस्या पैदा करेगा।

या, पहले के उदाहरण पर वापस आने के लिए, क्या आप टाइपस्क्रिप्ट के बारे में कुछ भी महत्वपूर्ण पा सकते हैं जो इसे "सही कंपाइलर" कहलाता है, जबकि Google क्लोजर कंपाइलर को "लगभग एक कंपाइलर" तक सीमित रखा जाना चाहिए?


सवाल का मुद्दा सिर्फ यह देखना था कि लोग "कंपाइलर" के रूप में क्या देखते हैं। जैसा कि 0A0D द्वारा कहा गया है कि यह सिर्फ शब्दार्थ है, लेकिन मैंने अभी खुद को आश्चर्यचकित पाया कि Google को यह स्पष्ट करने की आवश्यकता क्यों महसूस हुई कि यह एक "वास्तविक संकलक" था। "Minoptivalidator" के लिए +1!
जेम्स एलाडाइस

@JamesAllardice: फिर से, क्योंकि अगर आप लोगों को समझा सकते हैं कि यह एक संकलक है तो संकलक की परिभाषा इसे शामिल करने के लिए फैलती है। और यह केवल वास्तव में उचित है कि इसे इस मामले में होना चाहिए। यदि आप एक नए शब्द को परिभाषित करते हैं, जो इसे संकलक से अर्धचालक रेखा से अलग करता है, तो आपके उत्पाद को "लगभग, लेकिन काफी" के रूप में वर्गीकृत किया जाता है।
PDR

1
मुझे नहीं पता, मैं "Google Foogle" को पसंद कर रहा हूँ :-)
GrandmasterB

9
मैं वोट देता हूं Minoptival। यह एक डायनासोर की तरह लगता है। हर कोई डायनासोर पसंद करता है, है ना?
इजाकाटा

2
@ इज़काटा: अगर विकास के इतिहास में एक चीज हमें सिखाई गई है, तो यह है कि जावास्क्रिप्ट शामिल नहीं होगा। जावास्क्रिप्ट मुफ्त में टूट जाता है, यह नए क्षेत्रों में फैलता है, और बाधाओं को दर्दनाक रूप से दुर्घटनाग्रस्त करता है, शायद खतरनाक रूप से भी।
पीडीआर

9

उसके आधार पर, मैं कहूंगा कि Google बंद करना एक संकलक नहीं है।

खैर हां ... लेकिन यह मान लिया कि विकिपीडिया इस बिंदु पर आधिकारिक है।

और विकिपीडिया परिभाषा के एक काउंटर के रूप में, कुछ शब्दकोश परिभाषाओं पर विचार करें ( http://www.thefreedEDIA.com/compiler से ):

2) (कंप्यूटर साइंस) - एक प्रोग्राम जो एक उच्च स्तरीय भाषा में लिखे गए दूसरे प्रोग्राम को मशीन भाषा में अनुवाद करता है ताकि इसे निष्पादित किया जा सके।

2) (इलेक्ट्रॉनिक्स एंड कंप्यूटर साइंस / कंप्यूटर साइंस) एक कंप्यूटर प्रोग्राम है जिसके द्वारा एक उच्च स्तरीय प्रोग्रामिंग भाषा, जैसे कि COBOL या FORTRAN, को मशीन भाषा में परिवर्तित किया जाता है, जिस पर कंप्यूटर द्वारा कार्य किया जा सकता है।

कुछ प्रोग्रामिंग भाषाओं से जुड़ा एक कंप्यूटर प्रोग्राम जो उन भाषाओं में लिखे निर्देशों को मशीन कोड में परिवर्तित करता है जिन्हें बाद में सीधे कंप्यूटर द्वारा निष्पादित किया जा सकता है।

दी गई ये परिभाषाएँ सभी कुछ पुराने जमाने की हैं, लेकिन यह इस बात को स्पष्ट करती हैं कि कोई "एक सही अर्थ" नहीं है ... और वास्तव में "संकलक" जैसे शब्दों के अर्थ समय के साथ बदलते हैं। (और, IMO जो अभी ठीक है, क्योंकि हमें वास्तव में इस मामले के लिए एक सटीक परिभाषा की आवश्यकता नहीं है।)

बहस करना कि क्लोजर कंपाइलर एक "असली कंपाइलर" है या नहीं (IMO) एक फलदायी गतिविधि नहीं है। यह समझना अधिक उपयोगी होगा कि Google के लोग "वास्तविक संकलक" से क्या मतलब रखते हैं ... उस संदर्भ में।


2
+1, विडंबना यह है कि, JS वेब के लिए 'मशीन भाषा' और 'उच्च स्तरीय प्रोग्रामिंग भाषा' दोनों है।
K.Steff

3
+1, और प्लस 'मान लिया गया है कि विकिपीडिया इस बिंदु पर आधिकारिक है'। बहुत से लोग आँख बंद करके स्वीकार करते हैं कि जो कुछ भी वहाँ लिखा जाना है।
मार्जन वेनमा

6

मुझे लगता है कि इसका कारण "वास्तविक संकलक" कहा जा सकता है क्योंकि यह आपके कार्यक्रमों से पूर्ण एएसटी (अमूर्त अर्थ पेड़) बनाता है, और इसका उपयोग एक नया पाठ उत्पन्न करने के लिए करता है।

तथ्य यह है कि मूल और परिणामी दोनों पाठ मान्य हैं जावास्क्रिप्ट केवल एक संयोग है।

यह महत्वपूर्ण है क्योंकि ऐसे कई उपकरण हैं जो केवल कोड (मिनिफ़ायर, प्रेटिफ़ायर, आदि) के पाठ जोड़तोड़ करते हैं, लेकिन कोई एएसटी हैंडलिंग, बहुत कम कोड री-जेनरेशन नहीं करता है। यहां तक ​​कि अगर वे उपकरण अधिक से अधिक शक्तिशाली हैं, तो वे एक ही तरह के सॉफ्टवेयर नहीं हैं, और सीमाएं अलग हैं।


1
धन्यवाद, यह एक दिलचस्प जवाब है। मुझे लगता है कि आपकी व्याख्या विकिपीडिया की तुलना में "संकलक" की बेहतर परिभाषा और उन विभिन्न शब्दकोशों की पेशकश कर सकती है जो दूसरों ने उद्धृत किए हैं।
जेम्स एलाडाइस

ठीक है, मुझे यह उत्तर पसंद है और किसी बिंदु पर इसके लिए मतदान किया है, लेकिन मैं ध्यान दूंगा कि एएसटी के निर्माण के बिना (पारंपरिक उच्च-स्तरीय-भाषा-से-मशीन भाषा-ज्ञान) संकलन करना पूरी तरह से संभव है। उदाहरण के लिए, एक कंपाइलर बनाएँ देखें । अब यह निश्चित रूप से सच है कि क्रैंशव के ट्यूटोरियल से कंपाइलर बहुत क्रूड है, लेकिन मुझे विश्वास नहीं है कि कोई भी कंपाइलर नहीं होने का आरोप लगा रहा था।
dmckee

मैंने वह संदर्भ नहीं पढ़ा है, लेकिन मैं इस बात से सहमत हूँ कि संकलन के लिए एक स्पष्ट एएसटी कड़ाई से आवश्यक नहीं है। फिर भी, ज्यादातर मामलों में एक समान संरचना होती है, या तो डेटा में स्पष्ट होती है, या निष्पादन में निहित होती है (शायद कॉल स्टैक (या समय में इसका विकास) वाक्यविन्यास विश्लेषण को दर्शाता है)। मेरा मुख्य बिंदु यह है कि संकलन पाठ हेरफेर नहीं है, लेकिन कुछ स्रोत कोड के विश्लेषण से कोड जनरेट कर रहा है।
जेवियर

4

यह मेरी राय में शब्दार्थ है। पारंपरिक अर्थों में, यह एक संकलक नहीं है। हालांकि, उसी विकिपीडिया लिंक में, यह कहता है

एक संकलक कई या सभी निम्नलिखित कार्यों को करने की संभावना रखता है: शाब्दिक विश्लेषण, प्रीप्रोसेसिंग, पार्सिंग, सिमेंटिक विश्लेषण (सिंटैक्स-निर्देशित अनुवाद), कोड जनरेशन और कोड ऑप्टिमाइज़ेशन।

क्लोजर कुछ या उन सभी ऑपरेशनों को करता है।

विकिपीडिया लेख में थोड़ा आगे

हालांकि, व्यवहार में एक भाषा के बारे में शायद ही कुछ होता है, जिसके लिए इसे विशेष रूप से संकलित करने या विशेष रूप से व्याख्या करने की आवश्यकता होती है, हालांकि यह उन भाषाओं को डिजाइन करना संभव है जो रन समय पर फिर से व्याख्या पर भरोसा करते हैं।

यह कहा जा रहा है, मेरा अनुमान है कि "क्लोजर ऑप्टिमाइज़र" के बजाय इसे " क्लोजर कंपाइलर " कहना आसान था, क्योंकि वास्तव में यह केवल ब्राउज़रों के लिए जावास्क्रिप्ट का अनुकूलन है, आवश्यक नहीं कि इसे किसी अन्य भाषा या बायटेकोड में अनुवाद किया जाए।

संज्ञा के रूप में क्लोजर कम्पाइलर एक गैर-अनुक्रमिक है


यह सिर्फ शब्दार्थ है, तुम सही हो। प्रश्न का मुद्दा वास्तव में यह देखना था कि लोग "कंपाइलर" को किस रूप में देखते हैं। मुझे अभी भी नहीं लगता कि क्लोजर कंपाइलर एक "सही कंपाइलर" है, लेकिन यह कई समान कार्य करता है।
जेम्स एलाडाइस

3

सबसे पहले, इसे स्रोत-से-स्रोत संकलक के मौजूद होने के तरीके से बाहर निकलने देता है। आप यह नहीं कह सकते कि कुछ संकलक नहीं है क्योंकि अंतिम परिणाम निचले स्तर का कोड नहीं है।

हालांकि यह सही है कि क्लोजर कंपाइलर एएसटी उत्पन्न करता है और कोड जनरेशन वाक्यांश होता है, वहां से बाहर कई जावास्क्रिप्ट न्यूनतम पहले से ही ऐसा करता है और मैं शायद उन्हें कंपाइलर न कहूंगा।

क्या वास्तव में क्लोजर कंपाइलर सेट करता है यह त्रुटि का पता लगाने और अनुकूलन में कई प्रसिद्ध संकलक तकनीकों का अनुप्रयोग है। यहाँ कुछ उदाहरण हैं:

प्रकार प्रणाली:

क्लोजर कम्पाइलर एक एनोटेट प्रकार प्रणाली को परिभाषित करता है। यह प्रकार की आविष्कार तकनीकों का उपयोग करता है जो त्रुटियों के लिए आपके प्रोग्राम की जांच करने के लिए कई कंपाइलर का उपयोग करता है।

अंतरप्रांतीय अनुकूलन

क्लोजर कंपाइलर पूरे प्रोग्राम स्तर में डेड कोड का नाम बदलने और हटाने के लिए कॉल ग्राफ़ बनाता है।

इंट्राप्रोडेक्टल ऑप्टिमाइज़ेशन

क्लोजर कंपाइलर जावास्क्रिप्ट को अलग-अलग कंट्रोल फ्लो एनालिसिस के साथ-साथ डेटा फ्लो एनालिसिस से ऑप्टिमाइज़ करता है। क्लासिक कंपाइलर तकनीक जैसे: इनलाइनिंग, रजिस्टर अलोकेशन, लाइव वैरिएबल एनालिसिस .. और बहुत से सभी को आउटपुट जावास्क्रिप्ट से अंतिम बाइट को निचोड़ने के लिए उपयोग किया जाता है।

मॉड्यूल प्रणाली

क्लोजर कम्पाइलर का एक कम ज्ञात हिस्सा जिसका उपयोग आपके कोड को तेजी से स्टार्ट-अप समय के लिए अलग डाउनलोड में विभाजित करने के लिए किया जा सकता है। यह कई ग्राफ एल्गोरिदम का भी उपयोग करता है। "पारंपरिक" संकलक में भी कुछ सामान्य है।

ये सभी कंपाइलर और स्टैटिक एनालिसिस तकनीक वही है जो क्लोजर कंपाइलर को अन्य जावास्क्रिप्ट मिनिमाइज़र से अलग करता है। इस तथ्य से दूर कि लक्षित इनपुट और आउटपुट भाषा एक ही है, मैं यह नहीं देखता कि इसे "सच्चे संकलक" के रूप में वर्गीकृत क्यों नहीं किया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.