कोणीय कंपाइलर "संकलन" क्या करता है?


88

मुझसे आज पूछा गया कि मैं उचित उत्तर नहीं दे पा रहा था।

जेएसपी के लिए टाइपस्क्रिप्ट ट्रांसक्रिप्ट। फिर पेड़ हिल रहा है, "कम" (वैकल्पिक) और तैनाती बनाने की प्रक्रिया में और क्या है। लेकिन इस तरह (afaik) का "संकलन" से कोई लेना देना नहीं है। सब कुछ बंडल हो जाता है और भारी रूप से अनुकूलित होता है, लेकिन यह वास्तव में संकलित नहीं है, है ना?

यहां तक ​​कि एक "समय से आगे" -कंपलर है, जो वास्तव में एक ध्यान देने योग्य काम करता है। मुझे क्या याद आती है?

जावास्क्रिप्ट ही अभी भी व्याख्या की है, है ना?


6
मैं "वास्तव में संकलन नहीं" से सहमत हूं। अनिवार्य रूप से, यह संकलन की परिभाषा का विषय है । कुछ लोग टाइपस्क्रिप्ट से जावास्क्रिप्ट में परिवर्तन को चिह्नित करने के लिए ट्रांसप्लिकेशन शब्द का उपयोग करना पसंद करते हैं । लेकिन हाँ, संक्षेप में, टाइपस्क्रिप्ट कंपाइलर की भूमिका केवल टाइपस्क्रिप्ट से जावास्क्रिप्ट उत्पन्न करने के लिए है।
Pac0

6
@ Pac0 मुझे यहाँ कुछ गलतफहमी हो सकती है, लेकिन अगर टाइपस्क्रिप्ट जावास्क्रिप्ट के लिए ट्रांसप्लिकेशन है, तो क्या GCC मशीन कोड ट्रांसपिलर के लिए C नहीं होगा? आप ट्रांसपिलर और कंपाइलर के बीच अंतर को कैसे परिभाषित करेंगे?
11684

24
ट्रांसपिलर कंपाइलर हैं
user253751

5
देखें कि "ट्रांसपिलर" कहने पर लोगों का क्या मतलब है? (और फॉलोअप "मेरा पहला पंद्रह कंपाइलर" ) (किसी से जो कंपाइलर पर काम करता है), जो तर्क देता है कि "कंपाइलर" इस ​​तरह की चीजों के लिए उपयोग करने के लिए एक अच्छा शब्द है।
श्रीवत्सआर

2
जावास्क्रिप्ट ही अभी भी ठीक नहीं है? - और नहीं, यह V8 इंजन द्वारा मक्खी पर मशीन कोड में संकलित किया गया है
मैक्स कोरसेटस्की

जवाबों:


91

आप संकलित करने का अर्थ है कि स्रोत कोड लेना और मशीन कोड, निम्न-स्तरीय कोड आदि का उत्पादन करना, लेकिन वास्तव में संकलन का अर्थ केवल एक स्रोत कोड लेना और इसे दूसरे में बदलना है। इसलिए यह कहना उचित होगा कि टाइपस्क्रिप्ट और जावास्क्रिप्ट का निर्माण करना संकलन का एक रूप है। यह (उदाहरण के लिए) c # करता है जब इसका IL भाषा में संकलित किया जाता है, तो यह असहमति नहीं है।

उस ने कहा, मैं इसके लिए एक बेहतर शब्द कहूँगा Transpiling । मेरा सुझाव था कि टाइपप्रति संकलक है बेहतर एक Transpiler के रूप में वर्णित।

अंतर सूक्ष्म है और एक ट्रांसपिलर को एक प्रकार के कंपाइलर के रूप में सोचा जा सकता है; लेकिन (शुद्ध) संकलित भाषा (आमतौर पर) उच्च स्तरीय भाषा को निम्न (ए.आर.) स्तर की भाषा (मशीन कोड के करीब) में बदल देती है, जैसे C # उदाहरण। एक ट्रांसपिलर एक उच्च-स्तरीय भाषा को समान स्तर (अमूर्त) भाषा (उच्च स्तर) में भी बदल देता है। *

