मैं कुछ एसीएसएल एनोटेशन ढूंढना चाहता हूं जिसे किसी फ़ंक्शन या फ़ंक्शन पॉइंटर पर लागू किया जा सकता है ताकि यह इंगित किया जा सके कि इसमें संदर्भित पारदर्शिता की संपत्ति है। कहने का कोई तरीका "एक ही तर्क दिए जाने पर यह फ़ंक्शन हमेशा वही मान लौटाएगा"। अभी तक मुझे ऐसा कोई रास्ता नहीं मिला है। क्या कोई मुझे इसे व्यक्त करने के तरीके के बारे में बता सकता है?

शायद मनमाने ढंग से तर्क समारोह को संदर्भित करने का कोई तरीका? अगर मैं एक अज्ञात logic boolean uknown_function(void* a, void* b) = /* this is unkown */; का नाम दे सकता हूं तो मैं एक फ़ंक्शन को पोस्टकंडिशन के रूप में दस्तावेज कर सकता हूं कि यह \result इस मनमानी/अज्ञात तर्क फ़ंक्शन के बराबर है?

बड़ा संदर्भ टाइप-मिटा हुआ तुलना करने का प्रयास कर रहा है। मैं आम तौर पर "उपयोगकर्ता ने मुझे void* के साथ काम करने के लिए और एक bool (*)(void const*, void const*) के साथ तुलना करने की अवधारणा व्यक्त करना चाहता हूं, और उपयोगकर्ता मुझे गारंटी दे रहा है कि वास्तव में प्रदान किया गया कार्य एक सख्त है जो कुछ भी इंगित करता है उस पर आंशिक आदेश।" अगर मेरे पास ऐसा होता, तो मैं उदाहरण के लिए, इन प्रकार की मिटाई गई वस्तुओं के गुणों का वर्णन करना शुरू कर सकता था।

1
user1243488 12 नवम्बर 2018, 10:51

1 उत्तर

सबसे बढ़िया उत्तर

एसीएसएल में ऐसा करने की वास्तव में कोई प्रत्यक्ष संभावना नहीं है: एक फ़ंक्शन अनुबंध केवल यह निर्दिष्ट करता है कि फ़ंक्शन के एक कॉल के दौरान क्या होता है। आप वास्तव में एक घोषित लेकिन बाएं अपरिभाषित तर्क फ़ंक्शन पर भरोसा कर सकते हैं, एक reads क्लॉज के साथ जो सी मेमोरी स्टेट के हिस्से को निर्दिष्ट करता है कि फ़ंक्शन को इसके परिणाम की गणना करने की आवश्यकता होगी, उदा।

/*@ logic boolean unknown_function{L}(int* a, int* b) reads a[0 .. 1], b[2 .. 3]; */

लेकिन अगर आप अंतर्निहित वस्तुओं के आकार को जाने बिना void * के साथ काम करते हैं, तो यह निर्दिष्ट करना मुश्किल हो सकता है: जब तक कि unknown_function का परिणाम पूरी तरह से सूचक के मूल्य पर निर्भर न हो, न कि सामग्री की सामग्री पर नुकीली वस्तु, जिस स्थिति में आपको उस reads चाल की आवश्यकता नहीं है।

इसके अलावा ध्यान दें कि फ़ंक्शन पॉइंटर्स पर अनुबंध अभी तक समर्थित नहीं हैं, जो संभवत: एक मुद्दा होगा जो आप करना चाहते हैं यदि मैं आपके अंतिम पैराग्राफ को सही ढंग से समझता हूं।

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

1
Virgile 14 नवम्बर 2018, 14:02