आप क्या चाहते हैं भाषा डिजाइनरों ने ध्यान दिया? [बन्द है]


38

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

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

कृपया पोस्ट न करें:

  • सिंटेक्स फ्लेम युद्ध। आइए इसका सामना करें, हमारी प्राथमिकताएँ हैं, और वाक्य रचना महत्वपूर्ण है क्योंकि यह भाषा के डिजाइन से संबंधित है। मैं सिर्फ emacs बनाम VI की प्रकृति की महाकाव्य लड़ाइयों से बचना चाहता हूं (जो इन दिनों बड़ी संख्या में लोगों को कुछ भी नहीं पता है)।
  • "कोई भी भाषा जिसमें फीचर X नहीं है, वह मौजूद नहीं है" प्रकार की टिप्पणियां। सभी प्रोग्रामिंग भाषाओं के मौजूद होने का कम से कम एक कारण है - अच्छा या बुरा।

कृपया कर पोस्ट:

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

मेरी आशा है कि यह एक मजेदार और उत्तेजक विषय होगा।

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


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

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

जवाबों:


49

डिफ़ॉल्ट रूप से यूनिकोड समर्थन

इस दिन और उम्र, कार्यक्रमों को अंतरराष्ट्रीय स्तर पर उपयोग करने के लिए विकसित किया जा रहा है, या इस धारणा के तहत कि वे अंतरराष्ट्रीय स्तर पर उपयोग किए जा सकते हैं। उन्हें अपने चरित्र सेट के लिए समर्थन प्रदान करना चाहिए या उस भाषा में लिखे गए कार्यक्रमों को बेकार करना चाहिए।


2
+1 वास्तव में, भाषा को आपको अपने पहचानकर्ताओं के लिए किसी भी चरित्र का उपयोग करने की अनुमति देनी चाहिए। हम सभी अंग्रेजी नहीं हैं।
बेरिन लोरिट्श

13
@ बियर: वास्तव में, भले ही मैं फ्रेंच हूं, मैं अंग्रेजी कार्यक्रमों को बहुत पसंद करता हूं। समस्या संचार में से एक है, यदि आप हंगेरियन, स्पैनिश या पुर्तगाली पहचानकर्ताओं के साथ कार्यक्रम लिखते हैं, तो मुझसे अपेक्षा न करें कि मैं कभी भी कूदने में सक्षम नहीं हो सकता ... अंतर्राष्ट्रीयकरण के संदर्भ में यह अत्यंत महत्वपूर्ण है कि डेवलपर्स खुद के बीच संवाद करने में सक्षम हों। , और यह तात्पर्य पहचानकर्ताओं, टिप्पणियों और प्रलेखन के लिए एक सामान्य भाषा का उपयोग करना है। अंग्रेजी डेवलपर्स का लिंगुआ फ्रेंका है।
Matthieu M.

11
मुझे लगता है कि भाषा का उपयोग करते समय यूनिकोड समर्थन स्वाभाविक होना चाहिए। यदि संभव हो, तो इसे "इसमें जोड़ने" के लिए कोई अतिरिक्त प्रयास नहीं करना चाहिए, इसे "बस काम" (जहां उचित हो) करना चाहिए।
RHSeeger 19

4
संबंधित रूप से, भाषा को पाठ (वर्णों के अनुक्रम) और बाइनरी (बाइट्स के अनुक्रम) डेटा के बीच एक मूलभूत अंतर करना चाहिए। सी # के साथ इस सही हो जाता है stringऔर byte[]। जैसा कि पायथन 3.x के साथ strऔर bytes। सी (++) charयह बुरी तरह से गलत हो जाता है।
०४

1
@RHSeeger - वास्तव में !!! यहां तक ​​कि पायथन में भी आपको टाइप करना होगा u'My Unicode Štring'। काश, आप बस यह भूल जाते कि आप किस प्रकार के स्ट्रिंग के साथ काम कर रहे हैं और फ्रिगिन लिखने का कोड।
orokusaki

25

मेरे पास एक जोड़ा है:

  • जेनेरिक्स / टेम्पलेट्स। उदाहरण के लिए, जावा जेनरिक शक्तिशाली हैं, लेकिन जरूरी नहीं कि यह लचीला हो। इसके अलावा, क्योंकि वे प्रकार के क्षरण का उपयोग करते हैं, मैंने उन्हें अमूर्त रूप से लागू करने में समस्याएं देखी हैं, खासकर इंटरफेस में। और संकलक को चेतावनी नहीं दी जानी चाहिए जब एक गैर-विशिष्ट जेनेरिक का उपयोग किया जाता है (जैसे कि Hashmapइसके बजाय Hashmap<String, int>)। मुझे लगता है कि उनमें काफी सुधार किया जा सकता है। अच्छा टेम्प्लेटिंग बहुत उपयोगी है, लेकिन अक्सर उपेक्षित होता है।

  • मानक पुस्तकालय में अच्छी तिथि का समर्थन। मेरा मतलब है कि 1 जनवरी, 1970 से मिलीसेकंड की संख्या से निपटने के लिए तारीखों, घंटों और मिनटों को जोड़ना और घटाना नहीं है।


2
"अच्छी तारीख का समर्थन" हालांकि एक बहुत खड़ी आवश्यकता है! उस समतल का क्या मतलब है? मुझे लगता है कि तारीखें और समय उन चीजों में से एक है जहां आप इसे अच्छी तरह से नहीं प्राप्त कर सकते हैं। या तो आप इसे सरल और गलत बनाते हैं, या आप इसे सही और अस्वाभाविक रूप से जटिल बनाते हैं। यह वास्तव में एक अच्छा मध्यम जमीन हिट मुश्किल है।
सारा

@kai बिंदु यह है कि तिथि समर्थन आमतौर पर बहुत भयानक है। पुराने java.util.Dateमें लगभग सभी संभावित गोच और समस्याएं हैं। मैं केवल नए java.time.*पैकेज का एक हिस्सा जानता हूं , लेकिन यह स्वच्छ, उपयोग करने में आसान और AFAICT बग-मुक्त है। अधिक उन्नत उपयोगकर्ताओं को समस्याएँ मिल सकती हैं, लेकिन यह एक बहुत बड़ा सुधार है। +++ समस्या यह है कि यह एक जटिल समस्या है और पहला संस्करण जल्दी और टूट गया है।
मआर्टिनस

24

कृपया कंप्यूटर सुरक्षा लोगों के लिए अपनी भाषा को विश्लेषण योग्य / श्रव्य बनाएं।

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

