← नवीनतम पेपर
💻 computer science

Array-Carrying Symbolic Execution for Function Contract Generation

यह शोध पत्र LLVM के भीतर कार्यान्वित और Frama-C के साथ एकीकृत एक नवीन प्रतीकात्मक निष्पादन (symbolic execution) ढांचे को प्रस्तुत करता है जो निरंतर सरणी खंडों (contiguous array segments) पर इनवेरिएंट्स (invariants) और संशोधन जानकारी को प्रभावी ढंग से ले जाकर फंक्शन कॉन्ट्रैक्ट्स उत्पन्न करता है, जिससे सरणी-हेरफेर करने वाले कार्यों के विश्लेषण में मौजूदा दृष्टिकोणों की सीमाओं को दूर किया जा सके।

मूल लेखक: Weijie Lu, Jingyu Ke, Hongfei Fu, Zhouyue Sun, Yi Zhou, Guoqiang Li, Haokun Li

प्रकाशित 2026-03-02
📖 5 मिनट में पढ़ें🧠 गहराई से पढ़ें

मूल लेखक: Weijie Lu, Jingyu Ke, Hongfei Fu, Zhouyue Sun, Yi Zhou, Guoqiang Li, Haokun Li

मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें

कल्पना कीजिए कि आप एक विशाल, स्वचालित कारखाने में एक गुणवत्ता निरीक्षक (quality inspector) हैं। आपका काम हर उस मशीन (फंक्शन) के लिए एक "उपयोगकर्ता नियमावली" (एक अनुबंध) लिखना है जो आपकी लाइन से गुजरती है। इस नियमावली को मुझे यह बताना होगा:

  1. आपको मशीन को क्या खिलाना है (Preconditions/पूर्व-शर्तें)।
  2. मशीन क्या थूक कर बाहर निकालेगी (Postconditions/पश्च-शर्तें)।
  3. मशीन को कारखाने के किन हिस्सों को छूने या बदलने की अनुमति है (Assigns/निर्धारण)।

समस्या क्या है? कई मशीनें ऐरे-हेरफेर करने वाले दैत्य (array-manipulating monsters) हैं। वे केवल एक समय में एक वस्तु को नहीं संभालते; वे बक्सों की विशाल, निरंतर पंक्तियों (arrays) को पकड़ते हैं और उन्हें पुनर्व्यवस्थित करते हैं, उनमें खोज करते हैं, या उन पर संख्याएँ जोड़ते हैं।

मौजूदा निरीक्षक (पुराने उपकरण) आंखों पर पट्टी बंधे श्रमिकों की तरह थे। वे एक अकेले बक्से के नियमों का अनुमान लगा सकते थे, लेकिन जब किसी मशीन ने 1,000 बक्सों की पूरी पंक्ति को पकड़ा, तो वे भ्रमित हो जाते थे। वे आपको सटीक रूप से नहीं बता पाते थे कि कौन से बक्से बदले गए या पहले बक्से और अंतिम बक्से के बीच क्या संबंध था। या तो वे हार मान लेते थे या अस्पष्ट, बेकार नियमावलियाँ लिखते थे।

नया समाधान: "कैरिंग" (Carrying) निरीक्षक

इस शोध पत्र के लेखकों ने एक नए प्रकार का निरीक्षक बनाया है जिसे एरे-कैरिंग सिम्बोलिक निष्पादन (Array-Carrying Symbolic Execution) कहा जाता है। यह कैसे काम करता है, इसके सरल उदाहरण यहाँ दिए गए हैं:

1. "कैरिंग" बैकपैक (पीठ पर बैग)

कल्पना कीजिए कि आपके निरीक्षक के पास एक जादुई बैकपैक है। जैसे-जैसे मशीन चलती है, निरीक्षक केवल देखता नहीं है; वह पूरी पंक्ति की स्थिति का एक चलता-फिरता लॉग ले जाता (carry करता) है।

  • पुराना तरीका: निरीक्षक एक बक्से को देखता, एक नोट लिखता, अगले बक्से को देखता और पहले को भूल जाता।
  • नया तरीका: निरीक्षक अपने बैकपैक में एक "खंड" (segment) लेकर चलता है। वे जानते हैं, "ठीक है, बक्सा 0 से बक्सा 50 तक, हर एक बक्सा अब सम संख्या है।" वे मशीन के आगे बढ़ने के साथ इस ज्ञान को आगे ले जाते हैं।

