56

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

क्या कुंजी संचालन और एक आदर्श कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग भाषा के गुणों हो सकता है?

+1

जिज्ञासा से, क्या आपने ढांचा तैयार करना समाप्त कर दिया? – bman

उत्तर

110

मुझे खुशी है कि आप कार्यान्वयन के बजाय एक विनिर्देश के बारे में पूछ पहले से शुरू कर रहे हैं रहा हूँ। एफआरपी क्या है इसके बारे में बहुत सारे विचार चल रहे हैं। मेरे लिए यह हमेशा दो चीजें होती है: (ए) denotative और (बी) अस्थायी रूप से निरंतर। कई लोग इन दोनों गुणों को छोड़ देते हैं और विभिन्न कार्यान्वयन विचारों के साथ एफआरपी की पहचान करते हैं, जिनमें से सभी मेरे परिप्रेक्ष्य में बिंदु के बगल में हैं। भ्रम को कम करने के लिए, मैं, (dCTP) को देखने के लिए शब्द "कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग" और अधिक सटीक & वर्णनात्मक "सूचक, निरंतर समय प्रोग्रामिंग" से बदल तरह के रूप में a conversation last year में जेक McArthur ने सुझाव दिया जाएगा।

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

निरंतर समय के बारे में, Why program with continuous time? पोस्ट और इस पृष्ठ पर एशलेफ़ के उत्तर में मेरा उद्धरण देखें। मैं निरंतर का विचार किसी भी तरह से अप्राकृतिक या असंभव है, कंप्यूटर की असतत प्रकृति पर विचार करते हुए & पर आश्चर्यचकित हूं। सोच की यह पंक्ति के रूप में मुझे विचित्र हमलों, खासकर जब Haskellers से आ रही, कुछ कारणों से:

  • आलसी कार्यात्मक भाषाओं का उपयोग करना, हम लापरवाही से परिमित मशीनों पर अनंत डेटा के साथ कार्यक्रम। परिणामस्वरूप हमें सुंदर मॉड्यूलरिटी मिलती है, जैसा कि जॉन ह्यूजेस के क्लासिक पेपर Why Functional Programming Matters में दिखाया गया है।
  • निरंतर अंतरिक्ष में प्रोग्रामिंग के कई उदाहरण हैं, उदाहरण के लिए, वेक्टर ग्राफिक्स, लेकिन Pan जैसी चीजें भी।
  • मुझे अपने कार्यक्रम पसंद हैं कि मैं प्रोग्राम को निष्पादित करने वाली मशीन की बजाय समस्या स्थान के बारे में कैसे सोचता हूं, और मुझे लगता है कि अन्य उच्च स्तरीय भाषा प्रोग्रामर उस वरीयता को साझा करने की अपेक्षा करते हैं। ("एक प्रोग्रामिंग भाषा निम्न स्तर जब अपने कार्यक्रमों अप्रासंगिक करने के लिए ध्यान देने की जरूरत है।" - एलन Perlis)

मैं TBAG और ActiveVRML (प्रथम dCTP/एफ आर पी के बाद से निरंतर समय के साथ प्रोग्रामिंग के लिए पुस्तकालयों लगाते आ रहे हैं सिस्टम) और बाद में Fran। सही ढंग से कार्यान्वित करना आसान है। पेपर Functional Implementations of Continuous Modeled Animation में कुछ अलग दृष्टिकोणों का वर्णन किया गया है। निरंतर समय कुशलतापूर्वक (और अभी भी सही ढंग से!) कार्यान्वित करना एक और मामला है, विशेष रूप से अपरिवर्तनीय मूल्यों को पुनः संयोजित करने से बचाना। क्यों सतत समय मामलों, these notes देखने पर अधिक जानकारी के लिए:

संबंधित टिप्पणी के लिए, कृपया my answer to The difference between Reactive and Functional-Reactive programming और What is (functional) reactive programming? करने के लिए अद्यतन (कागज Push-pull functional reactive programming देखें।)। अपडेट: यह भी देखें, मेरी 2015 की बात The essence and origins of FRP (और वहां से जुड़े संबंधित वार्ता)।

आपकी खोज के साथ शुभकामनाएं, और अगर आपके कोई प्रश्न हैं तो कृपया मुझे बताएं। मेरी संपर्क जानकारी my home page पर है।

