एक व्यावहारिक गैर-वॉन न्यूमैन वास्तुकला क्या है?


16

क्या गैर-वॉन न्यूमैन प्रोग्रामिंग मॉडल के लिए कोई व्यावहारिक अनुप्रयोग हैं? सबसे व्यापक रूप से अपनाई जाने वाली गैर-वॉन न्यूमैन प्रोग्रामिंग भाषाएं क्या हैं?


6
"नॉन-वॉन न्यूमैन" प्रोग्रामिंग मॉडल क्या है?
सुरेश वेंकट

मैं भी इस सवाल को नहीं समझता, हो सकता है कि आप सवाल के लिए कुछ पृष्ठभूमि जोड़ सकते हैं, इसलिए यह समझना आसान हो जाता है कि आप क्या पूछ रहे हैं।
केव

3
वॉन न्यूमैन वास्तुकला में एक सीपीयू है। इसलिए एक समानांतर प्रसंस्करण वास्तुकला यकीनन नॉन-वॉन न्यूमैन है (समानांतर प्रसंस्करण से पहले न्यूमैन वास्तुकला का आविष्कार किया गया था)। लेकिन सहमत हुए सवाल अस्पष्ट या धुंधला-परिभाषित लगता है। वॉन न्यूमैन एक कंप्यूटर आर्किटेक्चर को संदर्भित करता है, वास्तव में वास्तव में एक प्रोग्रामिंग मॉडल नहीं है। प्रोग्रामिंग मॉडल और सीपीयू / कंप्यूटर आर्किटेक्चर एक प्रकार के तालमेल / सहजीवन में मौजूद हैं, लेकिन कुछ हद तक एक-दूसरे से स्वतंत्र भी हैं .... विभिन्न आर्किटेक्चर प्रोग्रामिंग मॉडल के बिना अलग-अलग प्रोग्रामिंग मॉडल को लागू कर सकते हैं, जो वास्तुकला के लिए "युग्मित" हैं ...
vzn 15

1
नॉन-वॉन न्यूमैन प्रोग्रामिंग भाषा क्या है? इस मामले के लिए, एक वॉन न्यूमैन प्रोग्रामिंग भाषा क्या है? (मुझे बैकस की परिभाषा नहीं मिलती है - अनिवार्य रूप से "अनिवार्य भाषाएं" --- यहां तक ​​कि एक छोटा सा सम्मोहक भी।)
जेफε डेसी

1
@ रॉनी: विकिपीडिया पेज सिर्फ बैकस के लेख को तोता है।
जेफ

जवाबों:


12

जब मैं कहता हूं "वॉन न्यूमैन आर्किटेक्चर", मेरा मतलब है कि कुछ हार्डवेयर जो "वॉन न्यूमैन अड़चन" द्वारा सीमित है - यानी, इसमें सभी डेटा कुछ संकीर्ण डेटा बस के माध्यम से फ़नल है।

नॉन-वॉन न्यूमैन प्रोग्रामिंग लैंग्वेज मैं सबसे ज्यादा बार VHDL और वेरिलॉग से टकराती हैं । VHDL और वेरिलॉग में, डिफ़ॉल्ट रूप से, सब कुछ एक ही समय में होता है। क्रमबद्ध रूप से होने वाली घटनाओं की एक श्रृंखला बनाने के लिए प्रोग्रामर को अतिरिक्त प्रयास करना पड़ता है। यह अधिकांश अन्य प्रोग्रामिंग भाषाओं से बहुत अलग है जो कि एक "इंस्ट्रक्शन पॉइंटर" का अर्थ है, जो डिफ़ॉल्ट रूप से, कोड की एक पंक्ति में किसी एक पल में निष्पादित होता है, और प्रोग्रामर को एक ही समय में कई चीजें प्राप्त करने के लिए अतिरिक्त प्रयास पर जाना पड़ता है। समय।

कुछ लोग कहेंगे कि यह एक अधिक प्राकृतिक डिफ़ॉल्ट है। शुरुआती प्रोग्रामिंग छात्रों के बहुत सारे "एक्स (0) {{}}" लूप की अपेक्षा करते हैं कि एक्स से शून्य के बराबर हो जाने पर तुरंत बाहर निकलने के लिए लूप, और उन्हें यह जानकर आश्चर्य होता है कि कंप्यूटर लगातार उस स्थिति का मूल्यांकन नहीं करता है