2. "विभाजित पथों" को संभालना (रास्ते का मोड़)

कभी-कभी, एक मशीन में एक "If/Else" निर्णय होता है।

  • परिदृश्य: "यदि आपको शून्य मिले, तो रुकें। यदि नहीं, तो चलते रहें।"
  • पुराना तरीका: निरीक्षक इन दोनों रास्तों को एक ही अस्त-व्यस्त, अस्पष्ट नियम में मिलाने की कोशिश करता था, जिससे अक्सर विशिष्ट विवरण खो जाते थे।
  • नया तरीका: निरीक्षक दो समानांतर ब्रह्मांडों में विभाजित हो जाता है। ब्रह्मांड A (शून्य मिला) में, वे यह नोट लेकर चलते हैं: "बक्सा 0 से 10 तक शून्य हैं, और हम यहाँ रुक गए।" ब्रह्मांड B (शून्य नहीं मिला) में, वे यह नोट लेकर चलते हैं: "बक्सा 0 से 100 तक शून्य हैं, और हम अंत तक पहुँच गए।"
  • जादू: अंत में, एक अव्यवस्थित विलय करने के बजाय, निरीक्षक एक अनुबंध लिखता है जो कहता है: "परिणाम या तो ब्रह्मांड A का नियम है या ब्रह्मांड B का नियम है।" यह जानकारी को सटीक रखता है।

3. "मर्जिंग" (विलय करने वाला) पहेली

कल्पना कीजिए कि एक मशीन बक्सों की एक पंक्ति को दो चरणों में संसाधित करती है:

  1. पहले, यह बड़े बैचों में पहले 100 बक्सों को संसाधित करती है।
  2. फिर, यह शेष 50 बक्सों को एक-एक करके संसाधित करती है।
  • पुराना तरीका: निरीक्षक शायद यह कह सकता था कि "इसने पहले 100 को छुआ" और "इसने अंतिम 50 को छुआ," लेकिन यह समझने में विफल रहता कि ये वास्तव में 0 से 150 तक का एक निरंतर ब्लॉक हैं।
  • नया तरीका: निरीक्षक अपने बैकपैक में दो अलग-अलग नोट्स देखता है। वे महसूस करते हैं, "अरे, ये दो खंड एक-दूसरे के ठीक बगल में हैं!" वे उन्हें एक एकल, साफ नोट में विलय (merge) कर देते हैं: "मशीन ने 0 से 150 तक की पूरी पंक्ति को संशोधित किया।"

यह क्यों महत्वपूर्ण है

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

  • परिणाम: लेखकों ने अपने नए निरीक्षक का परीक्षण 282 अलग-अलग प्रोग्रामों पर किया।
  • प्रतिस्पर्धा: एक शीर्ष-स्तरीय मौजूदा उपकरण (AutoDeduct) केवल 10 प्रोग्रामों के लिए एक पूर्ण, सत्यापन योग्य नियमावली लिखने में सक्षम था।
  • नया उपकरण: उनके "कैरिंग" निरीक्षक ने 68 प्रोग्रामों के लिए पूर्ण नियमावलियाँ लिखीं, जिनमें जटिल क्रिप्टोग्राफिक कोड भी शामिल था जिसे पुराने उपकरण छू भी नहीं सके थे।

कमी (सीमाएं)

नया निरीक्षक बक्सों की पंक्तियों (arrays) को संभालने में माहिर है। हालाँकि, यह अभी भी मुड़ी हुई जंजीरों (linked lists) या जटिल पेड़ों (binary trees) को संभालने के बारे में सीख रहा है। यदि डेटा संरचना एक सरल, सीधी रेखा है, तो निरीक्षक एक जीनियस है। यदि डेटा संरचना पॉइंटर्स का एक उलझा हुआ जाल है, तो निरीक्षक थोड़ा भ्रमित हो जाता है।

सारांश

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

अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?

आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।

Digest आज़माएँ →