वैज्ञानिक प्रोग्रामिंग भाषाएं इतनी अजीब क्यों हैं? [बन्द है]


9

यह मुझे लगता है कि विज्ञान और इंजीनियरिंग में उपयोग के लिए प्रोग्रामिंग भाषाएं सामान्य प्रयोजन की भाषाओं की तुलना में लगातार अजीब हैं। मेरे सिर के ऊपर से कुछ उदाहरण:

  • मतलाब में, प्रत्येक फ़ंक्शन को एक अलग फ़ाइल में रखा जाना चाहिए
  • R में, <- असिस्मेंट ऑपरेटर है, जैसा कि लगभग हर दूसरी भाषा में = के विपरीत है
  • मतलाब, आर, जूलिया और अन्य सभी 1-अनुक्रमित हैं
  • Matlab टिप्पणियों के लिए% का उपयोग करता है, न कि मानक # या // के लिए

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

मैंने इस सूत्र को पढ़ा और स्पष्टीकरण को संतोषजनक नहीं पाया। सिर्फ इसलिए कि R को एक वैज्ञानिक भाषा के रूप में डिज़ाइन किया गया था, इसका मतलब यह नहीं है कि इसे पूरी तरह से परंपराओं को अनदेखा करना और उपयोग करना था - बजाय =।


6
संक्षिप्त उत्तर: क्योंकि वे वैज्ञानिकों के लिए बनाए गए थे, न कि प्रोग्रामरों के लिए।
बार्ट वैन इनगेन शेनौ

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

3
मुझे लगता है कि आप भाषाओं में किसी भी सम्मेलन को खोजने के लिए संघर्ष करेंगे । यह उनकी विरासत पर निर्भर करता है।
रॉबी डी

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

8
आपका 99% गलत है। यदि आप केवल C और उसके डेरिवेटिव को जानते हैं, तो आप ऐसा सोच सकते हैं, लेकिन अच्छी तरह से गैर-C भाषाओं के 50% से अधिक असाइनमेंट, इंडेक्सिंग और / या टिप्पणियों के लिए कुछ अलग उपयोग करते हैं।
david.pfx

जवाबों:


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

और भले ही हम केवल आईटी मानकों के अनुसार न्याय करेंगे ... क्षमा करें, आपका क्या मतलब है? क्या आपने APL या SNOBOL में एक प्रोग लिखने की कोशिश की है? ये दो भाषाएं हैं, IMHO, उपयुक्त क्षेत्रों में शक्तिशाली (गिनती और तार)। लेकिन वाक्यविन्यास कुछ बहुत ही अजीब (और प्रभावी) है एपीएल कोड की एक पंक्ति पढ़ना दिन लग सकता है। दूसरी ओर, ऐसी रेखा एसडब्ल्यू का एक गंभीर टुकड़ा है। आप राहत के आँसू के साथ मैथलैब लौटेंगे।

"=" के रूप में, कई लोगों को आदी होने की समस्या है कि यह समानता नहीं है, लेकिन असाइनमेंट है। BTW, पास्कल में यह समानता और असाइनमेंट ": =" है।

और आप वास्तव में सोचते हैं कि == समानता के लिए अधिक स्वाभाविक है? इसके विपरीत, C प्रोग्रामिंग में = और == को मिलाकर MOST आम त्रुटि है, यह बहुत बार समकालीन IDE में भी होता है, अपने स्वचालित नियंत्रण के साथ।

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

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

और हां, मैंने 0-आधारित गिनती की स्वाभाविकता पर डायजकस्ट्रा के लेख को पढ़ा था। और उसके तर्क से पूरी तरह असहमत हैं। संगीतकारों के लिए यह स्वाभाविक है। और यहां तक ​​कि 0 उत्साही जो सी और जावा कंपाइलर बनाते हैं, कोड की पंक्तियों की गिनती 1 से शुरू करते हैं!


1
असाइनमेंट के लिए ": =" और 1-आधारित इंडेक्सिंग का उपयोग स्मालटाक में भी किया जाता है।
रोरी हंटर