जब भाषा या कोर पुस्तकालयों का एक नया संस्करण सामने आता है, तो जो चीज़ें पहले सुरक्षित थीं वे अब नहीं हो सकती हैं:

  1. पुस्तकालय और अधिक शक्तिशाली हो सकते हैं: जैसे URL लाइब्रेरी अब समर्थन करती है javascript:
  2. तार या बाइट्स को कोड में बदलने के लिए नए तरीके हो सकते हैं: उदाहरण के लिए evalया डीरिएरलाइज़ेशन लाइब्रेरी
  3. भाषा प्रतिबिंब तकनीक अधिक शक्तिशाली हो सकती है: जैसे स्थानीय चर को उजागर करना

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

तो, कृपया हमारे बारे में सोचें जब भाषा को डिजाइन और संस्करण करना। नीचे कुछ सुझाव दिए गए हैं:

कुछ आदतों को परिभाषित करें जिन्हें एक कार्यक्रम में विघटित किया जा सकता है।

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

अपनी भाषा को स्थैतिक विश्लेषण के लिए उत्तरदायी बनाएं (भले ही वैधानिक रूप से टाइप न की गई हो)।

सुरक्षा लोक अक्सर पैटर्न का पता लगाने के लिए स्थैतिक विश्लेषण का उपयोग करते हैं, और एक कार्यक्रम के कुछ हिस्सों की कोशिश करने और शासन करने के लिए ताकि वे वास्तव में मुश्किल बिट्स पर ध्यान केंद्रित कर सकें।

यह स्पष्ट होना चाहिए कि कौन से पहचानकर्ता स्थानीय चर हैं और कौन से नहीं हैं।

उदाहरण के लिए, जावास्क्रिप्ट के पुराने संस्करणों के समान गलती न करें, जिससे यह बताना असंभव हो जाता है कि क्या xनीचे में एक स्थानीय चर संदर्भ है (कल्पना के पुराने संस्करण के शाब्दिक पढ़ने के अनुसार):

if (Math.random() > 0.5) {
  Object.prototype.x = 0;
}

function f() {
  var x = 1;
  (function () {
    alert(x);  // Might alert 0, might alert 1.
  })();
}

डीकोप्रोजेबल सुरक्षा के लिए अनुमति दें

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

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

समाचारपत्र जैसी कुछ भाषाएं एक वस्तु क्षमताओं वाले मॉडल का उपयोग करती हैं। यह कमाल है और डिकोमात्मक सुरक्षा प्राप्त करने का एक शानदार तरीका है।

लेकिन अगर आप ऐसा नहीं कर सकते हैं, तो मॉड्यूल ग्राफ को सांख्यिकीय रूप से विश्लेषण योग्य बनाने से आपको काफी लाभ मिल सकता है। अगर मैं यह साबित कर सकता हूं कि एक मॉड्यूल फ़ाइल I / O मॉड्यूल (टीसीबी में एक मॉड्यूल में कॉलिंग कोड को छोड़कर) तक नहीं पहुंच सकता है, तो मैं उस मॉड्यूल से समस्याओं के पूरे वर्गों को नियंत्रित कर सकता हूं।

एम्बेडेड स्क्रिप्टिंग भाषाओं के अधिकार को सीमित करें

बहुत सारी उपयोगी प्रणालियों को एक स्थिर कोर के रूप में व्यवस्थित किया जाता है जो गतिशील (यहां तक ​​कि कार्यात्मक) भाषाओं में लिखे गए बहुत सारे कोड को मारता है।

और स्क्रिप्टिंग भाषाओं को एम्बेड करना एक प्रणाली को और अधिक एक्स्टेंसिबल बना सकता है।

लेकिन एक स्क्रिप्टिंग भाषा में VM का पूर्ण अधिकार नहीं होना चाहिए।

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

evalएक स्क्रिप्टिंग भाषा के रूप में खुद को एम्बेड करने वाली भाषा के रूप में व्यवहार करें

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

एक सरल संगामिति मॉडल का उपयोग करें

जब कोई सुरक्षा संपत्ति बनी रहती है तो हम यह जानने की कोशिश करते हैं कि दौड़ की स्थितियों के बारे में चिंता करने के लिए हम सुरक्षा लोगों को पसंद नहीं करते।

कृपया थ्रेड पर बसने से पहले लगभग असंभव-से-सुरक्षित डिफ़ॉल्ट विकल्प के रूप में थ्रेडिंग के विकल्पों पर विचार करें।

ई।, वेरिलॉग और जावास्क्रिप्ट में पाया गया है कि एक साधारण एक घटना लूप कंसर्ट है।

भ्रम की स्थिति को प्रोत्साहित न करें

कुछ भाषाएँ गोंद भाषाएँ हैं, और वे बहुत से अलग-अलग भाषाओं में तार के साथ काम करती हैं।

उदाहरण के लिए, जावास्क्रिप्ट अक्सर HTML, CSS, XML, JSON और यहां तक ​​कि जावास्क्रिप्ट के तार भी रचना करता है। प्रोग्रामर के लिए यह याद रखना बहुत मुश्किल है कि जब वे अन्य भाषाओं में तार बनाने के लिए संयोजन करते हैं, तो सादे टेक्स्ट स्ट्रिंग्स को अच्छी तरह से एनकोड करें, इसलिए जेएस प्रोग्राम, अनजाने में, भ्रम की समस्याओं के सभी प्रकार के उद्धरण हैं: XSS सबसे खराब।

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


सुंदर टूट।
Qix

23

कुछ सर्वश्रेष्ठ भाषाओं को उन लोगों द्वारा डिज़ाइन किया गया था जो अपने लिए एक भाषा बनाना चाहते थे।

इसलिए मुझे लगता है कि भाषा डिजाइनरों को अपने उपयोगकर्ताओं पर कम ध्यान देना चाहिए। आप सभी को खुश नहीं कर सकते, न ही आपको प्रयास करना चाहिए।


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

5
@Berin: मुझे नहीं लगता कि बात यह है कि आपको अपने उपयोगकर्ताओं को कभी भी नहीं सुनना चाहिए , लेकिन उन उपयोगकर्ताओं को न सुनें जो भाषा का उपयोग उस चीज़ के लिए करना चाहते हैं जिसे वह करने के लिए डिज़ाइन नहीं किया गया था। यदि आपने किसी विशिष्ट सेट या समस्याओं को हल करने के लिए एक भाषा डिज़ाइन की है, तो आपको उन उपयोगकर्ताओं को पूरा करना चाहिए जिन्हें उन समस्याओं को हल करने की आवश्यकता है। हालाँकि, आप चरम को संबोधित करते हैं और कभी-कभी एक भाषा नए डोमेन में एक आला पा सकते हैं, इसलिए +1।
जेरेमी हेइलर