+2

मेरे लिए दिलचस्प क्या है कि निरंतर * फ़ंक्शन * की धारणा सीमित सीमाओं के बारे में है। किसी फ़ंक्शन के लिए निरंतरता की परिभाषा यह है: आपके द्वारा की जाने वाली किसी भी सीमित मात्रा में जानकारी के लिए, आपके पास एक सीमित मात्रा में जानकारी मौजूद है, इसलिए यदि आप निरंतर समय से काम कर रहे हैं, तो आपको बस इसके साथ लगातार काम करना होगा यह और यह पूरी तरह से प्राकृतिक है। – luqui

+1

@ कोनल आरएक्सजेएस या बेकन.जेएस एफआरपी हैं? यदि नहीं, क्यों? आप ऊपर वर्णित चीज़ों से अलग कैसे हैं? क्या उन्हें इसके बजाय कुछ और कहा जाना चाहिए? – Bradford

+1

@ ब्रैडफोर्ड क्या आप पूछ रहे हैं कि आरएक्सजे और बेकन.जेएस के ऊपर मेरे उत्तर में दो आधारभूत गुण हैं या नहीं? – Conal

5

मुझे लगता है कि आपने शायद Matthias Felleisen’s talk को कार्यात्मक I/O पर देखा है और his paper पढ़ा है। मुझे लगता है कि वह एक बहुत ही व्यावहारिक और सुंदर दृष्टिकोण है। उम्मीद है कि आप Conal Elliott के उत्कृष्ट काम पर भी ठोकर खा चुके हैं।

मेरी व्यक्तिगत आवश्यकताएं यह होगी कि सिस्टम पूरी तरह से शुद्ध है। यही है, सभी व्यवहार शुद्ध world->world कार्यों द्वारा परिभाषित किया गया है और सभी प्राप्ति या विज़ुअलाइज़ेशन world->visual फ़ंक्शंस द्वारा परिभाषित किया गया है; जहां visual सिस्टम से आउटपुट का कुछ स्थिर विवरण है।

मेरी अन्य प्राथमिक विशेषता एक ऐतिहासिक डीबगर होगी। यह world राज्यों के इतिहास को बनाए रखने के लिए अपेक्षाकृत मामूली होना चाहिए और समय पर किसी भी बिंदु से फिर से चलाने में सक्षम होना चाहिए। बेहद दिलचस्प अनुसंधान के

एक क्षेत्र (मेरा मानना ​​है कि एक अनसुलझी समस्या) कुछ असतत घड़ी टिक्स पर world->world कार्यों पुनरावृत्ति के बजाय निरंतर समय का उपयोग करने के लिए होगा।

मैं सूचक/कार्यात्मक दृष्टिकोण की तरह, composability & अर्थ स्पष्टता के लिए: मैं एक बार एक few blog posts on FRP और Conal Elliott निम्नलिखित सोचा उत्तेजक टिप्पणी छोड़ी थी। एक ही कारणों के लिए, मैं सतत समय पसंद करते हैं असतत समय & जगह पर & अंतरिक्ष। इन सभी मामलों में, कम मशीन की तरह तैयार अच्छी तरह से अपने मशीन आधारित प्रस्तुति की कैसे से क्या अलग करती है।

हल करें और आप नायक बनेंगे!

+0

प्लग के लिए धन्यवाद। – Conal

+5

मेरे पास 'दुनिया -> दुनिया' मॉडल के साथ दो मुख्य समस्याएं हैं I सबसे पहले, जब तक कि मैं उलझन में नहीं हूं, वह मॉडल केवल * अनुक्रमिक * संरचना का समर्थन करता है, और * समांतर * संरचना के लिए असभ्य है। कल्पना कीजिए कि आप समानांतर * में दो 'दुनिया-> दुनिया के मूल्यों * को कैसे जोड़ सकते हैं। दूसरा, मैं यह देखने में सक्षम नहीं हूं कि यह संभवतः * निरंतर * समय का समर्थन कैसे कर सकता है।इन दोनों समस्याओं में कंपोज़ेबिलिटी विफल हो गई है, जो लाइब्रेरी डिज़ाइन में मेरे लिए एक महत्वपूर्ण लक्ष्य है। – Conal

संबंधित मुद्दे