1
मैं यह नहीं खरीदता कि 0 आधारित अनुक्रमण कार्यान्वयन में आसानी के कारण है (FORTRAN बहुत ज्यादा इसको नापसंद करता है)। cs.utexas.edu/users/EWD/transcos/EWD08xx/EWD831.html कुछ कारण देता है कि कोई भी 0-आधारित अनुक्रमण को पसंद कर सकता है, लेकिन ध्यान दें कि चुनाव काफी मनमाना है।
जे.के.

2
FORTRAN में 1-आधारित अनुक्रमण था। PASCAL ने मनमाने ढंग से आधारित अनुक्रमण की अनुमति दी: आप एक सरणी की घोषणा कर सकते हैं जिसका सूचकांक अधिक था, उदाहरण के लिए, -42 से +57। (देखें en.wikipedia.org/wiki/… एक उदाहरण के लिए जहां यह उपयोगी है।)
जॉन आर। स्ट्रॉहैम

1
@ गैंगनुस मुझे लगता है कि आधुनिक भाषाओं की सी से तुलना करना और इसे पढ़ने के लिए जानबूझकर कठिन बनाना गलत है। यह निचले स्तर की भाषाओं के लिए एक उच्च स्तरीय विकल्प होने के लिए डिज़ाइन किया गया था।
रॉबी डे

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

16

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

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

असाइनमेंट प्रोग्रामर्स को छोड़कर , एक अजीब और समझ से बाहर की अवधारणा है ; ज्यादातर लोगों को कम परवाह नहीं कर सका है कि क्या यह है =या :=या <-, वे समझते हैं करने के लिए संघर्ष अर्थ (और उनके लिए है, यह वास्तव में बेहतर है नहीं उपयोग करने के लिए =है, क्योंकि यह है कि काम पर जोर देती है समानता नहीं है - करने के लिए गैर प्रोग्रामर के लिए सबसे आम बाधा कोड समझ)।

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


4
मैं असहमत हूं कि 1 से अनुक्रमण अजीब नहीं है। 0-इंडेक्सिंग गणित में कम से कम 1-इंडेक्सिंग के रूप में आम है, और यह स्पष्ट रूप से मैटलैब या एस / आर के आगमन से पहले प्रोग्रामिंग में आदर्श था।
हरोबा

9
@ अक्विस ओह, हां, मैं पहले से ही बच्चे को शून्य, एक, दो ... सबसे स्वाभाविक रूप से गिनता हुआ देख रहा हूं।
गंगनुस

4
बच्चे कोड नहीं लिखते हैं। शून्य-अनुक्रमण का उपयोग करने के लिए अच्छे कारण हैं (देखें: दिज्कस्त्र), और जब गणित में शून्य-अनुक्रमण भी सामान्य है तो मैं 1-अनुक्रमण का उपयोग करने के लिए कई कारण नहीं देख सकता।
हरोबा

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

1
@phresnel उत्तर से विरोधाभास करने के लिए: 1 से अनुक्रमण सामान्य है। प्रोग्रामर के लिए छोड़कर, क्योंकि वे यह उम्मीद करना सी से [0 से इंडेक्सिंग] वातानुकूलित किया गया है
रोबी डी

5

तीन समस्याएं हैं:

  1. आप कुछ परंपराओं से अनजान हैं, और कुछ विकल्पों के अच्छे कारण।
  2. आपने सिंटैक्स पर बहुत अधिक जोर दिया, शब्दार्थ पर बहुत कम।
  3. इंजीनियरों और वैज्ञानिकों को भाषा डिजाइन में कोई अनुभव नहीं है, जिससे प्रश्नवाचक वाक्यविन्यास हो सकता है।