2
@ जेरेमी, हाँ, ठीक यही बात मैं कह रहा हूँ, लेकिन मुझे लगता है कि यह एक भाषा के लिए एक डोमेन में अच्छी तरह से काम करने के लिए असामान्य है जिसे इसके लिए डिज़ाइन नहीं किया गया था।
dan_waterworth

@dan_waterworth: सफल भाषाएं आमतौर पर उन डोमेन में काम करती हैं, जो अक्सर अच्छी तरह से काम करते हैं।
डेविड थॉर्नले

8
इसके बजाय "उपयोगकर्ताओं की बात न सुनें", सलाह बेहतर है क्योंकि "उन उपयोगकर्ताओं को न सुनें जो आपके पास नहीं हैं"।
क्रिसकॉक 20

16

केवल 5-10% समय वास्तव में कोड लिखने में व्यतीत होता है। भाषा डिजाइनरों को वास्तव में सॉफ़्टवेयर कार्य करने की कठिनाइयों पर ध्यान देना चाहिए, जिसका अर्थ है त्रुटियों और बगों को ठीक करना।

इसका मतलब है कि वहाँ से जाना चाहिए एक अच्छा डिबगर जाओ। आर्कन सिंटैक्स और कुंजी कमांड के साथ कुछ टूल नहीं जो केवल प्रिंट स्टेटमेंट के टन से थोड़ा बेहतर है।


2
+1। डिबगिंग उन स्थानों में से एक है जहां कुछ भाषाएं दूसरों की तुलना में बेहतर हैं - और कुछ आईडीई एक प्रयोग करने योग्य भाषा और आपके रास्ते में आने वाले सभी के बीच अंतर करते हैं।
बेरिन लोरिट्श

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

1
सिर्फ डिबगिंग ही नहीं, बल्कि बग्स लिखना भी मुश्किल है। मुझे बहुत खुशी हुई जब जावा ने सरणियों पर स्वचालित सीमा-जाँच शुरू की ... लेकिन यहाँ हम 15 साल बाद भी, दूसरी भाषाओं में उन गलतियों को कर रहे हैं।
एलेक्स फ़ेमैन

3
क्या ऐसी भाषा का होना बेहतर नहीं होगा जो संकलन के समय बग्स को ढूंढती है? उदाहरण के लिए जब मैं एडा का उपयोग करता हूं तो डिबगर में काफी कम समय बिताता हूं तब जब मैं सी या सी ++ का उपयोग करता हूं।
मार्टिन

12

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

दार्शनिक विचारों के लिए जो वहां प्रासंगिक हैं, ये पायथन के ज़ेन से सबसे महत्वपूर्ण हैं:

  • निहितार्थ की तुलना में स्पष्ट है।
  • पठनीयता मायने रखती है।
  • नियमों को तोड़ने के लिए विशेष मामले पर्याप्त नहीं हैं।
  • यद्यपि व्यावहारिकता शुद्धता को हरा देती है।
  • वहाँ एक होना चाहिए - और अधिमानतः इसे करने के लिए केवल एक ही - स्पष्ट तरीका।
  • यदि कार्यान्वयन को समझाना कठिन है, तो यह एक बुरा विचार है।
  • नाम स्थान एक महान विचार का सम्मान कर रहे हैं - चलो उन में से अधिक करते हैं!

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

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


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

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

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

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

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

11

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

अधिक सामान्य अर्थ में, यह मेटाप्रोग्रामिंग है ... लेकिन मैं इसका इस्तेमाल नए नियंत्रण संरचनाओं के निर्माण के लिए करता हूं।


दिलचस्प। अच्छा मेटा प्रोग्रामिंग समर्थन सही होने के लिए मुश्किल हो सकता है, लेकिन जब यह बहुत शक्तिशाली होता है। मैंने ऐसे लोगों से सुना है जो लिस्प को पसंद करते हैं कि लिस्प का कार्यान्वयन सबसे अच्छा है - लेकिन वे कहते हैं कि लिस्प में सब कुछ के बारे में। क्या आपको लगता है कि मेटा प्रोग्रामिंग का कोई भी उदाहरण सही किया गया है?
बेरिन लोरिट्श

"मेटाप्रोग्रामिंग सही किया गया" वह हो गया है जहाँ यह सही करने के लिए सरल है (अच्छी तरह से, उचित सरल गतिविधि के लिए) और जहां अंतिम परिणाम भाषा का एक स्वाभाविक हिस्सा लगता है।
डोनल फेलो

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

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

10

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

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

  1. सिद्ध है कि यह वास्तव में आवश्यक है।
  2. साबित करें कि यह एक पुस्तकालय में नहीं किया जा सकता है।
  3. साबित करें कि यह भाषा में है।

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

1
मुझे मेरे पसंदीदा सी ++ उद्धरण की याद दिलाता है ... एक ऑक्टोपस एक कुत्ते पर अतिरिक्त पैर लगाकर।
ओसोडो

4
साबित करें कि यह एक पुस्तकालय में नहीं किया जा सकता है । +1
Qix

2
मुझे लाइब्रेरी tidbit पसंद है। यह अच्छा है कि हैस्केल जैसी भाषाओं में लूप, अपवाद या निरंतरता जैसे अंतर्निर्मित नियंत्रणप्रवाह सामान नहीं हैं। वे भाषा के भीतर परिभाषित करने के लिए वास्तव में सरल हैं, वाक्यविन्यास को वास्तव में साफ रखते हुए और चतुर भाषा सुविधाओं का एक गुच्छा बनाने में विलुप्तता और व्यावहारिकता को बढ़ावा देते हैं।
सारा

10

एक महान प्रश्न के लिए धन्यवाद। आपको कुछ बहुत अच्छे जवाब मिल रहे हैं।

आपकी आंखों पर चमक नहीं है, लेकिन मैं एक प्रोग्रामर को एक सूचना चैनल के रूप में देखता हूं। विचार / अवधारणाएं / आवश्यकताएं एक छोर पर जाती हैं, और कोड दूसरे से बाहर आता है।

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

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

मुझे सिर्फ एक उदाहरण देना है कि मेरा क्या मतलब है। लचीला संवाद उपयोगकर्ता इंटरफ़ेस बनाने की समस्या के लिए, यह तकनीक ईवेंट-हैंडलर, डेटा-मूविंग, अधिकांश सामान जो आमतौर पर UI में किया जाता है, को लिखना समाप्त कर देता है। यह भी परिमाण के एक आदेश के बारे में स्रोत कोड में कमी का परिणाम है। मेटा-भाषा वास्तव में C / C ++ / Lisp में कुछ रूटीन और मैक्रोज़ है, और मैंने इसे मैक्रोज़ के बिना भाषाओं में भी किया है।

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