संकलित कोड का परिणाम आम तौर पर एक भाषा नहीं है जिसे आप खुद लिखेंगे । एक ट्रांसपिलर का परिणाम एक और उच्च स्तरीय भाषा है। सिद्धांत रूप में, आप IL (उदाहरण के रूप में) लिख सकते हैं, लेकिन यह वास्तव में एक कंपाइलर द्वारा निर्मित किया गया है और ऐसा करने के लिए कोई उपकरण या समर्थन नहीं है, आप C # / vb.net को संकलित करके IL का उत्पादन करते हैं। जबकि जावास्क्रिप्ट अपने आप में एक प्रयोग करने योग्य (और प्रयुक्त) प्रोग्रामिंग भाषा है।

* इन शब्दों की परिभाषा और उनके उपयोग के रूप में बहुत सारे चेतावनी बहुत अस्पष्ट हैं


12
क्या टाइपस्क्रिप्ट से जावास्क्रिप्ट कड़ाई से निचले स्तर पर नहीं है?
बर्गी

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

3
एक अन्य प्रोग्राम को उत्पन्न करने के लिए एक कंपाइलर को अनिवार्य रूप से पूरे कार्यक्रम को समझने की आवश्यकता होती है (जो आमतौर पर एक ही काम करता है, लेकिन किसी अन्य भाषा में - इसमें नंबर कोड शामिल है)।
Thorbjørn रावन एंडरसन

8
मैंने सिर्फ दो बार पढ़ा और यहां प्रश्न का उत्तर नहीं मिला। इसका उत्तर नीचे दिया गया है।
कुंसविक.देव ०१

5
ओपी जो पूछ रहा था, वह निहित प्रश्न है, यही कारण है कि उन्होंने यह स्वीकार किया, "क्या एंगुलर कंपाइलर को संकलक कहना सही है?" - और यही बात जवाब देती है। तो + क मुझसे। यह भी देखें कि "ट्रांसपिलर" कहने पर लोगों का क्या मतलब है? और फॉलोअप "मेरा पहला पंद्रह संकलन"
श्रीवत्सआर

70

आप एक में तीन सवाल पूछ रहे हैं:

  • कंपाइलर और ट्रांसपिलर में क्या अंतर है?
  • क्या कोणीय और टाइपस्क्रिप्ट कंपाइलर या ट्रांसपॉयलर लागू करते हैं?
  • क्या एक अलग कोणीय संकलक है? यह क्या संकलन करता है?

कंपाइलर और ट्रांसपिलर में क्या अंतर है?

@ JörgWMittag ने इस सवाल का बहुत अच्छा जवाब दिया।

क्या कोणीय और टाइपस्क्रिप्ट कंपाइलर या ट्रांसपॉयलर लागू करते हैं?

टीएस और एंगुलर दोनों वास्तविक संकलक को लागू करते हैं । वे लेक्सिकल विश्लेषण, पार्सिंग, सिमेंटिक विश्लेषण और कोड जनरेशन के समान चरणों का पालन करते हैं जैसे कि C / C ++ कंपाइलर जो असेंबली कोड का उत्पादन करते हैं (शायद अनुकूलन के लिए छोड़कर)। आप देख सकते हैं कि कक्षा / फ़ोल्डर को कोणीय और टीएस दोनों में "संकलक" नाम दिया गया है ।

कोणीय कंपाइलर वास्तव में टाइपस्क्रिप्ट कंपाइलर से संबंधित नहीं है। ये बहुत अलग कंपाइलर हैं।

क्या एक अलग कोणीय संकलक है? यह क्या संकलन करता है?

कोणीय के दो संकलक हैं:

  • संकलक देखें
  • मॉड्यूल संकलक

व्यू कंपाइलर का काम घटक टेम्पलेट के लिए आपके द्वारा निर्दिष्ट टेम्प्लेट को एक घटक के आंतरिक प्रतिनिधित्व में बदलना है जो कि एक दृश्य कारखाना है जो तब दृश्य आवृत्ति को इंस्टेंट करने के लिए उपयोग किया जाता है ।