VHDL और वेरिलॉग कोड लिखने वाले अधिकांश लोग FPGAs पर अपने कार्यक्रमों को संकलित करते हैं, जिससे गतिविधि के छोटे ब्लॉक बनते हैं जो सभी हर समय पूरी गति से चलते हैं। अक्सर ऐसे लोग एक "पाइपलाइन" स्थापित करते हैं जो इनपुट पिन से डेटा पढ़ता है, इसे ब्लॉक की एक श्रृंखला के माध्यम से संसाधित करता है, एक ब्लॉक के आउटपुट पिन सीधे अगले ब्लॉक के इनपुट पिन पर वायर्ड होते हैं, और अंतिम ब्लॉक परिणाम भेजता है आउटपुट पिन। यह यूनिक्स पाइपलाइन की याद दिलाता है , सिवाय इसके कि डेटा का एक नया टुकड़ा अंदर जाता है और हर घड़ी चक्र पर डेटा का एक नया टुकड़ा निकलता है।

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

आपको इसमें भी रुचि हो सकती है: क्या अन्य कंप्यूटर आर्किटेक्चर के अलावा वॉन न्यूमैन / ट्यूरिंग आर्किटेक्चर भी हैं?


11

मैं नॉन-वॉन न्यूमैन द्वारा मानता हूं, आप का मतलब है कि "वॉन न्यूमैन बॉटलनेक" को बैकस के पेपर के अनुसार "वॉन न्यूमैन स्टाइल से मुक्त किया जा सकता है?" उन लोगों के लिए, आप यहां एक प्रति पा सकते हैं: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

आपके प्रश्न का उत्तर कुछ कारणों से अस्पष्ट होना चाहिए।

पहला, किन भाषाओं ने उसके पेपर में मापदंड को संतुष्ट किया? यद्यपि इस पेपर में कार्यात्मक प्रोग्रामिंग का पता लगाने वाले लोग हैं, लेकिन अब इसे गलतफहमी के रूप में माना जाता है क्योंकि उनका मतलब पॉइंट-फ्री प्रोग्रामिंग जैसा कुछ था। तो क्या आप मूल गलतफहमी, या कागज के असली इरादे के साथ जाते हैं? उसके मतलब के विस्तार के लिए, कृपया निम्नलिखित देखें: http://en.wikipedia.org/wiki/Function-level_programming

दूसरा, यदि आप गलतफहमी के साथ जाते हैं, तो कार्यात्मक कैसे कार्यात्मक है? आपके पास शुद्ध कार्यात्मक भाषाएं हैं, अशुद्ध कार्यात्मक भाषाएं हैं, और ऐसी भाषाएं जो कार्यात्मक प्रतिमान के अपेक्षाकृत अनुकूल हैं। यह देखते हुए कि आप लोकप्रियता का उल्लेख करते हैं और उस और कार्यात्मक शुद्धता के बीच एक विपरीत संबंध है, बस क्या भाषाओं को शामिल किया जाना चाहिए? क्या आप सबसे लोकप्रिय शुद्ध कार्यात्मक भाषा (जो सभी में लोकप्रिय नहीं होगी) चाहते हैं, या एक अधिक लोकप्रिय है जो "कार्यात्मक-नेस" के कुछ न्यूनतम मानदंडों को पूरा करता है? यदि उत्तरार्द्ध, वे मानदंड क्या हैं?

तो आपके दृष्टिकोण के आधार पर:

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

  2. क्लोजर, स्काला और एफ # कम शुद्ध हैं, लेकिन अधिक व्यावहारिक और लोकप्रिय कार्यात्मक भाषाएं हैं। F # भी बिंदु-मुक्त शैली के अनुकूल है।

  3. फोर्थ एक बिंदु-मुक्त भाषा का प्रोटोटाइप उदाहरण हो सकता है, और यह अपने दिन में काफी व्यापक था, हालांकि अब ... फैक्टर एक और बिंदु-मुक्त भाषा है जिसने कुछ ध्यान आकर्षित किया है, लेकिन मुझे संदेह है कि यह अपने प्रिय दिवस में फोर्थ की लोकप्रियता से मेल खाती है। ।

  4. एपीएल बैकस द्वारा एक बिंदु पर (शायद उनके पेपर में नहीं) एक कदम की तरह उल्लेख किया गया था, लेकिन अपने लक्ष्यों के साथ पूरी तरह से संगत नहीं है। अपने दिन में यह वित्तीय क्षेत्र में बड़ा था। इसके वंशजों की जांच करना सुनिश्चित करें, जैसे जे।

  5. जावास्क्रिप्ट कार्यात्मक नहीं है, लेकिन यह प्रोग्रामिंग के एक उच्च क्रम शैली के प्रति बहुत अनुकूल है, जैसा कि इसके भारी उपयोग से स्पष्ट है। इसकी लोकप्रियता को देखते हुए, यह सिर्फ मानदंडों को पूरा कर सकता है। जावास्क्रिप्ट के साथ किए गए कुछ दिलचस्प सामानों की जांच करना सुनिश्चित करें, जैसे कि करी और कंबाइन कार्यान्वयन।