9

पास्कल और एडा में बंधे और अलग-अलग इंटेगर प्रकार। ईमानदारी से: कितनी बार आपको किसी पूर्णांक की पूरी श्रृंखला की आवश्यकता होती है? मुझे लगता है कि वास्तविक दुनिया का बेहतर प्रतिनिधित्व करने के लिए आदिम प्रकारों में बहुत सुधार किया जाना है।


2
बद्ध पूर्णांक प्रकार ala C, C ++, D, Java, C #, इत्यादि का स्थान सुनिश्चित है। कुछ प्रकार की प्रोग्रामिंग परवाह नहीं करती है और केवल पूर्णांक बनाम फ्लोटिंग पॉइंट के भेद की आवश्यकता होती है। फिर भी, शायद हमें केवल एक नंबर प्रकार की आवश्यकता है और बाद में संख्या के अभिन्न अंग के बारे में चिंता है? संक्षेप में, व्यावसायिक प्रोग्रामिंग विशिष्ट पूर्णांक प्रकार के प्रति कम संवेदनशील है, क्योंकि यह इस तथ्य से है कि एक संख्या पूर्णांक है। जब आप एक प्रोटोकॉल को निम्न स्तर पर लागू कर रहे हैं तो नियम काफी बदल जाते हैं।
बेरिन लोरिट्श

2
मैंने सोचा कि एडा में टाइप कहां होते हैं, जहां आप सिर्फ type Date_Of_Month is 1 .. 31;16 कह सकते हैं और ऑप्टिमाइज़र के लिए 16 या 32 बिट जैसे फैसले छोड़ सकते हैं । लेकिन अधिक महत्वपूर्ण बात यह है कि 32 या 0 या -5 टाइप के एक वैरिएबल को असाइन करना आपको ए RANGE_ERROR
मार्टिन

रंग ऐसी चीजों के लिए अच्छी तरह से काम करते हैं Date_Of_Month(या Month_Of_Year) जहां उपयोग करने के लिए एक स्पष्ट सीमा होती है, लेकिन कई - शायद अधिकांश - मामले फजी हैं। type Persons_Age is 0..120? अगर कोई दीर्घायु रिकॉर्ड तोड़ता है तो क्या होगा? type Year is 0..9999? यदि आप एक मिस्र के विशेषज्ञ हैं तो क्या होगा?
dan04

यदि आप एक मिस्र के विशेषज्ञ हैं, तो आप बेखबर हैं type Egyptian_Year is -9999 .. 300;। मेरे अनुभव में आप ज्यादातर समय पूर्णांक के लिए उपयोगी सीमाएं पा सकते हैं। इस संबंध में आपको विचार करना चाहिए कि type Scrolls_Found is array Egyptian_Year of Natural;आपके पास सरणी इंडेक्स के रूप में एक अनबाउंड प्रकार नहीं हो सकता है / नहीं होना चाहिए। यह हैकर के लिए सिर्फ एक हमला वेक्टर है। BTW: Ada रन समय पर गणना करने के लिए सीमा सीमा की अनुमति देता है।
मार्टिन

1
@kai किसी ने भी नहीं कहा कि इस प्रकार के सिस्टम की विशेष सुविधा का हर जगह पर बिना किसी अपवाद के उपयोग किया जाना चाहिए। मुझे यकीन है कि Ada भी "नियमित" संख्यात्मक प्रकारों का उपयोग करने की अनुमति देता है। और बंधे हुए संख्यात्मक प्रकार निश्चित रूप से कुछ (बल्कि आम) समस्याओं के लिए उपयोगी होते हैं ।
सर्ज बोर्स्च

8

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


8

नामकरण परंपराएँ (मैं आपको PHP देख रहा हूँ)


एक भाषा डिजाइन मुद्दे की कम, यद्यपि। ज़रूर, आपको हमेशा मानक पुस्तकालय में प्रवेश करने वाले लोगों पर नज़र रखना होगा, लेकिन भाषा डिजाइनर नामकरण परंपराओं को लागू नहीं कर सकते हैं;)

3
आप मानक पुस्तकालय के लिए कर सकते हैं।
मालफिस्ट

3
PHP का भी उल्लेख न करें। सबसे खराब आमतौर पर इस्तेमाल की जाने वाली भाषा। एक कंप्यूटर वैज्ञानिक द्वारा डिज़ाइन नहीं किया गया था, बस एक आदमी जो टेम्पलेट चाहता था, और स्टेरॉयड जोड़े गए थे।
कीयो

@ डायलेन: कुछ भाषाओं, जैसे मर्करी या एफिल, नामकरण परंपराओं को लागू करते हैं (सभी पूंजी वर्ग के नाम, एक पूंजी के साथ शुरू होने वाले चर, आदि) और वे संकलक द्वारा लागू किए जाते हैं। फोरट्रान ने कहा कि i, j, k से शुरू होने वाले चर पूर्णांक हैं (इसलिए अधिकांश भाषाओं में लूप चर के रूप में पारंपरिक उपयोग ...)। और इसी तरह। किसी तरह यदि आप सम्मेलन को पसंद नहीं करते हैं, लेकिन स्रोत कोड की निरंतरता के लिए अच्छा है, तो कम से कम कष्टप्रद।
फीलो

@PhiLho: हालांकि यह बहुत सीमित है। इसे लागू नहीं किया जा सकता - केवल एक उदाहरण - सुसंगत, सार्थक (मानव पाठकों के लिए) पूंजीकरण या अंडरस्कोर का उपयोग (यह कोशिश कर सकता है लेकिन प्रक्रिया में प्रोग्रामर की पवित्रता को जोखिम में डालेगा)।

7

विकास के वातावरण के साथ प्रथम श्रेणी का एकीकरण।

आजकल, समृद्ध वातावरण में कोडिंग की जाती है। HTML / CSS / JS के लिए, हमारे पास Firebug और अन्य इंटरेक्टिव टूल हैं। जावा, ग्रहण और आईडीईए और अन्य सच्चे आईडीई के लिए। इत्यादि। उपकरणों की एक पारिस्थितिकी है, संपादक के साथ शुरू होती है, लेकिन वहां समाप्त नहीं होती है:

  • फाइलों के भीतर और भीतर कोड का संगठन
  • स्मार्ट हाइलाइटिंग
  • स्मार्ट पूरा होने / भविष्य कहनेवाला टाइपिंग
  • स्टेटिक डिबगिंग (झंडे के सिंटैक्स, सिमेंटिक और शैलीगत त्रुटियां)
  • टेम्पलेट्स और मैक्रोज़ का निर्माण और उपयोग
  • संस्करण नियंत्रण (संस्करणकरण, विलय, शाखा, ...)
  • कई लेखकों के साथ वितरित विकास (टिप्पणियाँ, इनलाइन डॉक्टर, एनोटेशन, ...)
  • रन-टाइम डिबगिंग (स्टैक के निशान, स्टेपिंग, घड़ियाँ, ...)
  • इंटरएक्टिव "लाइव" डिबगिंग (जैसे फायरबग - लाइव सिस्टम का संपादन व्यवहार)
  • ... मुझे यह भी नहीं पता कि आगे क्या है।

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