टेम्प्लेट को बदलने के अलावा, व्यू कंपाइलर विभिन्न मेटाडेटा जानकारी को सज्जाकार के रूप में भी संकलित करता है @HostBinding, @ViewChildआदि।

मान लीजिए कि आप एक घटक और उसके टेम्पलेट को इस तरह परिभाषित करते हैं:

@Component({
  selector: 'a-comp',
  template: '<span>A Component</span>'
})
class AComponent {}

इस डेटा का उपयोग कर कंपाइलर निम्नलिखित थोड़ा सरल घटक कारखाना उत्पन्न करता है:

function View_AComponent {
  return jit_viewDef1(0,[
      elementDef2(0,null,null,1,'span',...),
      jit_textDef3(null,['My name is ',...])
    ]

यह एक घटक दृश्य की संरचना का वर्णन करता है और इसका उपयोग घटक को तत्काल करते समय किया जाता है। पहला नोड एलिमेंट डेफिनिशन है और दूसरा टेक्स्ट डेफिनिशन है। आप देख सकते हैं कि प्रत्येक नोड को पैरामीटर सूची के माध्यम से तत्काल जानकारी प्राप्त करने की आवश्यकता होती है। यह सभी आवश्यक निर्भरता को हल करने और रनटाइम पर प्रदान करने के लिए एक संकलक का काम है।

मैं दृढ़ता से इन लेखों को पढ़ने की सलाह देता हूं:

इसके अलावा, कोणीय एओटी और जेआईटी संकलक के बीच अंतर क्या है , इसका उत्तर देखें

मॉड्यूल कंपाइलर का काम एक मॉड्यूल फैक्ट्री बनाना है जिसमें मूल रूप से प्रदाताओं की विलय की गई परिभाषाएं शामिल हैं।

अधिक जानकारी के लिए पढ़ें:



1
@codepleb ध्यान दें कि GCC और कई अन्य कंपाइलर मशीन कोड का उत्पादन बिल्कुल नहीं करते हैं। व्यवहार में, जीसीसी स्वचालित रूप से मशीन कोड का उत्पादन करने के लिए सिस्टम को कॉल करता है, लेकिन बाहरी मदद के बिना जो कोड उत्पन्न होता है वह केवल असेंबली है, जिसे बाद में एक बाहरी कोडांतरक को सौंप दिया जाता है।
prosfilaes

7
@codepleb यह उत्तर कहीं बेहतर है और वास्तव में आपके प्रश्न का उत्तर देता है। अपने मूल निर्णय पर पुनर्विचार करने के लिए अभी भी समय है।
async

3
@codepleb शब्द "ट्रांसपिलर" के अस्तित्व या कभी अस्तित्व में होने का कोई अच्छा कारण नहीं है, यह सब गलत है।
लेउशेंको

2
@stom, क्षमा करें, यह प्रश्न बहुत व्यापक है। सबसे उत्कीर्ण उत्तर हालांकि बहुत अच्छा है
मैक्स कोरसेटस्की

54

टाइपस्क्रिप्ट जेएस में ट्रांसपायर करता है। फिर पेड़ हिल रहा है, "कम" (वैकल्पिक) और एक तैनाती करने की प्रक्रिया में और क्या है। लेकिन इस तरह (afaik) का "संकलन" से कोई लेना देना नहीं है। सब कुछ बंडल हो जाता है और भारी रूप से अनुकूलित होता है, लेकिन यह वास्तव में संकलित नहीं है, है ना?

संकलन एक भाषा में लिखा एक कार्यक्रम बदलने का मतलब है एक एक शब्दार्थ बराबर भाषा में लिखे गए इस कार्यक्रम में बी ऐसी है कि भाषा के नियमों के अनुसार संकलित कार्यक्रम के मूल्यांकन के बी (उदाहरण के लिए के लिए एक अनुवादक के साथ उसकी व्याख्या बी ) एक ही परिणाम पैदावार और है मूल भाषा के नियमों के अनुसार कार्यक्रम के मूल्यांकन के रूप में एक ही साइड इफेक्ट एक (के लिए एक अनुवादक के साथ उसकी व्याख्या उदाहरण के लिए एक )।

संकलन का सीधा मतलब है कि भाषा A से भाषा B तक के कार्यक्रम का अनुवाद करना । यह सब इसका मतलब है। (यह भी ध्यान दें कि और बी एक ही भाषा होना पूरी तरह से संभव है ।)

कुछ मामलों में, हमारे पास कुछ विशेष प्रकार के संकलक के लिए अधिक विशिष्ट नाम हैं, जो इस बात पर निर्भर करता है कि A और B क्या हैं, और संकलक क्या करता है:

  • यदि A को विधानसभा भाषा माना जाता है और B को मशीन भाषा माना जाता है, तो हम इसे एक असेंबलर कहते हैं ,
  • यदि A को मशीन भाषा माना जाता है और B को असेंबली भाषा माना जाता है, तो हम इसे एक डिस्सेम्बलर कहते हैं ,
  • यदि A को B की तुलना में निम्न-स्तर का माना जाता है , तो हम इसे एक अपघटनकर्ता कहते हैं ,
  • यदि A और B एक ही भाषा हैं, और परिणामी कार्यक्रम किसी तरह से तेज या हल्का है, तो हम इसे एक अनुकूलक कहते हैं ,
  • यदि A और B एक ही भाषा हैं, और परिणामी कार्यक्रम छोटा है, तो हम इसे मिनिफ़ायर कहते हैं ,
  • यदि A और B एक ही भाषा हैं, और परिणामी कार्यक्रम कम पठनीय है, तो हम इसे एक ऑब्सफ्यूज़र कहते हैं ,
  • यदि और बी को लगभग एक ही स्तर पर अमूर्त माना जाता है, तो हम इसे ट्रांसपिलर कहते हैं , और
  • यदि और बी को लगभग एक समान स्तर पर माना जाता है और इसके परिणामस्वरूप प्रोग्राम स्वरूपण, टिप्पणियों और प्रोग्रामर के इरादे को बरकरार रखता है, तो यह संभव है कि परिणामी कार्यक्रम को मूल कार्यक्रम के समान ही बनाए रखना संभव हो, तो हम कॉल करते हैं यह एक फिर से इंजीनियरिंग उपकरण है

यह भी ध्यान दें कि पुराने स्रोत "संकलन" और "संकलक" के बजाय "अनुवाद" और "अनुवादक" शब्दों का उपयोग कर सकते हैं। उदाहरण के लिए, C "अनुवाद इकाइयों" के बारे में बात करता है।

आप "भाषा प्रोसेसर" शब्द के दौरान भी ठोकर खा सकते हैं। इसका अर्थ परिभाषा के आधार पर एक संकलक, एक दुभाषिया, या संकलक और व्याख्याकार दोनों हो सकता है।

जावास्क्रिप्ट ही अभी भी व्याख्या की है, है ना?

जावास्क्रिप्ट एक भाषा है। भाषाएँ तार्किक नियमों और प्रतिबंधों का एक समूह हैं। भाषाओं की व्याख्या या संकलन नहीं किया जाता है। भाषाएं बस हैं

संकलन और व्याख्या एक संकलक या दुभाषिया (डुह!) के लक्षण हैं। हर भाषा को एक संकलक के साथ लागू किया जा सकता है और हर भाषा को दुभाषिए के साथ लागू किया जा सकता है। कई भाषाओं में संकलक और व्याख्याकार दोनों होते हैं। कई आधुनिक उच्च-निष्पादन निष्पादन इंजनों में कम से कम एक संकलक और कम से कम एक दुभाषिया होता है।

ये दो शब्द अमूर्तता की विभिन्न परतों पर हैं। यदि अंग्रेजी टाइप की गई भाषा होती, तो "व्याख्या-भाषा" एक प्रकार की त्रुटि होती।

यह भी ध्यान दें कि कुछ भाषाओं में न तो कोई दुभाषिया होता है और न ही संकलक। ऐसी भाषाएं हैं जिनका कोई कार्यान्वयन नहीं है। फिर भी, वे भाषाएं हैं, और आप उनमें कार्यक्रम लिख सकते हैं। आप उन्हें नहीं चला सकते।

यह भी ध्यान दें कि सब कुछ किसी बिंदु पर व्याख्या किया गया है : यदि आप किसी चीज को निष्पादित करना चाहते हैं, तो आपको इसकी व्याख्या करनी चाहिए । संकलन सिर्फ एक भाषा से दूसरी भाषा में कोड का अनुवाद करता है। यह इसे नहीं चलाता है। व्याख्या इसे चलाता है। (कभी-कभी, जब एक दुभाषिया हार्डवेयर में लागू होता है, तो हम इसे "सीपीयू" कहते हैं, लेकिन यह अभी भी एक दुभाषिया है।)

बिंदु में मामला: वर्तमान में हर एक मौजूदा मुख्यधारा जावास्क्रिप्ट कार्यान्वयन एक संकलक है।

V8 को एक शुद्ध संकलक के रूप में शुरू किया गया: इसने जावास्क्रिप्ट को सीधे अनुकूलित देशी मशीन कोड के लिए संकलित किया। बाद में, एक दूसरा संकलक जोड़ा गया था। अब, दो संकलक हैं: एक हल्का संकलक जो मध्यम रूप से अनुकूलित कोड का उत्पादन करता है लेकिन संकलक स्वयं बहुत तेज़ है और कम रैम का उपयोग करता है। यह संकलक प्रोफाइलिंग कोड को संकलित कोड में भी इंजेक्ट करता है। दूसरा संकलक एक अधिक भारी, धीमा, अधिक महंगा संकलक है, जो, हालांकि, अधिक तंग, बहुत तेज कोड का उत्पादन करता है। यह डायनामिक अनुकूलन निर्णय लेने के लिए पहले संकलक द्वारा इंजेक्ट किए गए प्रोफाइलिंग कोड के परिणामों का भी उपयोग करता है। साथ ही, दूसरे संकलक का उपयोग करके पुन: संकलन करने के लिए कौन सा कोड तय किया गया है, यह उस रूपरेखा जानकारी के आधार पर किया जाता है। ध्यान दें कि किसी भी समय एक दुभाषिया शामिल नहीं है। V8 कभी व्याख्या नहीं करता है, यह हमेशा संकलन करता है। यह नहीं है' टी में एक दुभाषिया भी होता है। (वास्तव में, मेरा मानना ​​है कि आजकल यह होता है, मैं पहले दो पुनरावृत्तियों का वर्णन कर रहा हूं।)

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

लगभग सभी जावास्क्रिप्ट निष्पादन इंजन (V8 के अपवाद के साथ) एओटी कंपाइलर के इस मॉडल का पालन करते हैं जो जावास्क्रिप्ट को बायटेकोड के लिए संकलित करता है, और एक मिश्रित-मोड इंजन जो उस बायटेकोड की व्याख्या और संकलन के बीच स्विच करता है।

आपने एक टिप्पणी में लिखा है:

मैं वास्तव में सोच रहा था कि मशीन कोड कहीं न कहीं शामिल है।

"मशीन कोड" का क्या अर्थ है?

एक आदमी की मशीन की भाषा दूसरी आदमी की मध्यवर्ती भाषा है और इसके विपरीत? उदाहरण के लिए, सीपीयू जो मूल रूप JVM बाईटकोड निष्पादित कर सकते हैं इस तरह के एक CPU पर, कर रहे हैं, JVM बाईटकोड है देशी मशीन कोड। और x86 मशीन कोड के लिए दुभाषिये होते हैं, जब आप उन x86 मशीन कोड को चलाते हैं तो बायटेकोड की व्याख्या की जाती है।

जावा में लिखा हुआ एक जे 86 इंटरप्रिटर है जिसे जेपीसी लिखा जाता है। अगर मैं एक देशी JVM CPU पर चलने वाले JPC पर x86 मशीन कोड चलाऊं ... जो कि बाईटकोड है और जो देशी कोड है? यदि मैं x86 मशीन कोड को जावास्क्रिप्ट में संकलित करता हूं (हां, ऐसे उपकरण हैं जो ऐसा कर सकते हैं) और इसे अपने फोन पर एक ब्राउज़र में चलाएं (जिसमें एआरएम सीपीयू है), जो कि बाईटकोड है और जो मूल मशीन कोड है? क्या होगा यदि मैं जो कार्यक्रम संकलित कर रहा हूं वह एक स्पार्क एमुलेटर है, और मैं इसका उपयोग स्पार्क कोड चलाने के लिए करता हूं?

ध्यान दें कि हर भाषा एक अमूर्त मशीन को प्रेरित करती है, और उस मशीन के लिए मशीन भाषा है। तो, हर भाषा (बहुत उच्च-स्तरीय भाषाओं सहित) देशी मशीन कोड है। इसके अलावा, आप हर भाषा के लिए एक दुभाषिया लिख ​​सकते हैं। तो, हर भाषा (x86 मशीन कोड सहित) मूल नहीं है।


4
संकलन की अवधारणा की गहन व्याख्या के लिए +1, और यदि मैं कर सकता हूं, तो उन बुलेट बिंदुओं के लिए एक और +1। बहुत मददगार।
पेड्रो ए

1
हालांकि, मुझे कहना होगा, तकनीकी रूप से यह शीर्षक में सवाल का जवाब नहीं देता है ... फिर भी मुझसे एक योग्य 1 है, हालांकि!
पेड्रो ए

मैं मानता हूं कि यह निहित है, लेकिन शीर्षक में सवाल का जवाब "सब कुछ ओपी सूचियों का संकलन नहीं है जो कोणीय संकलन है"।
जॉर्ग डब्ल्यू मित्तग

वास्तव में यह बहुत अच्छा विवरण है कि यह वास्तव में मूल अंतर के बजाय सम्मेलनों के नामकरण के बारे में है। शायद माइक्रोकोड का उल्लेख करके सुधार किया जा सकता है - यह इंगित करने के लिए कि मशीन कोड के स्तर पर भी, आप 'धातु पर' नहीं हैं ...
आकाशमूर्ति

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

18

किसी ब्राउज़र पर चलाने के लिए आपके द्वारा लिखे गए कोड को प्राप्त करना दो चीजों को शामिल करता है:

1) जावास्क्रिप्ट में टाइपस्क्रिप्ट ट्रांसप्लान करना । यह एक सुलझी हुई समस्या है। मुझे लगता है कि वे सिर्फ वेबपैक का उपयोग करते हैं।

2) जावास्क्रिप्ट में कोणीय सार संकलन । मेरा मतलब है कि एक घटक, पाइप, निर्देश, टेम्पलेट आदि जैसी चीजें हैं। यह कोणीय कोर टीम पर काम करती है।

