प्रोग्रामिंग * में * एक भाषा बनाम रूबी में सी कोड लिखना


10

कोड पूरा कहा गया है कि आप aways कोड होना चाहिए में एक भाषा के रूप में कोड के लिए विरोध में यह। उसी से उनका मतलब है

अपनी प्रोग्रामिंग सोच को केवल उन अवधारणाओं तक सीमित न करें जो आपकी भाषा द्वारा स्वचालित रूप से समर्थित हैं। सर्वश्रेष्ठ प्रोग्रामर सोचते हैं कि वे क्या करना चाहते हैं, और फिर वे मूल्यांकन करते हैं कि उनके निपटान में प्रोग्रामिंग टूल के साथ अपने उद्देश्यों को कैसे पूरा किया जाए। (अध्याय ३४.४)

क्या हाथ में भाषा की विशेष ताकत और कमजोरियों की परवाह किए बिना, वहाँ की हर भाषा में प्रोग्रामिंग की एक शैली का उपयोग करने का नेतृत्व नहीं करता है?

या, प्रश्न को अधिक जवाबदेह प्रारूप में रखने के लिए:

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


5
+1 अच्छा सवाल। मैं इस बिंदु पर आधा दर्जन विभिन्न भाषाओं में पर्ल में लिख सकता हूं।
दान रे

@ डान रे - अजीब! मैं हमेशा पर्ल में सी लिखता हूं।
जेम्स एंडरसन

जवाबों:


7

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

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


1
हास्केल समुदाय भी डोमेन-विशिष्ट भाषाओं को गले लगाता है, और हास्केल प्रोग्रामिंग भाषा उन्हें लागू करने के लिए विशेष रूप से उपयुक्त है।
tdammers

क्या एक दर्जी स्क्रिप्टिंग प्रणाली को लागू करना एक अंतर्निहित भाषा पर आधारित है जैसे कि Lua या Tkl ने लेखन को DSL माना? यदि हां, तो आप उदाहरण के लिए Lua की कमियों से कैसे निपटते हैं?
बस्तीबाई

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

@ दोस्त, हां, हास्केल और स्काला सभी डीएसएल के बारे में हैं। लेकिन मैं फोर्स के गहरे हिस्से से हूं: मेरा पसंदीदा तरीका मेटाप्रोग्रामिंग है। मेरा मानना ​​है कि तदर्थ व्याख्याकार लगभग हमेशा संकलक से हीन होते हैं।
एसके-लॉजिक

2
@tdammers, उच्च क्रम के कार्यों के शीर्ष पर कार्यान्वित एक DSL, व्यावहारिक रूप से, एक तदर्थ दुभाषिया है। आप Haskell सिंटैक्स का विस्तार उसी तरह नहीं कर सकते जैसे आप करेंगे, कहते हैं, लिस्प। टेम्पलेट हास्केल के साथ भी। यह डीएसएल को लागू करने का एक बिल्कुल अलग (और, मैं कहूंगा, एक सीमित) तरीका है। यह कई मामलों में ठीक है, लेकिन किसी भी चीज़ के लिए वास्तव में जटिल यह पूरी तरह से अपठनीय कार्यान्वयन की ओर जाता है, जबकि एक बहु-चरण मेटाप्रोग्रामिंग केवल तुच्छ है, चाहे आपका DSL कितना भी बड़ा और विदेशी क्यों न हो।
एसके-लॉजिक

2

मेरा मानना ​​है कि सही उत्तर, और पुस्तक का एक उद्देश्य है:

व्यक्ति को किसी की भाषा के विवरण के साथ किसी की समस्या को बड़े करीने से समझने की कोशिश करनी चाहिए

किसी भाषा में प्रोग्रामिंग करके, मैंने हमेशा यह मान लिया कि भाषा की सामान्य शैली से बाहर की तकनीकों का उपयोग करना है जहाँ इससे लाभ होगा । यह सभी भाषाओं में एक शैली में लिखने का एक महत्वपूर्ण अंतर है।

उदाहरण के लिए, हास्केल सीखने ने उच्च आदेश कार्यों का उपयोग करते हुए मेरे कौशल में बहुत सुधार किया। अब जब c # में प्रोग्रामिंग की जाती है, तो मैं विभिन्न IEnumerableतरीकों का उपयोग करता हूं जैसे कि Selectअधिक बार, क्योंकि इन विधियों का उपयोग करने से लूप्स के लिए लिखने की तुलना में कोड क्लीनर हो जाता है। मैं भी पास है और कार्यों का उपयोग करने के लिए (यानी Func<int, int>) अधिक बार अपने haskell अनुभव के कारण करते हैं। विरासत का मेरा उपयोग इसके कारण गिरा है, और अधिकांश समय परिणाम सरल कोड है।

हालाँकि, मैं c # में मोनडेस, या बीजीय डेटा प्रकार जैसी अवधारणाओं का उपयोग नहीं करता हूं। इसका कारण यह है कि न तो सी # में स्पष्ट रूप से प्रतिनिधित्व करने योग्य हैं, और बहुत अधिक अस्पष्टता के बदले में थोड़ा लाभ होता है।

इसलिए मैं उन कौशल का उपयोग करने के लिए भाषा का उपयोग करता हूं जो मेरे पास सबसे अच्छा प्रभाव है। मेरा मानना ​​है कि यह भाषा में प्रोग्रामिंग है।


0

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

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

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