लेकिन ज्यादातर यह सामान को हैक कर लिया जाता है, जैसे कि $ आईडी $ का उपयोग एक टिप्पणी में ताकि सीवीएस-नियंत्रित स्रोत में एक संस्करण संख्या हो सके। मैं भाषा से ही ऐसा कुछ क्यों नहीं कर सकता?


आपके लिए ASIS (ISO / IEC 15291: 1999 "Ada Semantics Interface Specification") जैसा कुछ है? एएसआईएस आपके इच्छित सभी को कवर नहीं करता है लेकिन काफी कुछ है। मैं अक्सर अन्य प्रोग्रामिंग भाषाओं के लिए एएसआईएस जैसी चीज की कामना करता हूं। देखें sigada.org/wg/asiswg जानकारी के लिए।
मार्टिन

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

6

वितरित संगणना

मुफ्त का लंच खत्म हो गया है। आज एक प्रोग्राम की आवश्यकता है जो कई कोर / मल्टीपल प्रोसेसर (और विशेष परिस्थितियों में कई कंप्यूटर) पर चलता है।

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

सी ++ 0x भविष्य का उपयोग निश्चित रूप से दिलचस्प है, सभी के लिए यह एक पुस्तकालय के रूप में लाया जाता है और आपको वास्तविक सिंक्रनाइज़ेशन मुद्दों से मुक्त नहीं करता है (आप जानते हैं, जो बस हल करने के लिए बहुत आसान हैं ...)

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

मुझे लगता है कि कार्यात्मक भाषाओं की तरह, डेटा की अपरिवर्तनीयता का पक्ष लेने वाली भाषाओं को इसका अधिकार हो सकता है (हालांकि मुझे वहां अनुभव पसंद है)।

साथ ही, अभिनेता मॉडल हमारा अगला लक्ष्य हो सकता है। यह वितरित कंप्यूटिंग के लिए भी था।


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

@Berin: आप सही कह रहे हैं, भले ही मैंने संदेश में एर्लैंग का उल्लेख नहीं किया है क्योंकि मैं इसके बारे में बहुत कम जानता हूं, यह मुझे सही ढंग से याद है कि यह अभिनेता मॉडल को लागू करता है।
Matthieu M.

6

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


JavaDoc, CppDoc, RubyDoc, आदि मानक पुस्तकालयों, साथ ही आपके द्वारा बनाए गए पुस्तकालयों को समझने में एक बड़ी संपत्ति रहे हैं। वे सभी समान नहीं बनाए गए हैं और कुछ दूसरों की तुलना में नेविगेट करना आसान है।
बेरिन लोरिट्श

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

6

संकलक को आपके कोड की जांच करने में मदद करने की अधिक क्षमता।

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

ईजी मैं एक समारोह हो सकता है

f(int x)

लेकिन मैं पसंद करूंगा

f(int range[-5..25] x)

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


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

3
आपको पास्कल का उपयोग करना चाहिए। आप एक प्रकार को परिभाषित कर सकते हैं, जो संख्याओं की एक मनमानी श्रेणी को कवर करता है, जैसे कि -5..25, जिसे कंपाइलर संकलन-समय पर सत्यापित कर सकता है। (जब तक आप केवल स्थिरांक प्रदान कर रहे हैं, निश्चित रूप से।)
मेसन व्हीलर

1
@Kugel: एक कंपाइलर फीचर के अलावा और क्या है? और यूनिट परीक्षण उत्पादन में कोड की जांच नहीं करेगा। और उत्पादन में जाँच नहीं करना पहली यात्रा के बाद जीवित नावों को उतारने जैसा है। ईंधन बचाने और जहाज को तेज करने के लिए।
मार्टिन

1
मैं एडा का उपयोग करूंगा, सिवाय इसके कि मैं जिस प्लेटफॉर्म पर काम कर रहा हूं, उसमें एडीए कंपाइलर नहीं है। इसमें केवल C कंपाइलर है, इसलिए यह सब वैसे भी एकेडमिक है।
राकेटमग्नेट

1
मैं पहले से ही बहुत सारे ऐशट्रे का उपयोग करता हूं, लेकिन भाषा सुविधाओं के रूप में यह और अन्य चीजें होना बेहतर होगा।
राकेटमग्नेट

5

संभव के रूप में कुछ कीवर्ड के साथ छोटे वाक्यविन्यास क्योंकि क्रिया सिंटैक्स सीखना मुश्किल है और पठनीयता में मदद नहीं करता है।

सबसे खराब उदाहरण Ada:

procedure Hello is
begin
  Put_Line("Hello World!");
end Hello;

भराव शब्द, जैसे, .. प्रोग्रामिंग भाषाओं के लिए कोई मतलब नहीं है।


4
मुझे लगता है कि सबसे खराब उदाहरण वे भाषाएँ हैं जहाँ आप कहते हैं public static void
जॉय एडम्स 18

1
Idea नया नहीं है और पहले से ही SmallTalk के रूप में लागू है जिसमें कोई भी कीवर्ड नहीं है। इसलिए आपको अपने दावे के लिए SmallTalk का सकारात्मक उदाहरण के रूप में उपयोग करना चाहिए। BTW: यदि आप नहीं जानते कि आपके लिए क्या ISहै, तो आप Ada को समझ नहीं पाए हैं (क्या आपने कभी Ada प्रोग्राम किया है?): ISस्थानीय चर की घोषणा से प्रक्रिया की घोषणा को अलग करता है और कार्यान्वयन से एक विनिर्देश भी अलग करता है। निश्चित रूप से आप केवल तभी ध्यान देंगे जब विनिर्देश और किसी फ़ंक्शन के कार्यान्वयन की तुलना करते हुए यह देखने के लिए कि ISसही अर्थ है और बिल्कुल भी भराव नहीं है।
मार्टिन

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

