क्या भाषा-उन्मुख प्रोग्रामिंग व्यावहारिक है?


12

मैंने इस लेख को भाषा-उन्मुख प्रोग्रामिंग पर पढ़ा । वह प्रोग्रामिंग में आधुनिक प्रक्रियात्मक / ओओपी दृष्टिकोणों में कुछ कमजोरियों को इंगित करता है, और एक नए प्रोग्रामिंग प्रतिमान का सुझाव देता है जो उन्हें हल करेगा

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

लेख को पढ़कर मुझे यह आभास हुआ कि लेखक दो चीजों में से एक को बढ़ावा दे रहा है:

  • आसानी से रचनात्मक स्क्रिप्टिंग भाषाओं की एक भीड़
  • एक, आसानी से एक्स्टेंसिबल भाषा जो प्रोग्रामर की जरूरतों को पूरा करने के लिए खुद को फिर से लिख सकती है

यदि वह दूसरा सुझाव दे रहा है, तो मैं "पहले से ही किया गया है!" और लिस्प को एक उदाहरण के रूप में दें। जैसा कि पॉल ग्राहम सुझाव देते हैं, लगता है कि भाषाएँ लगातार इस ओर बढ़ रही हैं

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


यह निश्चित रूप से एक विशाल दिमाग उड़ाने की क्षमता है।

2
यह मुझे स्पष्ट नहीं है कि यह प्रतिमान क्या समस्या हल करता है। वैसे, LISP एक सफल भाषा का उदाहरण नहीं है।
मौविइल

7
@mouviciel यह पूरी तरह से निर्भर करता है कि आप वास्तव में "सफल" से क्या मतलब है। क्या यह अधिकांश प्रोग्रामर द्वारा उपयोग किया जाता है? नहीं, यह लंबे समय से उपयोग में है? हाँ - 50 साल और गिनती। क्या अधिकांश आधुनिक भाषाओं ने इससे उपयोगी सुविधाओं का एक पूरा ढेर चुरा लिया है? हाँ। (क्या भाषाएँ लिस्प भाषाओं से भी अधिक चोरी कर सकती हैं? हाँ!)
फ्रैंक शीयर

2
व्यापक रूप से इस्तेमाल की जाने वाली भाषा और एक उपयोगी के बीच एक अंतर है। एक भाषा जो नए क्षेत्रों की खोज करती है, आमतौर पर इसका उपयोग नहीं किया जाता है, लेकिन लंबी अवधि में सभी के लिए योगदान दे सकता है। दूसरी ओर, जावा बेकार है, क्योंकि यह तालिका में कुछ भी नया नहीं लाता है (भले ही यह निश्चित रूप से सभी खातों द्वारा एक सफल भाषा है)।
Matthieu एम।

1
मैं इसे लिस्प को मास्टर कोबोल की तुलना में अधिक उपयोगी समझूंगा।
ग्लेनट्रॉन

जवाबों:


8

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

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

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

यह जरूरी नहीं कि फैंसी सिंटैक्स, कंट्रोल स्ट्रक्चर्स, मैसेज-पासिंग या आपके पास क्या हो। यह इस बात पर निर्भर करता है कि यह आवश्यकता को कितनी बारीकी से लागू करता है। कई उपकरण ऐसा करने का दावा करेंगे, लेकिन दावे वास्तविक नहीं हैं। इसे वास्तविक बनाना होगा

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

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

मैं वास्तव में ऐसा नहीं देख रहा हूं। इसके बजाय वे "प्रोग्राम = एल्गोरिदम + डेटा संरचना" में फंस गए हैं, या "संज्ञाएं वर्ग बन जाती हैं और क्रिया पद्धति बन जाती हैं" सोचने की बारी-बारी से क्रैंक मोड। वे विचार डोमेन को कैसे ले सकते हैं और अधिकतम सहमति के लिए उन्हें कैसे पहचानें, इसके संदर्भ में काम नहीं कर रहे हैं।


