क्या स्टैक-आधारित प्रोग्रामिंग भाषा के लिए समवर्ती होना संभव है?


14

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

एक अनिवार्य भाषा स्टैक को संशोधित करेगी, और एक विशुद्ध रूप से कार्यात्मक भाषा, जैसे कि जॉय , एक नया स्टैक लौटाएगी, लेकिन मुद्दा यह है कि एक समय में केवल एक स्टैक का उपयोग किया जाता है।

तो, क्या स्टैक-आधारित प्रोग्रामिंग भाषाएं समवर्ती हो सकती हैं? क्या वे एक ही समय में या एक जैसे कई ढेरों का उपयोग करके संगामिति प्राप्त कर सकते हैं?

क्या स्टैक-आधारित प्रोग्रामिंग भाषा में आलसी मूल्यांकन को लागू करना संभव है?

कृपया मुझे सही करें अगर मैं उपरोक्त भाषाओं और अवधारणाओं के बारे में कुछ भी गलत समझ रहा हूं


5
कोई भी अनिवार्य भाषा समवर्ती कैसे हो सकती है?
बर्गी


क्या आप वास्तव में संगति का मतलब है (जो हासिल करना इतना कठिन नहीं है, बस स्वतंत्र ढेर और साझा की गई स्मृति के साथ चलने वाले कई धागों का उपयोग करें) या समानता?
डैनियल जर्स

@DanielJour अगर मैं अच्छी तरह से समझता हूं, समानता का अर्थ है एक साथ निष्पादन, जबकि संगामिति का अर्थ है स्वतंत्र निष्पादन, इसलिए, हां, मेरा मतलब है संगामिति। क्या आप प्रत्येक धागे के लिए स्वतंत्र ढेर के बारे में अधिक विस्तार से बता सकते हैं?
अरमांडो एच।

जवाबों:


16

तो, क्या स्टैक-आधारित प्रोग्रामिंग भाषाएं समवर्ती हो सकती हैं?

ज़रूर।

क्या वे एक ही समय में या एक जैसे कई ढेरों का उपयोग करके समरूपता प्राप्त कर सकते हैं?

पहले से ही सामान्य भाषाओं के लिए बहु-थ्रेडिंग का मतलब आमतौर पर कई "कॉल" स्टैक होते हैं। प्रत्येक थ्रेड को अपना डेटा स्टैक देना पूरी तरह से स्वाभाविक होगा। एक अभिनेता का कहना सीधा होगा, जिसका शरीर कोड द्वारा स्टैक-आधारित भाषा में लागू किया गया था। स्पष्ट समानतावाद एक ला जीएचसी के parएनोटेशन यथोचित सीधे होने चाहिए। समानांतर में चीजों को निष्पादित करने के साथ मुख्य मुद्दा यह है कि आपको पता नहीं है कि कोड का स्टैक प्रभाव क्या होगा जब तक आप इसे निष्पादित नहीं करते हैं। हालांकि, जॉय-जैसे सिंटैक्स का उपयोग करना, कोई भी [a b c] parनिष्पादन के रूप में कल्पना कर सकता हैa b cया तो एक खाली स्टैक या स्टैक की एक प्रति के खिलाफ और केवल स्टैक के शीर्ष-सबसे अधिक तत्व को पूरा करने पर (या स्टैक खाली होने पर कुछ डमी मूल्य को धकेलना)। आप विविधताओं की कल्पना कर सकते हैं। विशुद्ध रूप से कार्यात्मक भाषा की तुलना में अनुकरणीय समानता भोलेपन से कठिन होगी, लेकिन निश्चित रूप से यह भी किया जा सकता है। उपयोगकर्ता-परिभाषित कॉम्बीनेटर का संकलित कोड अक्सर "सामान्य" कोड से बहुत अलग नहीं होता है।

क्या स्टैक-आधारित प्रोग्रामिंग भाषा में आलसी मूल्यांकन को लागू करना संभव है?

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

संयोग से, स्टैक-आधारित भाषाओं के लिए कई स्टैक होना असामान्य नहीं है, उदाहरण के लिए फोर्थ में डेटा स्टैक और रिटर्न स्टैक होता है, जिस पर आप मनमाना डेटा भी रख सकते हैं।


8

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

संगामिति

समांतर कार्यक्रम करने के लिए (संपादित करें: वास्तविक समवर्ती कार्यक्रमों का उपयोग करने के लिए) आपको कम से कम दो निष्पादन इकाइयों (सीपीयू-एस) की आवश्यकता होती है। FORTH में किसी शब्द को लागू करने के लिए यह तुच्छ होगा, उदाहरण के लिए, "इन दो तर्कों का उपयोग करके प्रोसेसर 2 पर इस शब्द को चलाएं"। यह शब्द प्रोसेसर 2 पर दो आवश्यक स्टैक आवंटित करेगा और शब्द को चलाना शुरू करेगा। आपको अपने आप को कुछ हद तक प्रतिबंधित करने की आवश्यकता है जो आप उस कार्यक्रम में उपयोग कर सकते हैं।

यदि समवर्ती कार्यक्रमों की संख्या निष्पादन इकाइयों की संख्या से अधिक है, तो आप "छद्म समानता" कार्यक्रमों के लिए जाएंगे। मूल रूप से ऐसा करने के दो तरीके हैं: कोरआउट या प्रीमेप्टिव मल्टीटास्किंग। किसी भी मामले में यह संभव है (आसान नहीं है, लेकिन साहित्य में अच्छी तरह से वर्णित है) इसे कैसे प्राप्त करें और FORTH आपको सभी निम्न स्तर के सामान तक पहुंचने की अनुमति देता है।

आलसी मूल्यांकन

बेशक आप FORTH में ऐसा कर सकते हैं जैसे किसी भी प्रोग्रामिंग भाषा के बारे में। यह हास्केल के रूप में सुरुचिपूर्ण या "बिल्ट-इन" नहीं होगा। मैं बहुत भोली मिसाल का इस्तेमाल करूंगा।

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

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


4
"वास्तविक समवर्ती कार्यक्रमों के लिए आपको कम से कम दो निष्पादन इकाइयों की आवश्यकता होती है"। यह केवल एक कार्यान्वयन मुद्दा है। प्रोग्रामिंग भाषा के दृष्टिकोण से, एक ही सीपीयू पर या दो पर चलने वाले दो धागों में कोई अंतर नहीं है। एक अर्थ में, प्रत्येक धागे को अपने आप में एक 'निष्पादन इकाई' माना जा सकता है।
असतत छिपकली

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

कभी-कभी हम करते हैं। हालांकि, मुझे संदेह है कि यह ऐसा मामला है। उदाहरण के लिए, प्रश्न में वास्तविक समय निर्धारण आवश्यकताओं का उल्लेख नहीं है।
छिपकली

3
"कॉन्सिक्वेंसी"! = "समानतावाद"। एकल-सीपीयू मशीन पर चलने वाले कई थ्रेड्स को एक दूसरे के साथ समवर्ती रूप से चलाने के लिए कहा जा सकता है, भले ही कोई समानांतर प्रसंस्करण नहीं हो रहा हो।
सोलोमन स्लो

समसामयिक बनाम समानता के बारे में लिया गया बिंदु। मैं पाठ बदल दूंगा।
गेलक्विस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.