7
भराव शब्द वास्तव में एक उद्देश्य की सेवा कर सकते हैं यदि वे वाक्यविन्यास को तोड़ने में मदद करते हैं। उदाहरण के लिए, मैं बहुत पसंद करते हैं if x then …करने के लिए if (x) …। हमने एक प्रासंगिक कीवर्ड के लिए कोष्ठक की एक जोड़ी का व्यापार किया है। यह समझ में आता है क्योंकि स्थिति xअपने स्वयं के कोष्ठकों के साथ एक जटिल अभिव्यक्ति हो सकती है। सबसे बाहरी जोड़ी को खत्म करने से पठनीयता बढ़ सकती है। पाठ्यक्रम का एक विकल्प यहां एक बृहदान्त्र का उपयोग करना है, जैसे कि पायथन में। वास्तव में, मेरा मानना ​​है कि इस तरह के सबसे भ्रामक भराव को कॉलोन द्वारा प्रतिस्थापित किया जा सकता है। निश्चित नहीं है कि मुझे कौन सी विधि पसंद है।
कोनराड रुडोल्फ

3
@ कोनराड: यदि यह सिंटैक्स को खंडित करता है, तो यह भराव नहीं है। is है एक पूरक क्योंकि एडीए सकता है की अनुमति दी है procedure Hello begin ... endकोई अस्पष्टता के साथ।
dan04

4

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

मेरे लिए, हास्केल इसका एक बड़ा उदाहरण है कि "भाषा सीखने" से मेरा क्या मतलब है (हालांकि यह वर्षों में लोकप्रियता और सामान्य उपयोगिता में बढ़ी है)। परिचित सी वाक्यविन्यास को त्यागकर और पीछे की रचना रचना संचालकों (जैसे (+2) . (*3)एक ऐसा कार्य है जो 3 से गुणा करता है, फिर 2 जोड़ता है), हास्केल ने मुझे छोटे कार्यों को लिखना सिखाया। इसके निर्मम टाइप चेकर ने मुझे तेजी से भाषा सीखने में मदद की और कोड के बारे में तार्किक रूप से सोचने की मेरी क्षमता में सुधार किया। इन दोनों लाभों ने अन्य भाषाओं, यहां तक ​​कि विधानसभा तक फैला दिया है।

भाषा सीखने के लक्ष्य और सामान्य प्रयोजन की भाषाएं अक्सर संघर्ष में होती हैं। एक सीखने की भाषा सीखने के लिए चुनौतीपूर्ण और पुरस्कृत होनी चाहिए, और एक विशेष शैली को लागू करना चाहिए, भले ही वह शैली कई अनुप्रयोगों के लिए सबसे अच्छी न हो। सामान्‍य कार्य करने के लिए एक सामान्‍य प्रयोजन की भाषा अच्‍छी होनी चाहिए, और सार का उपयोग सावधानी से और "समझदारी" से किया जाना चाहिए। उदाहरण के लिए, किसी वेबसाइट को ठीक करते समय, मोनडर्स के बारे में सीखना प्रोग्रामर के दिमाग की आखिरी चीज होगी। सिक्के के दूसरी तरफ, जब कोई प्रोग्राम करना सीख रहा होता है, तो उन्हें "सार्वजनिक स्टेटिक शून्य" बकवास के माध्यम से उतारा नहीं जाना चाहिए, अगर वे अभी तक कार्यों के बारे में नहीं सीखे हैं।

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


2
हास्केल की फंक्शन रचना किसी भी तरह से पिछड़ी हुई कैसे है? इसका सीधा अनुवाद है (f ∘ g)(x) = f(g(x))
जॉन पर्पडी

@Jon Purdy: इसका मतलब है कि आपको कार्यों को उनके आवेदन के विपरीत क्रम में लिखना होगा। दोनों रूपों में, gपहले तर्क पर लागू होता है, उसके बाद f। यदि आप किसी सूची को क्रमबद्ध करना चाहते हैं, तो उसे समूहबद्ध करें, और उन सूचियों में से पहला आइटम प्राप्त करें, आप लिखेंगे (map head . group . sort) listया map head $ group $ sort listया map head (group (sort list))। सभी मामलों में, आप संचालन को पीछे की ओर लिखते हैं। वैसे, आयात करने Control.Arrowसे आप कह सकते हैं (sort >>> group >>> map head) list, लेकिन >>>ऑपरेटर मुझे अजीब लगता है और मुझसे क्रिया करता है।
जॉय एडम्स

2
मुझे पता नहीं, मुझे अभी भी लगता है कि दाएं-बाएं एक समझ में आता है। (map head . group . sort) list"एक प्रकार के प्रत्येक समूह का पहला आइटम" के रूप में पढ़ता है list, जो काफी स्वाभाविक है - और, मेरे कान के लिए, की तुलना में अधिक कार्यात्मक है (sort >>> group >>> map head) list, जो बल्कि अनिवार्य और पिछड़े रूप में पढ़ता है जैसे "फिर समूह फिर प्रत्येक समूह का पहला आइटम लेते हैं। .. list”।
जॉन प्यूरी

@JoeyAdams - ऑपरेटर दिखता है बल्कि अजीब और वर्बोज़ - कुछ और हाल ही में कार्यात्मक भाषाओं का उपयोग शुरू कर दिया है एक बाएँ-से-सही श्रृंखलन ऑपरेटर, जो शायद एक छोटे से आंखों पर आसान है के रूप में ...>>>|>
जूल्स

4

चूंकि हम 2011 में हैं,

  • एक पूरी तरह से विनिर्देश। कोई आर्किटैक्ट्योर-डिपेंडेंट छेद सी की तरह नहीं
  • बहुपरत समर्थन; न सिर्फ सिंक्रोनाइज़ेशन फीचर्स (ताले), बल्कि लैंग्वेज फीचर्स जो लूप लिखने के साथ मल्टीथ्रेडिंग को आसान बनाते हैं:

    सभी (ओ मायक्लेक्शन में) {o.someMethod ()}

  • बहु प्रतिमान; मुझे, प्रोग्रामर को, तय करने दें कि क्या मैं केस-बाय-बेस बेस पर स्थिर भाषा की या डायनेमिक भाषा की थकाऊता की सुरक्षा चाहता हूं; मुझे ऑब्जेक्ट ओरिएंटेड फीचर्स, फंक्शनल फीचर्स आदि दें।

  • स्थिरता (मुझे पता है कि यह स्थिरता और बहु-प्रतिमान दोनों के लिए थोड़ा पूछ रहा है ...)


