ट्रांसप्लिंग बनाम संकलन


96

अंतर के बारे में खोज करते हुए, मैं इन परिभाषाओं में आया:

संकलन एक भाषा में लिखे गए स्रोत कोड को लेने और दूसरे में बदलने के लिए सामान्य शब्द है।

ट्रांसप्लिंग एक भाषा में लिखे गए स्रोत कोड को लेने और दूसरी भाषा में बदलने के लिए एक विशिष्ट शब्द है जिसमें समान स्तर का अमूर्त होता है।

मैं समझता हूं कि एब्सट्रैक्शन क्या है।

लेकिन उपरोक्त परिभाषा में "समान स्तर का अमूर्त" का क्या अर्थ है? और हम किसी भाषा में अमूर्तता का स्तर कैसे पाते हैं?



क्या यह स्रोत है? stevefenton.co.uk/2012/11/compiling-vs-transpiling
wjandrea

जवाबों:


149

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

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

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

ट्रांसपैरर्स के कुछ उदाहरण:

  1. Emscripten : Transpiles C / C ++ को JavaScript
  2. बैबेल : ट्रांसपाइल्स ES6 + का कोड ES5 (ES6 और ES5 जावास्क्रिप्ट भाषा के विभिन्न संस्करण या पीढ़ी हैं)

अब, "एब्सट्रैक्शन के समान स्तर" से उनका क्या मतलब है: जैसा कि मैंने कहा कि यह स्रोत फ़ाइल को संकलित / प्रेषित करता है, कोई यह तर्क दे सकता है कि असेंबली भाषा भी एक स्रोत फ़ाइल है और इस प्रकार gcc भी एक ट्रांसपिलर है। तो, यह तर्क है कि अमूर्तता के समान स्तर क्या होता है।

भाषाओं को निचले, मध्य और उच्च स्तर में वर्गीकृत करने की धारणा अमूर्त के स्तर पर आधारित है जो वे मशीन / वास्तुकला के वास्तविक कामकाज से प्रदान करते हैं।

असेंबली जैसी निचली स्तर की भाषाएं प्रोसेसर आर्किटेक्चर के बहुत करीब हैं यानी अलग-अलग प्रोसेसर के लिए अलग-अलग निर्देश हैं। जबकि C / C ++ / Java / जावास्क्रिप्ट, सार यह सब दूर और अधिक अमूर्तता प्रदान करता है।

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

उम्मीद है की यह मदद करेगा!


12
"ट्रांसपाइलर्स के कुछ उदाहरण:" --- कोलाहल खुद को एक कंपाइलर कहता है। ट्रांसपिलर और कम्पाइलर के बीच अलगाव वास्तव में कृत्रिम है।
ज़र्क

16
@zerkms जैसा कि मैंने कहा, ट्रांसपाइलर्स कंपाइलर्स का एक सबसेट हैं।
तपनानंद