यदि आप वास्तव में उस दूसरे बिट में रुचि रखते हैं, तो कोणीय कंपाइलर, वॉच कंपाइलर लेखक टोबियास बॉश, कोणीयकॉलर 2016 को कोणीय कंपाइलर की व्याख्या करते हैं

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


1

कोणीय संकलक

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

मान लें कि हम परिनियोजन के लिए एक एप्लिकेशन बनाना चाहते हैं और निम्नलिखित कमांड को चलाना चाहते हैं:

ng build --prod

कुछ चीजें होती हैं: उत्पादन संस्करण, न्यूनतमकरण, बंडल्स एसेट्स, फ़ाइल नाम हैशिंग, ट्री शेकिंग, एओटी ... (हम झंडे, पूर्व aot = false का उपयोग करके इसे सक्षम / अक्षम कर सकते हैं)। संक्षेप में, prod ध्वज का उपयोग कर AOT संकलन करके आवेदन की एक अनुकूलित बंडल बनाता NGC अनुकूलित कोड ब्राउज़र के लिए तैयार (बनाने के लिए (कोणीय संकलक) हाँ, यह पहले से संकलित टेम्पलेट्स )।

टाइपस्क्रिप्ट कंपाइलर

टाइपप्रति संकलक, tsc , टाइपप्रति फ़ाइलें संकलन के लिए जिम्मेदार है। यह संकलक है जो टाइपस्क्रिप्ट विशेषताओं को लागू करने के लिए जिम्मेदार है, जैसे कि स्थिर प्रकार, और परिणाम शुद्ध जावास्क्रिप्ट है जिसमें से टाइपस्क्रिप्ट कीवर्ड और अभिव्यक्तियों को हटा दिया गया है।

