सोर्स-टू-सोर्स कंपाइलर

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

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

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

इस प्रकार उदाहरणों में गूगल क्लोजर टूल्स, कॉफीस्क्रिप्ट, डार्ट (प्रोग्रामिंग भाषा), मिला हुआ, ओपल (रूबी), टाइपप्रति और एमक्राइब सम्मलित हैं।

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

इंटेल CONV86
इंटेल ने अपने 16-बिट प्रोसेसर इंटेल 8086 को इंटेल 8080, 8-बिट प्रोसेसर के स्रोत-कोड संगतता के रूप में विपणन किया। इसका समर्थन करने के लिए, इंटेल के पास इंटेल आइसिस-II या आइसिस-II-आधारित अनुवादक 8080 से 8086 स्रोत कोड CONV86 था।  (जिसे CONV-86 भी कहा जाता है और कन्वर्ट 86  1978 से ओईएम ग्राहकों के लिए उपलब्ध है, संभवतः इस तरह का सबसे पहला फंक्शन था। इस प्रकार यह अनुवाद के कई स्तरों का समर्थन करता है और 8-इंच फ्लॉपी ड्राइव के साथ इंटेल माइक्रोप्रोसेसर डेवलपमेंट सिस्टम इंटेल एमडीएस-800 या एमडीएस-800 पर 2 मेगाहर्ट्ज पर चलता है। उपयोगकर्ता रिपोर्टों के अनुसार, यह बहुत मज़बूती से कार्य नहीं करता था।

एससीपी ट्रांस86
इस प्रकार सिएटल कंप्यूटर उत्पाद (एससीपी) ने ट्रांस86.काॅम की प्रस्तुति की,  टिम पैटर्सन द्वारा लिखित 1980 86-डाॅस विकसित करते हुए।   इस प्रकार यूटिलिटी इंटेल 8080 और जिलाॅग जेड80 असेंबली सोर्स कोड (जिलाॅग/माॅसटेक निमाॅनिक्स के साथ) में अनुवाद कर सकती है। .ASM इंटेल 8086 के लिए स्रोत कोड (सीपी/एम-80 के लिए केवल एससीपी के क्रॉस-असेंबलर एएसएम86 के साथ संगत प्रारूप में), किन्तु केवल opcode, रजिस्टर और मोड के सबसेट का समर्थन करता है, और प्रायः अभी भी महत्वपूर्ण मैन्युअल सुधार और बाद में फिर से कार्य करने की आवश्यकता होती है।  इसके अतिरिक्त, केवल लिप्यंतरण करते हुए,    ब्रूट-फोर्स सिंगल-पास कंपाइलर या सिंगल-पास ट्रांसलेटर ने कोई रजिस्टर और जंप ऑप्टिमाइज़ेशन नहीं किया।  इस प्रकार इसमें लगभग 24 किलोबाइट रैम लगी होती हैं। ट्रांस86.काॅम का एससीपी संस्करण 1 जेड80-आधारित सिस्टम पर चलता था।  एक बार जब 86-डॉस चल रहा था, पैटरसन ने स्वयं-होस्टिंग (कंपाइलर) या सेल्फ-होस्टिंग-प्रेरित दृष्टिकोण में, 86-डॉस के अनुसार चलने वाले प्रोग्राम में स्वयं को परिवर्तित करने के लिए ट्रांस86 का उपयोग किया था।  इस प्रकार इस क्रमांकित संस्करण 2 को इसके स्थान पर इसका नाम ट्रांस.काॅम रखा गया।     बाद में 1982 में, अनुवादक स्पष्ट रूप से माइक्रोसाॅफ्ट से भी उपलब्ध था।

सोरसिम ट्रांस86
इसका नाम ट्रांस86 भी रखा गया है, सोरसिम ने दिसंबर 1980 से 8080 से 8086 अनुवादकों की प्रस्तुति की गई थी। एससीपी के फंक्शन की तरह इसे एमएस-डॉस (एसीटी86 के साथ संगत प्रारूप में) में पोर्ट सीपी/एम-80 एप्लिकेशन कोड (एएसएम, मैक, आरएमएसी या एसीटी80 असेंबली प्रारूप में) के लिए डिजाइन किया गया था।    एक्ट80 प्रारूप में इसने कुछ जेड80 निमाॅनिक्स का भी समर्थन किया। इस प्रकार अनुवाद निर्देश-दर-निर्देश के आधार पर हुआ, जिसमें कुछ अनुकूलन सशर्त कूद पर लागू किए गए थे। यह प्रोग्राम सीपी/एम-80, एमपी/एम-80 और क्रोमेम्को डाॅस के अनुसार कम से कम 24 किलोबाईट रैम के साथ चलता था, और स्रोत फ़ाइल आकार पर कोई प्रतिबंध नहीं था।

डिजिटल रिसर्च एक्सएलT86
सितंबर 1981 में डिजिटल अनुसंधान का एक्सएलT86 1.0 बहुत अधिक परिष्कृत और स्रोत अनुवाद प्रक्रिया में अनुकूलतम कंपाइलर तकनीकों को प्रस्तुत करने वाला पहला था। एक्सएलT86 1.1 अप्रैल 1982 तक उपलब्ध था। इस फंक्शन को गैरी किल्डाल द्वारा लिखा गया था   और इसका अनुवादित .ASM इंटेल 8080 प्रोसेसर के लिए स्रोत कोड (एएसएम, मैक या आरमैक असेंबलरों के साथ संगत प्रारूप में) .A86 8086 के लिए स्रोत कोड (एएसएम86 के साथ संगत) था। 8080 रजिस्टर उपयोग पर वैश्विक डेटा प्रवाह विश्लेषण का उपयोग करना होता हैं,    इस प्रकार पांच-फेज बहु-पास कंपाइलर या मल्टी-पास ट्रांसलेटर कोड आकार के लिए आउटपुट को भी अनुकूलित करेगा और कॉलिंग सम्मेलनों का ध्यान रखेगा (सीपी/एम-80 Bडाॅस कॉल्स को सीपी/एम-86 के लिए बीडाॅस कॉल्स में मैप किया गया था), जिससे कि सीपी/एम-80 और एमपी/एम-80 प्रोग्राम स्वचालित रूप से सीपी/एम-86 और एमपी/एम-86 प्लेटफॉर्म पर पोर्ट किए जा सकते हैं। इस प्रकार एक्सएलT86.काॅम स्वयं सीपी/एम-80 प्लेटफॉर्म के लिए पीएल/आई-80 में लिखा गया था।    प्रोग्राम ने अपने लिए 30 किलोबाईट रैम और फंक्शन ग्राफ के लिए अतिरिक्त मेमोरी ली गई थी। इस प्रकार 64 किलोबाइट मेमोरी सिस्टम पर, समर्थित अधिकतम स्रोत फ़ाइल आकार लगभग 6 किलोबाइट था,    जिससे कि अनुवाद से पहले बड़ी फ़ाइलों को तदनुसार तोड़ना पड़े।  इस प्रकार वैकल्पिक रूप से, एक्सएलT86 डिजिटल उपकरण निगम वैक्स/वीएमएस के लिए भी उपलब्ध था।  चूंकि एक्सएलटी86 के इनपुट और आउटपुट स्रोत-कोड स्तर पर कार्य करते हैं, प्रोग्राम के अनुवादक की इन-मेमोरी प्रस्तुति और लागू कोड अनुकूलन तकनीकों ने बाइनरी पुनर्संकलन की नींव रखी।

अन्य
2500 एडी सॉफ़्टवेयर ने जेड80 के साथ सीपी/एम-80 मशीनों के साथ-साथ जिलाॅग जिउस और औलीवेट्टी पीसी ओएस सिस्टम के लिए अपने Xएएसएम सूट के भाग के रूप में 8080 से 8086 स्रोत-कोड अनुवादक की प्रस्तुति की।

1979 से, जिलाॅग ने अपने पीडीएस 8000 विकास प्रणाली के भाग के रूप में जेड80 से जेड8000 अनुवादक की प्रस्तुत की थी।     इस प्रकार उन्नत माइक्रो कंप्यूटर (एएमसी)  और 2500 एडी सॉफ़्टवेयर ने जेड80 से जेड8000 अनुवादकों को भी ऑफ़र किया। इसके बाद के संस्करण को ट्रांस नाम दिया गया था  और जेड80 सीपी/एम, सीपी/एम-86, MS-डाॅस और पीसीओएस के लिए उपलब्ध कराया गया था।

जेड88डीके विकास किट जेड80 से i486 स्रोत कोड अनुवादक प्रदान करता है, इस प्रकार जो टू86.एडब्ल्यूके नाम के नेटवाइड असेंबलर को लक्षित करता है, जिसे 2008 में स्टेफानो बोडराटो द्वारा लिखा गया था। यह बदले में डगलस बीट्टी, जूनियर द्वारा 2003 में लिखे गए 8080 से जेड80 कन्वर्टर पर आधारित है, जिसका नाम टूजेड80.एडब्ल्यूके है।

2021 में, ब्रायन कॉलहन ने MS-डाॅस सोर्स कोड ट्रांसलेटर के लिए 8080 सीपी/एम 2.2 लिखा, जिसका लक्ष्य 8088आईफी नाम का नेटवाइड असेंबलर था।

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

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

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

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

रिकर्सिव ट्रांसकंपाइलिंग
पुनरावर्ती ट्रांसकाॅमपाइलेशन (या पुनरावर्ती ट्रांसकम्पाइलिंग) पुनरावर्ती रूप से ट्रांसकम्पाइलिंग की धारणा को लागू करने की प्रक्रिया है, इस प्रकार के परिवर्तनों की पाइपलाइन बनाने के लिए (प्रायः सत्य के स्रोत से प्रारंभ) जो बार-बार तकनीक को दूसरे में परिवर्तित कर देती है।

इस प्रक्रिया को दोहराकर, कोई A → B → C → D → E → F को घुमा सकता है और फिर वापस A(v2) के अंदर किया जा सकता है। इस पाइपलाइन के माध्यम से A → से कुछ जानकारी संरक्षित की जाएगी A(v2), और वह जानकारी (एक अमूर्त स्तर पर) प्रदर्शित करती है कि प्रत्येक घटक A–F किस पर सहमत है।

इस प्रकार ट्रांसकंपलर पाइपलाइन द्वारा उत्पादित प्रत्येक भिन्न संस्करण में, वह जानकारी संरक्षित है। यह कई अलग-अलग आकार और आकार ले सकता है, किन्तु जब तक यह वापस आता है A (v2), उपरोक्त पाइपलाइन में छह बार ट्रांसकंपाइल होने के बाद, जानकारी अपनी मूल स्थिति में वापस आ जाती है।

यह जानकारी जो प्रत्येक प्रारूप के माध्यम से परिवर्तन से बचती है, से A–F–A(v2), (परिभाषा के अनुसार) व्युत्पन्न सामग्री या व्युत्पन्न कोड है।

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

यह भी देखें

 * – स्पष्ट पैटर्न-निर्देशित पुनर्लेखन नियमों का उपयोग करते हुए एक स्रोत-से-स्रोत संकलक ढांचा
 * – फोरट्रान 77 से सी तक स्रोत-से-स्रोत संकलक
 * (हनीवेल H200 पर IBM 1401 प्रोग्राम चला रहा है)
 * – एक स्रोत से स्रोत संकलक संरचना
 * – फोरट्रान 77 से सी तक स्रोत-से-स्रोत संकलक
 * (हनीवेल H200 पर IBM 1401 प्रोग्राम चला रहा है)
 * – एक स्रोत से स्रोत संकलक संरचना
 * – एक स्रोत से स्रोत संकलक संरचना
 * – एक स्रोत से स्रोत संकलक संरचना
 * – एक स्रोत से स्रोत संकलक संरचना
 * – एक स्रोत से स्रोत संकलक संरचना
 * – एक स्रोत से स्रोत संकलक संरचना
 * – एक स्रोत से स्रोत संकलक संरचना
 * – एक स्रोत से स्रोत संकलक संरचना

अग्रिम पठन

 * 1984-11-11 version 1.05 (NB. The डाॅस executable एक्सएलT86.काॅम [12 किलोबाईट] ट्रांसlates इंटेल 8080 assembly language source code टू इंटेल 8086 assembly language source code. Despite its name this iएमपीlementation in 8086 assembly is not related टू Digital Research's earlier and much more sophisticated एक्सएलT86.)
 * 
 * and, also available as
 * (9 pages) (NB. This software ट्रांसlaटूr was developed by ST and ट्रांसlates Moटूrola 6805/HC05 assembly source code in 2500एडी Software format inटू ST7 source code. The MIGR2ST7.EXE executable for Windows is available from "MCU ON CD".)
 * and, also available as
 * (9 pages) (NB. This software ट्रांसlaटूr was developed by ST and ट्रांसlates Moटूrola 6805/HC05 assembly source code in 2500एडी Software format inटू ST7 source code. The MIGR2ST7.EXE executable for Windows is available from "MCU ON CD".)