एक फुटनोट के रूप में, आपको उनके लक्ष्यों पर अधिक परिप्रेक्ष्य देने के लिए, आप उन दो भाषाओं की जाँच कर सकते हैं जिन्हें उन्होंने अपने मानदंडों को पूरा करने के लिए डिज़ाइन किया है। वे सभी AFAIK में लोकप्रिय नहीं हैं, इसलिए यह विशुद्ध रूप से ज्ञान के लिए होगा:

http://en.wikipedia.org/wiki/FP_(programming_language )

http://en.wikipedia.org/wiki/FL_(programming_language )


1
अब यह प्रतीत होता है कि उनका मतलब कार्यात्मक प्रोग्रामिंग के बजाय बिंदु-मुक्त प्रोग्रामिंग जैसा था - क्या इस पर चर्चा करने के लिए कुछ सूचक है? दिलचस्प लगता है।
सुरेश वेंकट

बैकस के प्रोग्रामिंग मॉडल को "फ़ंक्शन-स्तरीय प्रोग्रामिंग" कहा जाता है, और यहां एक लेख है: en.wikipedia.org/wiki/Function-level_programming । मैं किसी भी बहुत अच्छे लिंक के बारे में नहीं जानता (यदि आपको कोई भी मिल जाए तो मुझे अच्छा लगेगा!), लेकिन Googling "फंक्शन-लेवल प्रोग्रामिंग" कुछ दिलचस्प दिखने वाले लिंक को बदल देता है, जिसमें एक वीडियो भी शामिल है।
रॉनी

1
@ सुरेश वेंकट: एफपी और एफएल को विशेष रूप से फंक्शन-स्तरीय प्रोग्रामिंग के अपने विचार का समर्थन करने के लिए बैकस द्वारा बनाया गया था। "टैकिट प्रोग्रामिंग" और अधिक विशेष रूप से जे भाषा भी देखें , जो एपीएल और एफपी / एफएल को जोड़ती है यह बनाने के लिए कि वास्तविक उपयोग में सबसे अधिक गूढ़ और सबसे अभिव्यंजक सामान्य प्रयोजन वाली भाषा दोनों हो सकती है। मैं भी कार्यात्मक भाषाओं में tacit प्रोग्रामिंग का उपयोग करने के बारे में SO पर एक पोस्ट याद करता हूं ।
सीए मैक्कैन

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

@camccann मैंने कभी पोस्ट में कालक्रम सेट नहीं किया। इसके अलावा, लिस्प किसी भी दावे का समर्थन करने के लिए बहुत व्यापक है। उदाहरण के लिए, सभी लिस्प्स कार्यात्मक नहीं हैं क्योंकि सभी पूंछ पुनरावर्ती नहीं हैं। मुझे कॉम्बिनेटर लॉजिक के लिए आपका संदर्भ पसंद है, लेकिन मुझे लगता है कि बैकस की बात यह थी कि एक भाषा एक कंप्यूटर को प्रोग्राम कर सकती है जो प्रतिमान का समर्थन करता है। इसलिए, जबकि Combinatory Logic अपने तर्क पर प्रकाश डालता है, यह अंततः उसकी बात को प्रभावित नहीं करता है।
रॉनी

2

मुझे लगता है कि लिंडा और ट्यूपलस्पेस प्रोग्रामिंग बिल को फिट कर सकते हैं। संगामिति के साथ सहयोगी / पैटर्न मिलान स्मृति संचालन का मतलब है कि (वैचारिक रूप से) वॉन-न्यूमन की अड़चन समाप्त हो गई है।

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

लिंक के लिए विकिपीडिया देखें (मैं एक नया उपयोगकर्ता हूं और स्पैम सुरक्षा के तहत), लेकिन लिंडा के नाम के बारे में कुछ अशिष्ट हास्य के लिए, http://c2.com/cgi/wiki?LindaEtymology पढ़ें ।

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