टाइपस्क्रिप्ट कंपाइलर में दो मुख्य विशेषताएं हैं: यह एक ट्रांसपिलर और एक प्रकार का चेकर है। कंपाइलर टाइपस्क्रिप्ट को जावास्क्रिप्ट में ट्रांसक्रिप्ट करता है। यह आपके स्रोत कोड पर निम्नलिखित परिवर्तन करता है:

  • सभी प्रकार के एनोटेशन निकालें।
  • जावास्क्रिप्ट के पुराने संस्करणों के लिए नई जावास्क्रिप्ट संकलित करें।
  • संकलित टाइपस्क्रिप्ट विशेषताएँ जो मानक जावास्क्रिप्ट नहीं हैं।

इसे लागू करते हुए, संकलक tsconfig.json में लोड किए गए कॉन्फ़िगरेशन की खोज करता है (सभी संकलक विकल्पों की एक विस्तृत सूची, डिफ़ॉल्ट मानों के साथ, यहां पाया जा सकता है )।

ज्यादातर मामलों में, टाइपस्क्रिप्ट कंपाइलर किसी कंपाइलर की तरह काम करता है। लेकिन एक अंतर है जो अनैच्छिक को पकड़ सकता है: डिफ़ॉल्ट रूप से, कंपाइलर जावास्क्रिप्ट कोड का उत्सर्जन करना जारी रखता है जब भी यह एक त्रुटि का सामना करता है। सौभाग्य से, noEmitOnErrortsconfig.json फ़ाइल में कॉन्फ़िगरेशन सेटिंग को सही पर सेट करके इस व्यवहार को अक्षम किया जा सकता है ।