मैं एक पूर्ण विनिर्देशन के लिए 100% आपके साथ हूं। बहु-प्रतिमान और संगति निश्चित रूप से एक संतुलनकारी कार्य होगा। आप एक गतिशील प्रतिमान के लिए स्थैतिक जाँच के लिए व्यवहारों के सबसेट के रूप में व्यवहार का एक सेट निर्दिष्ट कर सकते हैं - लेकिन मुझे लगता है कि ये दोनों दृष्टिकोण खुद को बहुत अलग प्रोग्रामिंग शैलियों के लिए उधार दे सकते हैं। वे वास्तव में उस बिंदु पर अलग-अलग भाषाएं हैं। शायद 100% संगतता के साथ सुसंगत भाषाओं की एक जोड़ी वह होगी जो आप खोज रहे हैं?
बेरिन लोरिट्श

स्काला (और शायद हास्केल; मैं इसे पर्याप्त नहीं जानता) जैसी भाषाओं में मजबूत स्थैतिक प्रकार की प्रणाली और मरोड़ है, इसके लिए धन्यवाद, निष्कर्ष और निहितार्थ टाइप करें।
फीलो

2
आर्किटेक्चर पर निर्भर विशेषताएं तब ठीक होती हैं जब कोई भाषा प्रोग्रामर को यह निर्दिष्ट करने देती है कि क्या महत्वपूर्ण है या नहीं। सी भयानक बनाता है कि "संख्यात्मक प्रकार जो 65536 रैपिड्स" को घोषित करने का कोई तरीका नहीं है; भले ही कोई प्लेटफ़ॉर्म uint16_t लागू करता है, मानक के लिए यह आवश्यक है कि कुछ कार्यान्वयन दो uint16_tमानों के बीच अंतर को हस्ताक्षरित के रूप में मानते हैं, और दूसरों को अंतर के रूप में भिन्न मानते हैं; यह प्रोग्रामर के लिए यह निर्दिष्ट करने का कोई तरीका प्रदान नहीं करता है कि कौन सा व्यवहार वांछित है।
सुपरकैट

मैं मल्टीपरैडिम के लिए असहमत हूं; कि स्टाइल की लड़ाइयों को कोड करने के लिए बहुत अधिक झालर वाले कमरे को छोड़ देता है। लाइब्रेरी ए को गतिशील प्रतिमानों के एक समूह के साथ लिखा गया है । लाइब्रेरी बी को स्थिर प्रतिमानों के एक समूह के साथ लिखा गया है । खैर, अब लाइब्रेरी ए को लाइब्रेरी बी से बात करने की जरूरत है; बीच का मैदान कहाँ है? यदि आपको समान भाषा में कोड के दो टुकड़ों के बीच गोंद लिखना है, तो भाषा स्वाभाविक रूप से IMO त्रुटिपूर्ण है।
Qix

3

हल्के प्रक्रियाओं

मैं एरलांग में लाइटवेट प्रक्रियाएँ करना चाहूंगा। यह मुख्य रूप से रनटाइम के लिए एक समस्या है। यह JVM और .NET CLR में गायब है। LWP बड़े पैमाने पर समवर्ती सॉफ्टवेयर बनाने में मदद करता है। आदर्श रूप में एक प्रक्रिया बनाने के लिए अधिक महंगा नहीं होना चाहिए क्योंकि यह किसी भाषा में एक वस्तु बनाने के लिए है। मैं अपने अनुप्रयोगों में लाखों प्रक्रियाएँ बनाना चाहूंगा।

इसे प्रीमेच्युलर शेड्यूलिंग के साथ थ्रेड-पूल के रूप में लागू किया गया है, इसलिए एक भी कार्य अन्य कार्य को ब्लॉक नहीं करता है, और उपलब्ध किसी भी सीपीयू-कोर पर कार्यों को निर्धारित किया जा सकता है।

पूंछ-पुनरावृत्ति के लिए समर्थन

मैं पूंछ-पुनरावृत्ति के लिए समर्थन करना चाहूंगा। यह रनटाइम पर्यावरण के लिए भी एक समस्या हो सकती है। उदाहरण के लिए JVM के पास री-रिकर्सशन के लिए समर्थन नहीं है।

आसान वितरित प्रोग्रामिंग

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



स्काला में पूंछ पुनरावृत्ति होती है और इसे जेवीएम में संकलित किया जाता है। आईबीएम जावा संकलक भी पूंछ पुनरावृत्ति कर सकता है - कभी-कभी।
मार्टिन

3

मेटाप्रोग्रामिंग की सुविधा।

विशेष रूपों को सीमित करें

पायथन में कोई अच्छा कारण नहीं है कि इसे एक बिल्टइन फ़ंक्शन नहीं प्रिंट करें। यह दिखता है और एक कार्य की तरह कार्य करता है सिवाय इसके कि कुछ भी नहीं करना चाहते हैं।

क्या हम वास्तव में जरूरत है for, foreach, whileऔर अपने स्वयं के विशेष फार्म के रूप में प्रत्येक की तरह। कैसे एक लूपिंग निर्माण और कुछ डिफ़ॉल्ट मैक्रो वैरिएंट लूपिंग रूपों की सिंटैक्टिक चीनी प्रदान करने के लिए।

विशेष रूपों के लिए मेटा-प्रोग्रामिंग

form['if'](test-fn, body-fn)


रूबी के पास लूपिंग के लिए "विशेष रूप" हैं, कम से कम इस अर्थ में कि चलने योग्य वस्तुओं में आमतौर पर एक विधि eachहोती है जो तर्क के रूप में कोड का एक ब्लॉक लेती है। (रूबी के पास भी हैं forऔर whileलूप्स हैं, लेकिन कोई भी स्वाभिमानी रूबी प्रोग्रामर वास्तव में उनका उपयोग नहीं करता है।)
मिपाडी

@ मिपाडी: मैं रूबी ब्लॉक और संबंधित मुहावरों का बहुत बड़ा प्रशंसक हूं।
आहारबुध ६'११ को ०:४१

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

@ बियर: मैं वास्तव में उपयोग करता हूं, और अजगर का एक प्रशंसक हूं जो इसे और अधिक मनोरंजक बनाता है।
आहारबुध

एक प्रकार का लूप कोड अस्पष्ट बनाता है। उदाहरण के लिए, do..whileयदि एक प्रकार का लूप होगा जिसका शीर्ष पर मूल्यांकन था, तो लूप कैसा दिखेगा? यह बिल्कुल एक लूप की तरह नहीं दिखेगा।
Qix

2

नेटवर्क क्षमताओं

एक ऐसी भाषा जो कुछ नेटवर्क समर्थन के बिना जहाज आज की दुनिया में बहुत लंगड़ी है।

अधिकांश वास्तविक विश्व अनुप्रयोगों को किसी प्रकार के नेटवर्क पर संवाद करने की आवश्यकता होती है:

  • स्वचालित अपडेट
  • डेटाबेस का उपयोग
  • वेब सेवाएं

