वास्तव में एक संकलन लक्ष्य क्या है?


17

मैं शब्द सुनता रहता हूं और सभी Google खोजें मुझे कंपाइलरों के लेखों तक ले जाती हैं। मैं सिर्फ यह समझना चाहता हूं कि संकलित लक्ष्य का क्या अर्थ है: |

अद्यतन: कुछ संदर्भ देने के लिए: मैंने सुना है कि वेब असेंबली अन्य भाषाओं जैसे C, C ++, Rust आदि के लिए एक संकलन लक्ष्य है।


मैं आपको संकलक के लेख पढ़ने की सलाह दूंगा।

4
संकलक के लेख मान लेते हैं कि आप यह पहले से ही जानते हैं। यह एक उचित सवाल है।
कार्ल बेज़ेलफेल्ट

मैं विकिपीडिया-शैली के लेखों के बारे में अधिक सोच रहा था। और मैं सवाल का वाजिब मानता हूं। यह सिर्फ एक सुझाव था, आलोचना नहीं।

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

@DocBrown मैंने इसे कई संदर्भों में सुना है, लेकिन हाल ही में वेब असेंबली के संदर्भ में अन्य भाषाओं के लिए एक संकलन लक्ष्य है।
ScionOfBytes

जवाबों:


17

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

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

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

एक संकलक के लक्ष्य को वास्तुकला के समान होने की आवश्यकता नहीं है जहां वह चलता है, और उदाहरणों में जहां ऐसा होता है, कार्यक्रम को क्रॉस-कंपाइलर कहा जाता है । (उदाहरण के लिए, GCC को ARM असेंबली में C को संकलित करने के लिए x86 सिस्टम पर चलाने के लिए बनाया जा सकता है।)

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


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

2
संकलक अनुवादक हैं, फ़िल्टर नहीं।

1
@Birfl। जाहिर है। "tr" का अर्थ अनुवाद है, फ़िल्टर नहीं। फ़िल्टर अनुवादक नहीं हैं, यह केवल स्पष्ट है।

2
@ बियर: मैं विकिपीडिया से नहीं जाता। सिर्फ एक धारा दूसरे ssys से कुछ भी नहीं उत्पादन। फिल्टर और अनुवादकों के बीच अंतर बहुत अच्छी तरह से जाना जाता है। एक फ़िल्टर में एक विधेय पर आधारित / शामिल नहीं है। यह रूपांतरित नहीं होता है। पूर्णांकों की सूची भी फ़िल्टर करें? और आप बिना पूर्णांक के भी अनियंत्रित हो जाते हैं। inc का उपयोग करके समान सूची का अनुवाद करें और आपको मूल सूची का रूपांतरित संस्करण मिलता है।

1
संकलन का आपका खाता "फ़िल्टर" शब्द को छोड़कर ठीक है।

4

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

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


0

WebAssemby कुछ नवीनतम और महानतम है, जो बाइनरी प्रारूप में c / c ++ कोड को परिवर्तित करता है।

  • WebAssembly का लक्ष्य आम हार्डवेयर का लाभ उठाकर देशी गति से निष्पादित करना है। इसे वेब प्लेटफ़ॉर्म के साथ एकीकृत करने के लिए डिज़ाइन किया गया है।

यहां वह लिंक है जहां आप जिस एप्लिकेशन को देख सकते हैं, वह मशीन कोड में सरल फैक्टरियल प्रोग्राम को कितनी तेजी से परिवर्तित करता है।

इस जानवर की जाँच करें, https://godbolt.org/

असेंबली देखने के लिए आप उस साइट पर चलने के लिए इस नमूना कार्यक्रम का उपयोग कर सकते हैं।

# include<stdio.h>

int square(int num) {
    return num * num;
}

int main() {
    int res = square(4);
    printf("%d\n",res);
  return 0;
}
  • संकलन लक्ष्य के रूप में काम करने के लिए एक पोर्टेबल, आकार और लोड-टाइम-कुशल बाइनरी प्रारूप को परिभाषित करें, जिसे मोबाइल और IoT सहित प्लेटफार्मों की एक विस्तृत श्रृंखला पर उपलब्ध सामान्य हार्डवेयर क्षमताओं का लाभ उठाकर देशी गति से निष्पादित करने के लिए संकलित किया जा सकता है।

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

host=>pc :(windows, iOS, Linux, zOS, Solaris..etc)
target=>CPUhardware: (Intel x86, ARM, PowerPC, etc)
  1. GCC C / C ++ कोड को असेंबली कोड में परिवर्तित करता है। "कोडांतरक" नामक एक उपकरण असेंबली कोड को मशीन कोड में परिवर्तित करता है और "लिंकर" नामक एक टूल कई मशीन-कोड फ़ाइलों को एक एकल निष्पादन योग्य (.EXE अंडर विंडोज) फ़ाइल में जोड़ता है। इनमें से अधिकांश संकलक आपको परिणामी कोडांतरक कोड को एक फ़ाइल में लिखने की अनुमति देते हैं ताकि आप कोडांतरक कोड को देख सकें या इसे संशोधित कर सकें।

  2. कोडांतरक और लिंकर उपकरण श्रृंखला का हिस्सा हैं जिसका अर्थ है कि वे आम तौर पर कंपाइलर के साथ वितरित किए जाते हैं।

  3. कुछ संकलक (जैसे Microsoft) हालाँकि C / C ++ कोड को सीधे मशीन की भाषा में बदलते हैं, इसलिए किसी भी कोडांतरक की आवश्यकता नहीं है। इनमें से कई कंपाइलर असेंबलर कोड बनाने में सक्षम नहीं हैं, इसलिए आप असेंबलर कोड को फाइल में नहीं लिख सकते।

वैसे: यहां तक ​​कि संकलक भी हैं (सी / सी ++ के लिए नहीं, लेकिन अन्य प्रोग्रामिंग भाषाओं के लिए) जो सीधे एक .EXE फ़ाइल बनाते हैं, ताकि कोई लिंकर की आवश्यकता न हो।

WebAssembly: https://github.com/WebAssembly/design

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