नोट करने के लिए : tsc और ngc के अलग-अलग उद्देश्य होते हैं और यह एक के ऊपर एक का चयन करने के बारे में नहीं है। यह उत्तर रूचि का हो सकता है

यह उत्तर निम्नलिखित पुस्तकों की सामग्री के आधार पर तैयार किया गया था

  • क्लो, एम। (2018)। "कोणीय 5 परियोजनाएं: 70+ परियोजनाओं का उपयोग करके एकल पृष्ठ वेब अनुप्रयोग बनाना सीखें"।

  • डेवी, बी।, ग्रॉनिकल्कॉस, के।, जपिकसे, पी। (2017)। "विज़ुअल स्टूडियो 2017 के साथ बिल्डिंग वेब एप्लिकेशन: .NET कोर और आधुनिक जावास्क्रिप्ट फ्रेमवर्क का उपयोग करना"।

  • फ्रीमैन, ए। (2019)। "आवश्यक टाइपस्क्रिप्ट: शुरुआत से प्रो तक"।

  • घिया, पी। (2018)। "टाइपस्क्रिप्ट माइक्रोसर्विस"।

  • इस्कंदर, ए।, चिवुकुलु, एस (2019)। "वेब डेवलपमेंट विथ एंगुलर एंड बूटस्ट्रैप - थर्ड एडिशन"।

  • हेनेसी, के।, अरोड़ा, सी। (2018)। "उदाहरण के द्वारा कोणीय 6"।

  • जानसेन, आर।, वुल्फ, आई।, वेन, वी। (2016)। "टाइपस्क्रिप्ट: आधुनिक जावास्क्रिप्ट विकास"।

  • मोहम्मद, जेड (2019)। "कोणीय परियोजनाएं"।

  • शेषाद्रि, एस। (2018)। "कोणीय: ऊपर और चल रहा है"।

  • विल्केन, जे। (2018)। "एंगुलर इन एक्शन"।

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