निश्चित रूप से आप बैंडवागन भाग पर सहमत हैं - "नुकीले बालों वाला मालिक जानता है कि उसे किस भाषा में लिखा जाना चाहिए। [...] जावा।" एक और मुद्दा यह है कि जोएल ने "वास्तुकला अंतरिक्ष यात्री" को क्या कहा। मैं एक दूसरे के एडिटियम (स्प?) पर डीएसएल को स्टैकिंग भी देख सकता था । मुझे लगता है कि यह प्रोग्रामर -> सॉफ्टवेयर इंजीनियर -> कंप्यूटर वैज्ञानिक के लिए नीचे आता है।
माइकल के

और अगर इसे समझने के लिए प्रयास की आवश्यकता नहीं है, तो संभावना है कि यह वास्तव में इसके लायक नहीं है :)
माइकल के

4

यह काफी रूबी दृष्टिकोण है।

  • मूल भाषा को सरल रखें और रत्नों के माध्यम से विस्तार करें
  • बंदर पैचिंग के माध्यम से विशिष्ट डोमेन के लिए रूबी की बोलियां बनाएं। ig रूबी ऑन रेल्स।

मुझे नहीं पता कि यह बेहतर है, लेकिन मुझे लगता है कि यह बहुत व्यावहारिक है।


7
RoR रूबी की एक बोली नहीं है।
बैक

4
@ back2dos: मैं मेटाप्रोग्रामिंग में सोच रहा था। बेशक आतंक विरोधी है नहीं एक अलग प्रोग्रामिंग भाषा। बोली से मेरा तात्पर्य यह है कि यदि रेल के नीचे सब कुछ रूबी है, तो डेवलपर के दृष्टिकोण से वह रूबी को उच्च स्तर पर उपयोग कर रहा है। एक डोमेन। एक बोली। वह विचारों, मॉडलों, नियंत्रकों का उपयोग कर रहा है और वह एक वाक्यविन्यास का उपयोग करके उन्हें प्रोग्रामिंग कर रहा है जो कि एक अलग भाषा, एक बोली बोलने के लिए जैसा दिखता है। रूबी के रूप में एक पटकथा भाषा की सुंदरता इतनी शक्तिशाली है।
Nerian

मुझे लगता है कि वास्तव में अंतर देखना महत्वपूर्ण है। AspectJ जावा की एक बोली है, जबकि AspectR सिर्फ एक रूबी पुस्तकालय है। अंतर वास्तव में भाषा का है। रूबी को यह लचीलापन और अभिव्यक्ति प्रदान करने के लिए डिज़ाइन किया गया था और जावा नहीं था। दोनों को सामान्य प्रयोजन की भाषा माना जा सकता है, अंतर यह है कि रूबी आमतौर पर किसी भी सामान्य उद्देश्य के लिए वास्तविक डीएसएल की आवश्यकता को समाप्त करने के लिए पर्याप्त रूप से अभिव्यंजक है, जबकि जावा नहीं है, भले ही उदाहरण के लिए आप आमतौर पर विचारों, मॉडलों और नियंत्रकों का उपयोग करते हैं।
back2dos

1

LOP दृष्टिकोण अत्यंत व्यावहारिक है। ध्यान रखें कि आपको "स्क्रिप्टिंग भाषाओं" को लागू करने की आवश्यकता नहीं है - पद्धति ईडीएसएल पर भी लागू होती है, और वे आमतौर पर कुशलता से संकलित होती हैं। मैं वस्तुतः अपने सभी विकास कार्यों में इस दृष्टिकोण का उपयोग कर रहा हूं।


मेरी अज्ञानता को क्षमा करें - एक ईडीएसएल एथेर भाषा के लिए एक प्रीप्रोसेसर हो सकता है, है ना?
माइकल के

@ मिसेल, हाँ, इस तरह से ईडीएसएल को लागू करना संभव है, उदाहरण के लिए CamlP4 देखें। लेकिन अधिक बार ईडीएसएल भाषा की अपनी विशेषताओं (जैसे, लिस्प मैक्रोज़, सी ++ टेम्पलेट, आदि) पर बनाया गया है।
एसके-तर्क

1

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

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


आप FoF में जोड़ सकते हैं जिसका उपयोग Barrelfish मल्टी-कर्नेल के लिए ड्राइवर्स को विकसित करने के लिए किया जा रहा है। DSLs को विकसित करने के लिए एक भाषा :)
Matthieu M.

0

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

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