हालाँकि, विशेष रूप से प्रोग्रामिंग भाषाओं (उनके शब्दार्थ, प्रकार प्रणाली, मूल्यांकन, और साथ ही उनके बारे में गुणों की जाँच सहित) के उद्देश्य से बनाई गई रूपरेखाएँ हैं, सबसे अच्छा विकल्प आपके विशेष मामले और विशिष्ट आवश्यकताओं पर निर्भर करता है।
कहा जाने के बाद, कई (शायद इतने अलग नहीं) विकल्प हैं कि आप ले सकते हैं (जो आपके द्वारा पहले ही उल्लेख किया गया है उन्हें शामिल करें):
- नई भाषाओं को बनाने और प्रोटोटाइप करने के लिए डिज़ाइन की गई एक विशिष्ट भाषा / रूपरेखा का उपयोग करना: उदाहरण के लिए, रेडेक्स [1], जो प्रोग्रामिंग भाषाओं के विनिर्देश और जाँच (परिचालन) शब्दार्थ के लिए रैकेट में एक डोमेन-विशिष्ट भाषा एम्बेडेड है, जिसने एक परिभाषा दी है। भाषा, टाइपिंग (लेटेक्स में) जैसे कार्यों की आसान हैंडलिंग प्रदान करता है, कमी के निशान का निरीक्षण, यूनिट परीक्षण और यादृच्छिक परीक्षण (उदाहरण के लिए टाइपिंग की जाँच)
- सामान्य मॉडलिंग भाषाओं का उपयोग करना जो निश्चित विश्लेषणों को आसानी से परिभाषित करने और प्रदर्शन करने की पेशकश करते हैं, जब तक कि वे विशिष्ट भाषा को आवश्यक सीमा तक हाथ में पकड़ सकते हैं; मिश्र धातु [2] इस तरह के दृष्टिकोण का एक उदाहरण है: यद्यपि बहुत सामान्य और लचीली, भाषाओं को राज्यों के बीच संबंधों के रूप में मॉडल किया जा सकता है, जबकि मॉडल चेकिंग (जैसे भाषा के भीतर मूल्यांकन) के लिए समर्थन शब्दार्थ के साथ व्यक्त किए जाने के बाद मुफ्त में आता है संबंध मॉडल (उदाहरण के लिए किसी भाषा के शब्दार्थ के लिए कुछ विचार [3] में देखे जा सकते हैं)
- एक प्रमेय कहावत का उपयोग करके इसके गुणों की जांच करने के लिए भाषा को एम्बेड करना; एक उदाहरण कोक [4] जैसी प्रमाण प्रणाली में भाषा को परिभाषित करने के साथ-साथ इसके शब्दार्थ को भी परिभाषित किया गया है (इस दृष्टिकोण के बारे में अधिक विवरण, साथ ही चर्चा और Coq में गहरी और उथले एम्बेडिंग के बीच के अंतर का प्रदर्शन इसमें दिया गया है] 5])
- ओट का उपयोग करना (जैसा कि पहले ही उल्लेख किया गया है, रेडेक्स के समान भावना के साथ, लेकिन एम्बेडेड होने के बजाय एक नई परिभाषा भाषा प्रदान करना); ओट आपको एक सुविधाजनक संकेतन में प्रोग्रामिंग भाषा को परिभाषित करने की अनुमति देता है, और एक प्रूफ सिस्टम में टाइपसेटिंग और परिभाषाओं का उत्पादन करता है (आमतौर पर गहरी एम्बेडिंग के साथ), जहां अधिकांश चेकिंग (यानी प्रमाण) मैन्युअल रूप से करने की आवश्यकता होती है
- भाषा और उसके शब्दार्थ को विकसित करने के साथ-साथ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा में उपयुक्त जांच (जैसे परीक्षण से) "खरोंच से" और अन्य प्रणालियों में अनुवाद यदि आवश्यक हो, तो प्रयोजनों की जाँच के लिए (कुछ भाषाएं, जैसे लियोन [6], अंतर्निर्मित सत्यापनकर्ता शामिल हैं, जो स्वचालित रूप से कुछ गुणों को साबित करने की अनुमति देते हैं और इस दृष्टिकोण को एक प्रूफ सिस्टम में एम्बेड करने के समान बनाते हैं)
ध्यान दें कि फ्रेमवर्क / टूल का उपयोग करना कितना आसान है (उदाहरण के लिए कागज पर या लेटेक्स में परिभाषा रखना जितना आसान है) के बीच ट्रेड-ऑफ है और भाषा के गुणों की जांच करने के लिए तंत्र कितने शक्तिशाली हैं (जैसे एम्बेड करना एक प्रमेय कहावत में भाषा बहुत विस्तृत गुणों की जाँच करने की अनुमति दे सकती है)।
[१] केसी क्लेन, जॉन क्लेन्स, क्रिस्टोस डिमौलस, कार्ल ईस्टलंड, मैथियास फेलेइसेन, मैथ्यू फ्लैट, जे। ए। मैक्कार्थी, जॉन रफकिन्द, सैम टोबिन-होचस्टाट और रॉबर्ट ब्रूस फाइंडर। रन योर रिसर्च: लाइटवेट मैकेनाइजेशन की प्रभावशीलता पर। POPL, 2012।
[२] डैनियल जैक्सन। मिश्र धातु: एक हल्की वस्तु मॉडलिंग संकेतन। टीओएसईएम, 2002।
[३] ग्रेग डेनिस, फेलिक्स चांग, डैनियल जैक्सन। SAT के साथ कोड का मॉड्यूलर सत्यापन। ISSTA, 2006
[४] कोक औपचारिक प्रमाण प्रबंधन प्रणाली
[५] कार्यक्रमों के बारे में औपचारिक तर्क। एडम चिप्पला, 2016
[६] कार्यात्मक स्कैला कार्यक्रमों की पुष्टि, मरम्मत और संश्लेषण के लिए लियोन स्वचालित प्रणाली