Validated Code Translation for Projects with External Libraries
यह शोध पत्र एक ऐसे ढांचे को प्रस्तुत करता है जो सार्वजनिक लाइब्रेरी एपीआई से एडेप्टर (adapters) को संश्लेषित करने वाले क्रॉस-लैंग्वेज वैलिडेशन पाइपलाइन के साथ एक एपीआई रिट्रीवल मैकेनिज्म को जोड़कर, बाहरी डिपेंडेंसी वाले गो (Go) प्रोजेक्ट्स को रस्ट (Rust) में अनुवादित करने की प्रक्रिया को उन्नत करता है, जिससे संकलन सफलता दर (compilation success rates) में उल्लेखनीय सुधार होता है और ओपेक टाइप्स (opaque types) का हेरफेर करने वाले कोड के लिए सिमेंटिक समानता सुनिश्चित होती है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आपके पास एक विशाल, जटिल लाइब्रेरी है जो Go (एक प्रोग्रामिंग भाषा) में लिखी गई है, और आप उन सभी किताबों को एक नई, अधिक सख्त और सुरक्षित लाइब्रेरी में ले जाना चाहते हैं जो Rust में लिखी गई है। यह एक व्यस्त शहर को एक देश से दूसरे देश में ले जाने जैसा है जहाँ कानून, सड़क के संकेत और यहाँ तक कि भाषा भी थोड़ी अलग है।
आपने जो पेपर साझा किया है वह एक नए "मूविंग कंपनी" (एक सॉफ़्टवेयर टूल) के बारे में है जो इस अनुवाद को करने के लिए AI का उपयोग करता है, लेकिन इसमें एक विशेष मोड़ है: यह उन दो समस्याओं को हल करता है जिन्हें पिछले मूवर्स संभाल नहीं सके थे।
यह कहानी है कि उन्होंने इसे कैसे किया, कुछ रोज़मर्रा के उदाहरणों का उपयोग करते हुए।
समस्या: "भ्रमित करने वाला" अनुवादक और "बंद बक्से" (Locked Boxes)
अतीत में, जब AI ने कोड को अनुवाद करने की कोशिश की, तो उसे दो बड़ी समस्याओं का सामना करना पड़ा:
भ्रमित होने वाला लाइब्रेरियन (The Hallucinating Librarian):
कल्पना कीजिए कि आप एक AI से एक Go फंक्शन को अनुवाद करने के लिए कहते हैं जोsha512नामक एक विशिष्ट टूल का उपयोग करता है। AI, मददगार बनने की कोशिश में, एक नकली Rust टूलsha512_rust_newबना सकता है जो वास्तव में मौजूद ही नहीं है। या, हो सकता है कि उसे पता हो कि वह टूल मौजूद है, लेकिन वह उस "निर्देश पुस्तिका" (import statement) को लाना भूल जाए जिसकी उसे उपयोग करने के लिए आवश्यकता है।- परिणाम: अनुवाद कागज़ पर तो अच्छा दिखता है, लेकिन जब आप इसे बनाने (build करने) की कोशिश करते हैं, तो यह क्रैश हो जाता है क्योंकि टूल्स गायब हैं या नकली हैं।
बंद बक्से (Opaque Types):
पुराने दिनों में, यदि आप यह जांचना चाहते थे कि अनुवाद काम कर रहा है या नहीं, तो आप बस "पहले" और "बाद के" बक्सों की तुलना करते। लेकिन आधुनिक प्रोग्रामिंग में, लाइब्रेरी अक्सर "ओपेक टाइप्स" (opaque types) का उपयोग करती हैं।- उदाहरण: कल्पना कीजिए कि एक Go प्रोग्राम एक फंक्शन को एक लॉक की गई तिजोरी (safe) भेजता है। AI उस कोड को Rust में अनुवाद करता है, लेकिन अब वह एक अलग प्रकार की तिजोरी है। आप तिजोरी को खोलकर यह नहीं देख सकते कि उसके अंदर क्या है क्योंकि चाबियाँ अलग हैं, और तिजोरियाँ अलग सामग्रियों से बनी हैं। आप तुलना करने के लिए उनके अंदर भी नहीं झाँक सकते। पिछले टूल्स यहाँ हार मान लेते थे क्योंकि वे इन "बंद बक्सों" के अंदर की तुलना नहीं कर पाते थे।
समाधान: "क्रॉसक्रेट" (CrossCrate) मूविंग कंपनी
लेखकों ने CrossCrate नामक एक सिस्टम बनाया है जो एक सुपर-स्मार्ट, अच्छी तरह से तैयार मूविंग टीम की तरह काम करता है। उन्होंने दो मुख्य चरणों में इन समस्याओं को हल किया:
चरण 1: "रियल-टाइम डिक्शनरी" (RAG)
AI को नकली टूल्स बनाने से रोकने के लिए, उन्होंने इसे एक रियल-टाइम डिक्शनरी (तकनीकी रूप से जिसे रिट्रीवल-ऑगमेंटेड जनरेशन या RAG कहा जाता है) दी।
- यह कैसे काम करता है: AI द्वारा कोड की एक लाइन को अनुवाद करने से पहले, वह रुकता है और एक विशाल, सत्यापित डेटाबेस से पूछता है: "हे, इस Go टूल का सटीक Rust समकक्ष क्या है? और मुझे कौन सी सटीक लाइन लिखनी चाहिए ताकि यह काम कर सके?"
- उदाहरण: AI को अपनी याददाश्त से अनुमान लगाने देने के बजाय (जो गलतियों के प्रति संवेदनशील है), वे उसे Rust शहर का एक सत्यापित मानचित्र (verified map) थमा देते हैं। यदि Go कोड किसी विशिष्ट लाइब्रेरी का उपयोग करता है, तो मानचित्र AI को बताता है कि उसे किस Rust 'crate' (लाइब्रेरी) का उपयोग करना चाहिए और सबसे महत्वपूर्ण बात यह है कि उसे कौन सी सटीक "import" लाइनें लिखनी हैं ताकि कोड वास्तव में कंपाइल हो सके।
- परिणाम: AI नकली टूल्स बनाना बंद कर देता है। वह केवल वास्तविक, मौजूदा टूल्स और सही निर्देशों का उपयोग करता है।
चरण 2: "यूनिवर्सल पैकिंग क्रेट" (The Adapter)
"बंद बक्से" की समस्या को हल करने के लिए, उन्होंने एक यूनिवर्सल पैकिंग क्रेट का आविष्कार किया।
- समस्या: आप एक Go "तिजोरी" की सीधे एक Rust "तिजोरी" से तुलना नहीं कर सकते।
- समाधान: उन्होंने एक तटस्थ, मानक कंटेनर बनाया (जो Protobuf नामक प्रारूप पर आधारित है)।
- पैकिंग: वे Go "तिजोरी" को लेते हैं, उसे खोलते हैं (लाइब्रेरी की सार्वजनिक कुंजियों का उपयोग करके), और उसकी सामग्री को इस यूनिवर्सल क्रेट में पैक करते हैं।
- अनपैकिंग: वे Rust "तिजोरी" को लेते हैं, उसे खोलते हैं, और उसकी सामग्री को एक समान य적인 यूनिवर्सल क्रेट में पैक करते हैं।
- तुलना: अब, दो अलग-अलग तिजोरियों की तुलना करने के बजाय, वे केवल यूनिवर्सल क्रेट्स की तुलना करते हैं। चूंकि क्रेट्स डिज़ाइन के अनुसार समान हैं, इसलिए यदि सामग्री मेल खाती है, तो अनुवाद सही है!
- उदाहरण: कल्पना कीजिए कि आप एक नाजुक फूलदान को स्थानांतरित कर रहे हैं। आप पुराने घर के फूलदान की तुलना नए घर के फूलदान से सीधे नहीं कर सकते क्योंकि वे अलग तरह से लिपटे हुए हैं। इसलिए, आप फूलदान को बाहर निकालते हैं, उसे एक मानक शिपिंग बॉक्स में रखते हैं, उसे ले जाते हैं, और फिर देखते हैं कि बॉक्स की सामग्री मेल खाती है या नहीं। यदि वे मेल खाते हैं, तो फूलदान सुरक्षित है।
परिणाम: एक आदर्श स्थानांतरण
टीम ने वास्तविक दुनिया के छह जटिल Go प्रोजेक्ट्स (जैसे पासवर्ड जेनरेटर और एन्क्रिप्शन टूल्स) पर इसका परीक्षण किया जो बाहरी लाइब्रेरीओं पर बहुत अधिक निर्भर थे।
- उनकी मदद के बिना: AI कोड को कंपाइल करने में विफल रहा या यह साबित नहीं कर सका कि यह काम करता है (सबसे कठिन कार्यों पर 0% सफलता)।
- उनकी मदद के साथ: उन्होंने 95% से 100% सफलता दर हासिल की।
- कोड वास्तव में कंपाइल हुआ (कोई नकली टूल्स नहीं)।
- कोड बिल्कुल एक जैसा व्यवहार करता था (यूनिवर्सल क्रेट्स मेल खाते थे)।
मुख्य निष्कर्ष
यह पेपर AI को एक सावधान, अच्छी तरह से शोधित अनुवादक बनने के लिए सिखाने के बारे में है, न कि केवल एक आत्मविश्वासी अनुमान लगाने वाले के बारे में।
- टूल्स का अनुमान न लगाएं: सही टूल्स और निर्देश खोजने के लिए एक सत्यापित डेटाबेस का उपयोग करें।
- बंद बक्सों के अंदर न झांकें: डेटा को एक भाषा से दूसरी भाषा में ले जाने के लिए एक मानक "पैकिंग क्रेट" का उपयोग करें ताकि आप निष्पक्ष रूप से तुलना कर सकें।
ऐसा करके, उन्होंने यह संभव बना दिया कि जटिल, वास्तविक दुनिया के सॉफ़्टवेयर को एक भाषा से दूसरी भाषा में स्वचालित और सुरक्षित रूप से माइग्रेट किया जा सके, भले ही वह सॉफ़्टवेयर रहस्यमय, लॉक-डाउन लाइब्रेरीओं पर निर्भर हो।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।