अब अपने विशिष्ट बिंदुओं के लिए:

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

  • आर में, =एक असाइनमेंट ऑपरेटर के रूप में भी इस्तेमाल किया जा सकता है। ध्यान दें कि इसे कई असाइनमेंट ऑपरेटरों की आवश्यकता होती है <-और <<-स्कूपिंग की अपनी अवधारणा से निपटने के लिए ( <<-किसी फ़ंक्शन के अंदर एक नया प्रतीक बनाने के बजाय बाहर के दायरे में एक प्रतीक को असाइन करता है)। तीर का उपयोग दूसरी दिशा में भी किया जा सकता है, संभावित रूप से क्लीनर कोड complex_calculation() -> x:।

  • 1-आधारित अनुक्रमण गणित में मानक है, जो कि मैटलैब का है और आर के उपयोगकर्ता सी। जूलिया की तुलना में अधिक आरामदायक हैं ताकि बेहतर सीखने की अवस्था हो।

  • %टिप्पणियों के लिए भी TeX / LaTeX में उपयोग किया जाता है। #केवल यूनिक्स स्क्रिप्टिंग भाषाओं और उनके वंश से एक सम्मेलन है।

आप यह भी अनदेखा करते हैं कि "वास्तविक" प्रोग्रामिंग भाषाओं में कई अजीब भाग हैं। योजना का उपयोग क्यों नहीं करता है =? बजाय:

(define foo 5)

सी का उपयोग *डेरीफ्रेंसिंग के लिए क्यों होता है , जब जाहिर है कि एक देखभाल ^xअन्य परंपराओं में अधिक सामान्य है?


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

1
मैं लगभग हर चीज से सहमत हूं, p.3 को छोड़कर। वैज्ञानिक अपनी भाषा नहीं बनाते हैं, वे उन्हें आदेश देते हैं। वे ग्राहक हैं, उपयोगकर्ता हैं, लेकिन उनके निर्माता नहीं हैं। अगर कोई है, तो वह पहले से ही एक आईटी geek है। और किसी भी भाषा का वाक्य-विन्यास संदिग्ध है, कोई भी सभी कार्यों के लिए आदर्श नहीं है।
गंगनुस

Matlab आवश्यकतानुसार समय-समय पर कार्यों / फाइलों को संकलित करता है। यह एक कार्यक्रम की कोई वास्तविक अवधारणा नहीं है, बस कार्यों का एक गुच्छा है। यदि मैं एक फ़ंक्शन चला रहा हूं, जो फू () को कॉल करता है, तो यह फ़ाइल के लिए अपना रास्ता खोजेगा जिसे foo.m कहा जाता है, इसे संकलित करें, और इसे चलाएं। मतलब को अग्रिम में यह बताने की आवश्यकता नहीं है कि मैं किन फाइलों का उपयोग करने का इरादा रखता हूं।
साइमन बी।

1

मुझे लगता है कि यह आपकी अन्य भाषाओं के संपर्क पर निर्भर करता है। मेरे सर के ऊपर से चला गया:

  • C / C ++ में अलग-अलग स्रोत फ़ाइलें हैं (.c / .cpp और .h)
  • लम्बडा एक्सप्रेशन के लिए -> अक्षर C # में उपयोग किए जाते हैं
  • VB के पुराने संस्करणों में 1 का डिफ़ॉल्ट इंडेक्स के रूप में इस्तेमाल किया गया था (हालाँकि इसे विकल्प बेस के साथ बदला जा सकता है)

1
C और C ++ में, आप एक फ़ाइल में जितने चाहें उतने कार्य परिभाषित कर सकते हैं।
हरोबा

मैं सिर्फ यह बता रहा हूं कि कई फाइलों में मॉड्यूल का अलग होना असामान्य नहीं है। यदि आप चाहते हैं कि आप अपने सभी कार्यों को आंशिक वर्ग निर्माण के साथ .NET भाषाओं का उपयोग करके अलग-अलग फाइलों में डाल सकें
रॉबी डी

1
बेशक यह कई फाइलों में विभाजित होने के लिए मॉड्यूल के लिए असामान्य नहीं है, और यह कई मामलों में वांछनीय है। लेकिन Matlab में आपको हर एक फंक्शन को अपनी फाइल में डालना होता है, जिसका मतलब है कि अगर आपके पास एक हजार फंक्शन्स हैं तो आपको एक हजार फाइल की जरूरत है ।
हरोबा

3
HTML में टिप्पणियाँ जैसे दिखती हैं <!-- ... -->। URL-एन्कोडिंग के लिए प्रतिशत चिह्न का उपयोग किया http://example.com/()जाता है : बन जाता है http://example.com/%28%29
आमोन

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