अवधि बहु-पास की उत्पत्ति एक समय था जब कंप्यूटर एक बहुत कम स्मृति था से आता है। कंपाइलर्स को बहुत सारी मेमोरी चाहिए, और एक छोटी मेमोरी मशीन में, इसे प्रबंधित करना मुश्किल है।
तो मूल विचार एक संकलक एकाधिक पास में चला गया था। पहला पास स्रोत कोड पढ़ता है, और सिंटैक्स जांच जैसे मूल कार्य करता है, शायद एक प्रतीक तालिका बना सकता है, और उसके बाद दूसरे परिणाम के लिए डिस्क फ़ाइल में इसके परिणाम लिखे। प्रत्येक क्रमिक पास एन पिछले पास के परिणाम को पढ़ेगा, और कार्यक्रम के प्रतिनिधित्व को मशीन कोड की ओर आगे और आगे ले जाने के लिए बदल देगा, और पढ़ने के लिए एन + 1 पास करने के लिए इसके परिणाम लिखेंगे। अंतिम प्रक्रिया के अंतिम पास तक पहुंचने तक यह प्रक्रिया दोहराई गई। कई कंपाइलर्स कुछ ("बहु") पास प्राप्त कर सकते हैं; वास्तव में पुरानी मशीनों पर बने दर्जनों पास के साथ प्रतिष्ठित कंपाइलर थे।
(यह वही अवधारणा तथाकथित "दो पास असेंबलर" पर लागू होती है: पहला पास असेंबलर स्रोत कोड, सिंटैक्स चेक पढ़ता है, यह पता लगाता है कि लेबल प्रतीकों के लिए किस स्थान मान का उपयोग किया जाना चाहिए; दूसरा पास ऑब्जेक्ट कोड का उपयोग करके ऑब्जेक्ट कोड बनाता है पहले पास में निर्दिष्ट प्रतीक स्थान)।
मेमोरी अब बड़ा है, और यह स्मृति में हर बहुत बड़े कार्यक्रमों के लिए पढ़ने के स्रोत कोड के लिए काफी व्यावहारिक है, क्या संकलक एक ही प्रक्रिया की याद में अपना पूरा काम करता है, और ऑब्जेक्ट कोड लिखता है। आप अभी भी लिंकर्स की अवधारणा में इस के कुछ समरूप अवशेष देखते हैं; वे एक ही बाइनरी में एकाधिक ऑब्जेक्ट मॉड्यूल ("पहला पास") एक साथ चिपकते हैं।
यदि आप आंतरिक रूप से कंपाइलर देखते हैं, तो वे चरणों में काम करते हैं। विशिष्ट चरणों हो सकता है:
* Parse and syntax check
* Build symbol tables
* Perform semantic sanity check
* Determine control flow
* Determine data flow
* Generate some "intermediate" language (representing abstract instructions)
* Optimize the intermediate language
* Generate machine code from the optimized language
क्या एक विशिष्ट संकलक चरणों के लिए करता है संकलक संकलक करने से भिन्न होता है। इनमें से प्रत्येक चरण प्रोग्राम प्रस्तुतियों को अंतिम मशीन कोड के करीब धक्का देता है। एक एन-पास कंपाइलर इन चरणों में से एक या अधिक को एक ही पास में बंडल करेगा।
वर्तमान समय पर, हमारे पास बहुत सारी मेमोरी है; इंटरमीडिएट परिणामों को डिस्क फ़ाइल में लिखने के लिए आधुनिक कंपाइलर की आवश्यकता नहीं है, इसलिए ये सभी चरण एक ही प्रक्रिया की स्मृति में होते हैं। आप, कंपाइलर उपयोगकर्ता, उन्हें नहीं देखते हैं। तो आप शब्द के मूल इंद्रियों में आधुनिक कंपाइलर्स "एक पास" कह सकते हैं। चूंकि अब कोई परवाह नहीं करता है, इसलिए वाक्यांश आसानी से दुरुपयोग में गिर गया है।
किसी भी मामले में, कंपाइलर अभी भी बहु-चरण आंतरिक रूप से हैं।(ऐसे कंपाइलर्स हैं जो इन चरणों में से एक चरण में क्या करते हैं, आमतौर पर, वे बहुत अधिक ऑप्टमाइज़ेशन नहीं कर सकते हैं)।
उपरोक्त; यह मेरी समझ में, ऐतिहासिक रूप से सही उत्तर है। डाउनवोट को समझ नहीं सकता। – ibid
जैसा कि मैंने दूसरे टिप्पणी पर मेरी टिप्पणी में उल्लेख किया है, यह उत्तर ड्रैगन पुस्तक (द्वितीय संस्करण) द्वारा समर्थित है। – ibid
@ibid: हाँ, मैं पुराना स्कूल हूं। मैंने बस स्मृति से उद्धृत किया है: - { –