1
मैं एक बात जोड़ना चाहूंगा, हम यहां प्राकृतिक भाषा के बारे में बात कर रहे हैं। इस प्रकार फजी परिभाषाएं अपेक्षित हैं। मैं उम्मीद करता हूं कि "पढ़ने में आसानी" एक ट्रांसपिलर के आउटपुट के समान हो, जो पहले था, जबकि एक कंपाइलर चीजों को पढ़ने के लिए कठिन बनाता है। इस प्रकार Webpack / npm एक संकलक है, आप इसे आउटपुट नहीं पढ़ना चाहते हैं। (कम से कम जब आप उदाहरण के लिए "लोडर" जोड़ते हैं .vue फ़ाइलों के लिए।
शमूएल undslund

2
राय: मेरा मानना ​​है कि परिभाषाएँ होनी चाहिए: संकलन: भाषा -> निचले स्तर की भाषा। वाष्पीकरण: भाषा -> समान स्तर की भाषा।
देजी

3
@Deji जरूरी नहीं कि समान स्तर की भाषा हो, लेकिन अमूर्तता के समान स्तर पर एक भाषा।
तपनानंद

35

यहाँ जवाब देने के लिए वर्णनात्मक तरीका है

यदि आप इस उदाहरण के रूप में अमूर्त की परतों के बारे में सोचते हैं:

(1) CPU-level (actual logic gates on the CPU)
(2)machine code
(3)assembly code
(4)[C/C++, JVM/bytecode]
(5)[JavaScript, Python]

एक कंपाइलर एक निचले स्तर (कम संख्या) पर जाता है। एक ट्रांसपिलर एक भाषा (या किसी भाषा का संस्करण) से दूसरे नंबर पर स्विच करता है।


1
जिज्ञासु, कि "अमूर्त स्तरों" की सूची कहाँ से आई है?
झारक

बस यादृच्छिक उदाहरण उदाहरण, मुझे पता है कि पहले दो थोड़े भावपूर्ण tbh हैं, लेकिन मैं एक लंबी सूची चाहता था: पी
अराइमर

2
मुझे यह पसंद है और यह वास्तव में अच्छा होगा यदि यह उस तरह का कुछ "आधिकारिक" वर्गीकरण था। चूंकि इसके बिना एक टूल (एक अनुवादक) को एक या किसी अन्य श्रेणी में रखना मुश्किल है। जैसे: javacसंकलक है या नहीं।
जूल

2

मैं ज्यादातर तपनानंद के जवाब से सहमत हूं, लेकिन ...


परिभाषा

शब्द "बने" हैं, इसलिए वे एक उद्देश्य की सेवा करते हैं। और यह समय के साथ बदलता भी है।

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


उदाहरण

तो सब कुछ बहुत व्यक्तिपरक है। इस लेखन के समय:

  • जावा दुनिया से आने वाले मैं कॉफीस्क्रिप्ट / टाइपस्क्रिप्ट ट्रांसप्लर्स को यह बता सकता है कि परिणामी कोड मूल एक से अधिक कुशल नहीं है।
  • CoffeScript प्रलेखन का कहना है कि यह एक संकलक है, और बेबल एक ट्रांसपिलर है। चाहते हैं कि कॉफीस्क्रिप्ट, हालांकि बहुत समान है, जावास्क्रिप्ट नहीं है। कम से कम इसका एक संस्करण नहीं है, जैसा कि बाबेल पैदा करता है।
  • बैबल खुद को एक कंपाइलर कहता है।

fazit

इसलिए ट्रांसपाइल इस समय बहुत ही कम इस्तेमाल किया जाता है, और केवल दो कंपाइलरों को अलग बताने के लिए।

यह संभवतः अवधारणा के रूप में गायब हो जाएगा, क्योंकि संकलन इससे कहीं अधिक जटिल है (समान / उच्च / निम्न भाषा, संस्करण, आदि), और शब्द अब उपयोगी नहीं लगता है ("ट्रांसपाइलर" अब सर्वव्यापी हैं)


2

Ex: टाइपस्क्रिप्ट (प्रकार की सुरक्षित जाँच के साथ जावास्क्रिप्ट का एक Microsoft सुपरसेट) जावास्क्रिप्ट कोड को ट्रांसपाइल्स करता है जो विभिन्न प्रकार के ब्राउज़रों पर चल सकता है।

https://en.wikipedia.org/wiki/Microsoft_TypeScript "Microsoft टाइपस्क्रिप्ट Microsoft द्वारा विकसित और अनुरक्षित एक ओपन-सोर्स प्रोग्रामिंग भाषा है। यह जावास्क्रिप्ट का एक सख्त वाक्यात्मक सुपरसेट है, और भाषा में वैकल्पिक स्थिर टाइपिंग जोड़ता है।

टाइपस्क्रिप्ट को बड़े अनुप्रयोगों के विकास और जावास्क्रिप्ट के लिए डिज़ाइन किया गया है। [५] चूंकि टाइपस्क्रिप्ट जावास्क्रिप्ट का एक सुपरसेट है, इसलिए मौजूदा जावास्क्रिप्ट प्रोग्राम भी मान्य टाइपस्क्रिप्ट प्रोग्राम हैं। टाइपस्क्रिप्ट का उपयोग क्लाइंट-साइड और सर्वर-साइड (Node.js) निष्पादन दोनों के लिए जावास्क्रिप्ट अनुप्रयोगों को विकसित करने के लिए किया जा सकता है। "


"टाइपस्क्रिप्ट कंपाइलर" (या tsc) टूल है, इसका नामकरण यह बताता है कि टाइपस्क्रिप्ट को संकलित नहीं किया गया है ... फिर भी टूल टाइपस्क्रिप्ट को जावास्क्रिप्ट में कनवर्ट करता है, जो कि अंतर्निहित हार्डवेयर के समान स्तर का एब्स्ट्रैक्शन है। टाइपस्क्रिप्ट संकलित है, या ट्रांसप्लड है?
एलेक्स मैकमिलन

@AlexMcMillan टाइपस्क्रिप्ट संकलित है, क्योंकि यह जावास्क्रिप्ट का एक सुपरसेट है, और इस तरह से जावास्क्रिप्ट के लिए संकलित हो जाता है।
अरमेर

@Araymer क्या आप संकलन और वाष्पोत्सर्जन के बीच अंतर को समझते हैं? क्योंकि टीएस संकलित नहीं है; न ही जेएस है।
एलेक्स मैकमिलन

हां, है। और क्योंकि TS JS का सुपरसेट है, इसलिए इसे एब्सट्रैक्शन का उच्च स्तर माना जाता है, और इसलिए इसे "संकलित" कहा जाता है। संकलित जेएस को तब सामान्य रूप से व्याख्या किया जाता है। इसलिए यदि आप टीएस को देखते हैं, तो सबसे अधिक चर्चा का विषय इसका "संकलन" है। लेकिन, वाष्पीकरण और संकलन के बीच की रेखा की आधिकारिक मात्रात्मक परिभाषा नहीं है। यह बहुत सुंदर हो जाता है, इसलिए आपकी राय जो संकलित है (रचनाकारों से अलग, जैसा कि यह है) सिर्फ आपकी राय है।
अरैमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.