यह निश्चित रूप से वितरित / क्लाउड कंप्यूटिंग समर्थन की आधारशिला भी है।


8
लेकिन यह एक मानक पुस्तकालय सुविधा हो सकती है जो ठीक है।
डोनल फैलो

@ डोनल: मैंने कभी नहीं कहा (या कम से कम ऐसा नहीं सोचा था), सवाल भाषा और पुस्तकालय दोनों सुविधाओं के लिए खुला है। मेरा कहना सिर्फ इतना है कि अगर आपको कोई भाषा पैकेज मिलता है और वहां नेटवर्क की क्षमता नहीं है, तो आप दर्द को जल्द से जल्द भर देंगे :)
Matthieu M.

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

1

मुझे एक प्रोग्रामिंग भाषा पसंद है जो सीखना आसान है, और नई चीजों को बनाने के लिए गठबंधन करना आसान है।

उदाहरण के लिए, जबकि कुछ लिखने के लिए बहुत सारे तरीके आकर्षक हैं, मुझे लगता है कि इसे लिखने के लिए केवल एक या दो तरीके होना बेहतर है। इस तरह कार्यक्रम को बनाए रखना आसान है।

एक भाषा जिसकी अवधारणा सभी तत्वों पर लागू हो सकती है, बहुत मददगार है (मुझे लगता है कि इसे ऑर्थोगोनलिटी कहा जाता है) इसलिए, अगली बार जब आप एक नई भाषा की सुविधा का सामना करते हैं, तो आप इसका उपयोग करने के तरीके को कम कर सकते हैं।

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

अंत में, भाषा सिंटैक्स इसका उपयोगकर्ता इंटरफ़ेस है, और इस तरह, यह स्पष्ट, संक्षिप्त, सहज, उपयोग में आसान होना चाहिए, और अपनी आदतों का सम्मान करना चाहिए।


ऑर्थोगोनल का मतलब है कि प्रत्येक सुविधा कुछ अलग करती है। Grep या awk जैसे टूल देखें। वे एक काम करते हैं, ठीक है। फिर आप उन्हें अलग-अलग ऑर्डर में हुक देते हैं जो आपको चाहिए।
थियो बेलियार

1
  • पठनीयता : व्याकरण, क्लीनर और बेहतर में उपयोग किए जाने वाले कम / छोटे प्रतीक।
  • ऑब्जेक्ट ओरिएंटेड प्रकार : तरीके, फ़ंक्शंस नहीं।
  • समझने की क्षमता : निर्मित धाराप्रवाह इंटरफेस, पुस्तकालय वर्गों / इंटरफेस और प्रकार के लिए व्यापक और संक्षिप्त नाम।

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

मेरे लिए, साफ कोड पठनीय कोड है। मैंने यह भी कहा कि छोटी: होने ":" के बजाय "=>" PHP सरणियों में, या होने "।" "->" के बजाय, निश्चित रूप से एक सुधार होगा (और मैं पहले से ही PHP का आनंद लेता हूं)।
dukeofgaming

4
@ मेसन: मैं और कई अच्छे तकनीकी लेखक (जैसे विलियम जिंसर) असहमत हैं। शब्दशः पठनीयता का शत्रु है, न कि शिथिलता।
कोनराड रुडोल्फ

2
मैं एक प्रकार की चंचलता के लिए जाता हूं जिसे प्रतीकों के संदर्भ में परिभाषित किया गया है । मैं बहु-चरित्र प्रतीकों के साथ काफी खुश हूं, हालांकि, जब तक वे चीजें हैं जो पाठक स्वाभाविक रूप से एक प्रतीक के रूप में मानता है (जैसे, एक शब्द प्रतीक है)।
डोनल फेलो

1
आपका पहला बिंदु सीधे आपके बाद के दो के साथ संघर्ष करता है।
Qix

1

मौजूदा प्रोग्रामिंग भाषा में एक सुविधा जोड़ना। तो, नई भाषा बी पुरानी भाषा ए प्लस फीचर एक्स है।

मौजूदा उदाहरण:

  1. C वर्ग जोड़ना => C ++
  2. जावा कुछ सामान जोड़ रहा है => C #

2
यह एक बहुत बड़ा निरीक्षण है। एक बेहतर उदाहरण सी और ऑब्जेक्टिव-सी के बीच का अंतर होगा।
जॉन प्यूरी

0

जब यह प्रौद्योगिकी / मंच / भाषा / डेटाबेस आदि की बात आती है, तो अधिकांश समय यह प्रदर्शन के लिए नीचे आता है। भविष्य में आज के कई सॉफ्टवेयर एक चित्रमय भाषा का उपयोग करके डिज़ाइन किए जा सकते हैं क्योंकि हमारे पास अधिक कम्प्यूटेशनल शक्तिशाली हैं।

मैं उस दिन की आशा करता हूं जब हमारे पास कम्प्यूटेशनल शक्ति और एक भाषा है जहां आप अपना एप्लिकेशन डिज़ाइन करते हैं और आपको भाषा के विवरण के बारे में चिंता करने की आवश्यकता नहीं है

अद्यतन: मैं इस तरह की भाषा LabView के लिए एक लिंक भेजता हूं

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


3
कंप्यूटर ऐसा करने के लिए पहले से ही काफी शक्तिशाली हैं। यह सिर्फ व्यावहारिक नहीं है, क्योंकि आपको किसी कारण या किसी अन्य के लिए कोड में उतरने की आवश्यकता है ।
जेरेमी हेइलर

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

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

1
@Amir: फिर कृपया बताएं कि सॉफ़्टवेयर विकास को चलाने के लिए "ग्राफ़िकल प्रोग्रामिंग" के लिए कंप्यूटर को अधिक शक्तिशाली होने की आवश्यकता क्यों है?
जेरेमी हेइलर

7
@Amir: आप एक अधिक मौलिक एक के साथ एक तकनीकी सीमा को भ्रमित कर रहे हैं। हमारे पास कई ग्राफिकल कंप्यूटर भाषाएं नहीं होने का कारण यह है कि हम उन्हें अच्छी तरह से करना नहीं जानते हैं (और अगर वे अच्छी तरह से किया जा सकता है तो नहीं जानते)। मैं LabView से अवगत हूं, और इसमें जटिल चीजों को करने, या साधारण चीजों को बदलने के बारे में पर्याप्त चुटकी सुना है। न ही हमें इस तरह की भाषा को डिजाइन करने के लिए अधिक शक्तिशाली कंप्यूटर की आवश्यकता है, इसलिए आगे बढ़ें और इस तरह की काल्पनिक भाषा में कुछ नमूना कार्यक्रमों को स्केच करने की कोशिश करें।
डेविड थॉर्नले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.