पायथन का उपयोग उच्च प्रदर्शन / वैज्ञानिक कंप्यूटिंग (लेकिन रूबी नहीं है) के लिए क्यों किया जाता है?


106

वहाँ एक PyCon 2011 बात है कि जाता है से एक उद्धरण है:

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

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

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

क्या कोई खास वजह है कि एक भाषा को बंद कर दिया गया? क्या यह पुस्तकालयों के बारे में उपलब्ध है? कुछ विशिष्ट भाषा सुविधाएँ? समुदाय? या शायद सिर्फ ऐतिहासिक आकस्मिकता , और यह दूसरे रास्ते से जा सकती थी?


2
मेरा सुझाव है कि हालांकि वे दोनों गतिशील भाषाएं हैं, अजगर और रूबी काफी अलग हैं। समान से अधिक भिन्न।
एडम क्रॉसलैंड

20
मुझे नहीं पता कि यह एक उत्तर है, लेकिन याद रखें कि रूबी रेल्स (2005-2006) के साथ एक छोटे से समुदाय से बाहर ले जाने से पहले पायथन के पास 'अधिक कर्षण' था। Google कुछ समय से पाइथन का उपयोग कर रहा था, जिसने इसकी प्रोफाइल (2000 के दशक की शुरुआत) को उठाया। पायथन का वाक्यविन्यास स्पष्ट और सीखने और पढ़ने में आसान है (और याद रखें कि यह उस युग में था जब पर्ल वास्तव में केवल अन्य प्रमुख विकल्प थे), इसलिए मुझे लगता है कि वास्तव में इसके प्रति वैज्ञानिक गणना को धक्का दिया। उसके बाद, यह शायद आत्म-सुदृढीकरण था, क्योंकि लोगों ने NumPy / SciPy, MatPlotLib और कई अन्य वैज्ञानिक कंप्यूटिंग पैकेज बनाए।
wkl

4
इस सवाल में दिलचस्पी रखने वाले लोग मुझे कम्प्यूटेशनल साइंस स्टैक एक्सचेंज साइट की जांच करने में भी रुचि रखते हैं ।
मार्क बूथ

2
"पठनीयता मायने रखता है"
jsbueno

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

जवाबों:


108

मैं अपनी टिप्पणी पर विस्तार करूंगा।

मुझे लगता है कि वैज्ञानिक कंप्यूटिंग में अजगर के उपयोग को प्रभावित करने वाले कुछ कारक हैं, हालांकि मुझे नहीं लगता कि कोई निश्चित ऐतिहासिक बिंदु हैं जहां आप कह सकते हैं, "हां, यही कारण है कि रूबी / कुछ और पर अजगर का उपयोग किया जाता है "

आरंभिक इतिहास

अजगर और रूबी लगभग एक ही उम्र के हैं - विकिपीडिया के अनुसार, पायथन आधिकारिक तौर पर पहली बार 1991 में रिलीज़ हुआ था, और 1995 में रूबी।

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

अर्थात्, मेरा मतलब है कि Google एक प्रणाली में पायथन का उपयोग कर रहा था, जहां उनके पास हजारों मशीनें थीं (समानांतर और पैमाने पर सोचें) और लगातार कई लाखों डेटा बिंदुओं (फिर, स्केल) को संसाधित कर रहे थे।

घटना का संगम

SGI और Crays (उन्हें याद रखें?) जैसी विशेष मशीनों पर वैज्ञानिक कंप्यूटिंग का उपयोग किया जाता था, और निश्चित रूप से FORTRAN था (और अभी भी) व्यापक रूप से इसकी सापेक्ष सादगी के कारण उपयोग किया जाता है और क्योंकि इसे अधिक आसानी से अनुकूलित किया जा सकता है।

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

पायथन एक अच्छे समय में आया था, तब से, Google पायथन को बढ़ावा दे रहा था, और Google कमोडिटी हार्डवेयर का उपयोग कर रहा था, और उनके पास हजारों मशीनें थीं।

इसके अलावा अगर आप कुछ पुराने वैज्ञानिक कंप्यूटिंग लेखों में खुदाई करते हैं, तो उन्होंने 2000 के दशक के आसपास वसंत शुरू कर दिया।

इससे पहले समर्थन

यहां एक लेख खगोलीय डेटा विश्लेषण सॉफ्टवेयर और सिस्टम के लिए लिखा गया है, जो 2000 में लिखा गया है, जो वैज्ञानिक कंप्यूटिंग के लिए एक भाषा के रूप में पायथन का सुझाव देता है।

लेख में पायथन के बारे में यह उद्धरण है:

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

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

इसलिए आप देख सकते हैं कि पहले से ही 90 के दशक के अंत में पायथन का पहले से ही कर्षण था, क्योंकि यह समय के साथ मौजूदा प्रणालियों के समान कार्यात्मक था, और क्योंकि सी और मौजूदा कार्यक्रमों जैसी चीजों के साथ अजगर को एकीकृत करना आसान था। लेख की सामग्री के आधार पर, 1995-1996 के समय-सीमा में पहले से ही पायथन वैज्ञानिक उपयोग में था।

लोकप्रियता वृद्धि में अंतर

रूबी की लोकप्रियता ने रूबी ऑन रेल्स के उदय के साथ विस्फोट किया, जो पहली बार 2004 में सामने आया था। मैं कॉलेज में था जब मैंने पहली बार रूबी के बारे में सुना था, और यह 2005-2006 के आसपास था। अजगर के लिए django को एक ही समय सीमा (विकी के अनुसार जुलाई 2005) के आसपास जारी किया गया था, लेकिन रूबी समुदाय का ध्यान वेब अनुप्रयोगों में इसके उपयोग को बढ़ावा देने पर बहुत अधिक केंद्रित था।

दूसरी ओर, पायथन में पहले से ही पुस्तकालय थे जो वैज्ञानिक कंप्यूटिंग के लिए उपयुक्त थे:

  • NumPy - NumPy आधिकारिक तौर पर 2005 में शुरू हुआ था, लेकिन जिन दो पुस्तकालयों का निर्माण किया गया था, वे पहले जारी किए गए थे: न्यूमेरिक (1995), और न्यूमरे (2001?)

  • BioPython - अजगर के लिए बायोलॉजिकल कंप्यूटिंग लाइब्रेरी, कम से कम 2001 तक की है

  • SAGE - 2005 की शुरुआत में पहली सार्वजनिक रिलीज के साथ गणित पैकेज

और भी बहुत कुछ, हालाँकि मुझे उनकी कई समय रेखाएँ (केवल उनकी डाउनलोड साइटों को ब्राउज़ करने से अलग) नहीं पता हैं, लेकिन पायथन के पास SciPy (NumPy पर निर्मित, 2006 में रिलीज़), R (आँकड़ों की भाषा) के साथ बाइंडिंग थी। 2000 के दशक के प्रारंभ में, MatPlotLib मिला, और ipython में वास्तव में शक्तिशाली शेल वातावरण भी मिला।

2000 के दशक की शुरुआत में ipython को पहली बार रिलीज़ किया गया था, और इसमें कई विशेषताएं जोड़ी गई हैं जो इसे वैज्ञानिक कंप्यूटिंग के लिए बहुत अच्छा बनाती हैं, जैसे कि एकीकृत matplotlib रेखांकन और कम्प्यूटेशनल समूहों का प्रबंधन करने में सक्षम होना

उपरोक्त लेख से:

यह कई अन्य पायथन से संबंधित वैज्ञानिक कंप्यूटिंग परियोजनाओं को भी ध्यान देने योग्य है। न्यूक्लियर पायथन एक्सटेंशन पायथन (डबॉइस 1996) के लिए फास्ट ऐरे और मैट्रिक्स हेरफेर जोड़ता है, एमएमटीके आणविक मॉडलिंग (हिंसन 1999) के लिए पायथन-आधारित टूलकिट है, बायोपथॉन परियोजना जीवन-विज्ञान अनुसंधान (बायोपथॉन 1999) के लिए पायथन-आधारित उपकरण विकसित कर रही है। और विज़ुअलाइज़ेशन टूलकिट (VTK) पायथन बाइंडिंग (VTK, 1999) के साथ एक उन्नत विज़ुअलाइज़ेशन पैकेज है। इसके अलावा, पायथन समुदाय में चल रहे प्रोजेक्ट इमेज प्रोसेसिंग और प्लॉटिंग के लिए एक्सटेंशन विकसित कर रहे हैं। अंत में, (ग्रीनफील्ड, 2000) में प्रस्तुत कार्य STScI में परियोजनाओं में पायथन के उपयोग का वर्णन करता है।

पायथन के लिए वैज्ञानिक और संख्यात्मक पैकेजों की अच्छी सूची


इसलिए इसका बहुत सा हिस्सा संभवतः शुरुआती इतिहास और 2000 के दशक तक रूबी की सापेक्ष अस्पष्टता के कारण था, जबकि पायथन ने Google के इंजीलवाद के कारण कर्षण प्राप्त किया था।

इसलिए यदि आप 1995 - 2000 की अवधि में स्क्रिप्टिंग भाषाओं का मूल्यांकन कर रहे थे, तो आप वास्तव में क्या देख रहे थे? वहाँ पर्ल था, जो संभवतः अलग-अलग पर्याप्त रूप से अलग था कि लोग इसका उपयोग नहीं करना चाहते थे, और फिर पायथन था, जिसमें एक स्पष्ट वाक्यविन्यास और बेहतर पठनीयता थी।

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

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


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

1
@SpencerRathbun लेख ने रैपर को उत्पन्न करने के लिए पायथन का उपयोग करने और पायथन को C / C ++ कोड के साथ इंटरोप करने की अनुमति देने के उल्लेख का उल्लेख किया है। SWIG को रूबी 1.6 तक आधिकारिक रूबी समर्थन नहीं मिला, जो 2004 में जारी किया गया था। इसलिए पायथन के पास पहले से ही एक प्रमुख सिर था, जो कि दिमाग की हिस्सेदारी में था और इसके चारों ओर टूलींग करके लोगों को अपने मौजूदा सिस्टम में पायथन को बोल्ट करने की अनुमति देता था। सभी मौजूदा, अनुकूलित FORTRAN / C कोड जो कि उपयोग में थे, को खोदने के लिए नहीं, शायद सबसे बड़ा ड्राइवर था।
वॉकल

3
1991 में हम सी / फोरट्रान के द्रव्यमान लिखने के बिना डेटा का विश्लेषण करने के तरीके के रूप में संख्यात्मक पुस्तकालयों को एक साथ जोड़ने के लिए टीसीएल का उपयोग कर रहे थे। TCL को बदलने के लिए सही समय पर अजगर आया। 'सी' (और फोरट्रान के साथ F2C द्वारा) के साथ इंटरफेस करने में आसानी, पेरेल की तुलना में बड़ी बात थी, टीसीएल इंटरफेस 'सी' के लिए बहुत आसान था
मार्टिन बेकेट

अधिमान्य अनुलग्नक प्रक्रियाएं भाषाओं के उपयोग के बारे में एक बहुत कुछ बताती हैं। यह ज़िपफ़ियन है! जिपफ मायटर "पीएपी" देखें इसे 12:50 पर समझाया गया है।
राडारोब जू

37

मैंने इंजीनियरिंग अनुप्रयोगों के लिए बड़े पैमाने पर और वेब अनुप्रयोगों के लिए रूबी का उपयोग किया है।

एक वैज्ञानिक भाषा के रूप में मैं रूबी के साथ जो समस्या देख रहा हूं वह यह है कि दिए गए ऑपरेशन के लिए बहुत सारे सिंटैक्स विकल्प हैं।

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

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


3
हाँ सचमुच। रूबी TIMTOWTDI परंपरा में है, और इसलिए बस थोड़ा बेहतर पर्ल है। सॉफ्टवेयर प्रोग्रामर्स के लिए लिखा जाता है। संकलक / व्याख्याकार, इस अर्थ में, एक माध्यमिक दर्शक हैं। वैज्ञानिक अनावश्यक रूप से कठिन सॉफ्टवेयर से बहुत अधिक हस्तक्षेप के बिना अपना काम करने के बारे में गंभीर होते हैं। QED
डोमिनिक क्रोनिन

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

10
लेकिन सी ASCII कारखाने में एक विस्फोट की तरह लग सकता है, साथ ही। याद रखें कि C में, एक व्यूह बिंदु के चारों ओर की त्वचा है। तो सरणी [5] को वैकल्पिक रूप से * (सरणी + 5) के रूप में लिखा जा सकता है जिसे वैकल्पिक रूप से * (5 + सरणी) के रूप में लिखा जा सकता है जिसे वैकल्पिक रूप से 5 [सरणी] के रूप में लिखा जा सकता है। जो बेवकूफ है।
जोनाथन लैंड्रम

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

@AndrewVit: जरूरी नहीं। यदि आपके पास एक डेवलपर है, या यदि आपके पास डेवलपर्स की एक छोटी, बहुत एकीकृत टीम है, तो TIMTOWTDI बहुत अच्छा काम करता है। लेकिन जैसे ही आप लोग हैं, जो कभी नहीं एक ही कोड पर काम मिले हैं, आप अपने आप पूछ शुरू करने के लिए जा रहे हैं "ओह, क्यों वे यह करना होगा कि जिस तरह से?" या, वैकल्पिक रूप से, आप सभी को इसे उसी तरह करने के लिए मजबूर करने के लिए एक स्टाइल गाइड लिखेंगे, और फिर आप TIMTOWTDI को और अधिक नहीं कर रहे हैं।
केविन

17

एक अनुमान में, यह का एक बड़ा हिस्सा पर निर्भरता होगा matlab शोधकर्ताओं के बहुत से। अजगर के पास विकल्प हैं, जैसे ऋषि । जबकि माणिक नहीं है, या कम से कम कोई स्पष्ट नहीं है।

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

अंत में, ध्यान दें कि रूबी एफएक्यू बताता है कि माणिक अजगर की तुलना में अधिक जटिल है। प्रोग्रामिंग शोधकर्ताओं के लिए दूसरे नंबर पर आता है, न कि पहले की तरह।


22
मुझे लगता है कि OO चीज लाल रंग की हेरिंग है। एक शोधकर्ता क्या परवाह करता है कि अभिव्यक्ति वस्तु को 1 + 1संदेश भेजती है या नहीं ? यह आपके प्रोग्राम की संरचना को थोड़ी सी भी नहीं बदलता है। +1
sepp2k

1
@ sepp2k, मुझे लगता है कि स्पेन्सर सुझाव दे रहा है कि रूबी को वैज्ञानिकों को अलग तरह से कार्यक्रम करने की आवश्यकता होगी । मैं रूबी पता नहीं है, लेकिन आप मान था रूबी में एक प्रोग्राम लिखने के लिए है, जबकि अजगर प्रक्रियाओं की अनुमति देता है वस्तुओं को बनाने के - इस मानसिक भूमि के ऊपर करने के लिए जोड़ना होगा। दी गई बहुत कुछ नहीं, बल्कि एक गैर-प्रोग्रामर के लिए, हर अतिरिक्त काम एक अन्य भाषा का उपयोग करने का एक कारण होगा।
साइक्लोप्स

7
@ मुझे लगता है कि वह क्या सुझाव दे रहा है। मैं कह रहा हूं कि यह गलत है। एक प्रक्रियात्मक भाषा के रूप में रूबी मास्किंग के बारे में उद्धरण का पूरा बिंदु यह है कि आपको अपने कार्यक्रम को ऑब्जेक्ट ओरिएंटेड तरीके से संरचना करने की आवश्यकता नहीं है। यदि आप "2 + 2" जैसी किसी चीज़ में टाइप करते हैं, तो आप दो इंटेगर ऑब्जेक्ट बना रहे हैं और एक विधि को कॉल कर रहे हैं (दूसरे को तर्क के रूप में पारित कर रहे हैं)। हालाँकि जो रूबी में "2 + 2" टाइप नहीं करता है वह अन्य भाषाओं में "2 + 2" टाइप करने की तुलना में अधिक प्रयास करता है।
sepp2k

5
मैं sepp2k के साथ हूं, मैं उस तर्क को नहीं खरीदता हूं। कुछ भाषाएँ, जैसे जावा, आप पर OO प्रतिमान को बल देती हैं - रूबी के साथ ऐसा नहीं है। रूबी में एक विशुद्ध रूप से प्रक्रियात्मक या कार्यात्मक कार्यक्रम लिखने से आपको क्या रोक रहा है?
माइक बैरनज़क

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

14

जब बीडीएफएल (गुइडो वैन रोसुम) ने पहली बार पायथन को लिखा तो यह लक्ष्य था कि यह सादे अंग्रेजी (DARPA फंडिंग प्रस्ताव) के रूप में समझा जा सकता है जो सामान्य कोडिंग त्रुटियों को समाप्त कर देगा।

एक मुद्दा जो अत्यधिक दिखाई देता है वह है इंडेंट का उपयोग परिसीमन ब्लॉकों के लिए। जिन भाषाओं में स्पष्ट जटिल कथन परिसीमन होता है (जैसे C ब्रेसिज़, पास्कल BEGIN / END) व्हाट्सएप को कोडर को फीड करने से पहले एक ही स्थान वर्ण पर ढह जाएगा। यह कैसे कोड निर्धारित किया गया है में बहुत भिन्नता होगी।

पेशेवर प्रोग्रामर के लिए यह कोई मुद्दा नहीं है क्योंकि उन्होंने सप्ताह में 30 या अधिक घंटे अभ्यास से निपटने के लिए खुद को प्रशिक्षित किया है।

अन्य पेशेवरों के लिए जहां प्रोग्रामिंग एक उपकरण है यह समस्या एक बड़ी समस्या बन जाती है। इस समूह में गणितज्ञ, भौतिक विज्ञानी, रसायनज्ञ, इंजीनियर आदि शामिल हैं।

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

यह प्रोग्रामिंग पेशे के बाहर लोकप्रिय क्यों है, इसका एक एकल उदाहरण है। ऐसे अन्य उदाहरण हैं जो एक ही बिंदु को चित्रित करने के लिए उपयोग किए जा सकते हैं जैसे कि बैटरी शामिल हैं, द ज़ेन ऑफ पायथन ( import this), मोंटी पायथन हास्य का उपयोग, और इसके आगे।


मुझे गुइडो के फिर से शुरू होने या प्रकाशन सूची पर शोध प्रबंध या डॉक्टरल कार्यक्रम का कोई संदर्भ नहीं मिल रहा है । क्या आपके पास इसके लिए एक प्रशस्ति पत्र है? यह साक्षात्कार सिर्फ यह कहता है कि वह CWI में शोधकर्ता थे।
एम। डडले

मैं उस पर पूरी तरह से गड़बड़ था: मैंने पढ़ा था कि उसने इस पर शोध किया है, लेकिन इस पर उचित शोध नहीं किया। इस पोस्ट को लिखने के बाद मुझे अपनी त्रुटि का पता चला, लेकिन फिर मैंने यहां सुधार नहीं किया। धन्यवाद।
लांस हेलस्टन

5

यह यहां एक महान चर्चा है, मुझे लगता है कि यहां पोस्ट वास्तव में उत्तर देते हैं कि क्यों अजगर वैज्ञानिक समुदाय में अधिक लोकप्रिय है। हालाँकि, रूबी विज्ञान के लिए कुछ काउंटर तर्क हैं:

  • रूबी को अजगर (डीएसएल आदि) की तुलना में अधिक सहज रूप से कोडित किया जा सकता है: उपयोग किए गए सही पैकेज दिए गए:

    check bioruby: http://bioruby.org/ एक अनुक्रम रिजर्व बस हो सकता है: s.reverse आदि यदि आप डेटाबेस का उपयोग करते हैं: माणिक डेटाबेस बाइंडिंग एपीआई यकीनन अजगर से बेहतर है।

  • माणिक एक ही समय में उच्च स्तर के सार की अनुमति देता है।

  • बेहतर पैकेज प्रबंधन प्रणाली: रूबी रत्न की तुलना में बहुत आसान हैं: सेटपूल, पाइप आदि

हालांकि, रूबी का गोद लेना / / उसकी जटिलता से बाधित होगा। मुझे लगता है कि लिस्प एक महान / शक्तिशाली भाषा है, लेकिन एक सामान्य भाषा के रूप में इसे बंद क्यों नहीं किया गया? इसी तरह की स्थिति यहाँ रूबी के साथ है - यह लिस्प, छोटी सी बात और पर्ल! से बहुत अधिक शक्ति प्राप्त करती है !: लेकिन केवल कुछ लोगों का चयन वास्तव में इसका उपयोग लाभ प्राप्त करने के लिए करेगा। अंत में, यह कुछ आला / विशेष क्षेत्रों में मजबूत रह सकता है (जैसे कि वेब में रेल, कॉन्फ़िगरेशन में कठपुतली), यह 'non'programmers के लिए पूरी तरह से आनंद लेने के लिए कठिन है, लेकिन यह प्रोग्रामर का अच्छा दोस्त हो सकता है। वैज्ञानिक भाषा का आनंद लेते हैं: http://www.cleveralgorithms.com/nature-inspired/index.html )

कुछ सबसे हालिया अपडेट: ऐसा लगता है कि अजगर पहले से ही परिदृश्य पर कब्जा कर रहा है। हाल की पुस्तकें जैसे: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 और कई अन्य पुस्तकें (डेटा विश्लेषण, मशीन सीखने आदि), सभी का उपयोग अजगर के साथ लिखा जाता है जैसे कि भाषा का उपयोग किया जाता है । अगर माणिक पकड़ना चाहता है, तो उसे कुछ गंभीर प्रयासों की जरूरत है। अजगर में माटप्लोटलिब को ध्यान में रखते हुए, यह संभवत: कई वर्षों के लिए इसे राज्य में ले जाएगा जहां यह है। जब तक रूबी में कुछ गंभीर प्रयास नहीं किए जाते हैं, तब तक शायद यह अगले 2-3 वर्षों में अजगर डेटा विश्लेषण / वैज्ञानिक गणना के चरण के साथ नहीं पकड़ सकता है।


3

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

Numpy कुछ समय के लिए अस्तित्व में रहा है, इसकी उपलब्धता ने कई अन्य संबंधित वैज्ञानिक पैकेजों को बनाने में मदद की, जैसे कि स्कैपी, पांडा ... आदि। महान उपकरण वैज्ञानिक कंप्यूटिंग के लिए अजगर को एक महान पारिस्थितिकी तंत्र बनाते हैं, जबकि रूबी में, समान तेज मैट्रिक्स गणना पुस्तकालय अभी विकसित किया जा रहा है (NMtrix: https://github.com/SciRuby/nmatrix )। यह बहुत बड़ा समय अंतर अजगर को वैज्ञानिक कंप्यूटिंग के लिए स्पष्ट विकल्प बनाता है।


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

2

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

Person.find_by_name 'Juanito'

लेकिन आप अधिक परवाह करते हैं

A = B*C + D

इसलिए मुझे लगता है कि रूबी शक्तिशाली है कि इसकी कई विशेषताएं एक वैज्ञानिक कार्यक्रम में अप्रयुक्त होंगी। प्रक्रियाओं में सोचना आसान है।


0

पायथन को Numpy पैकेज के साथ एन-आयामी सरणियों के लिए बेहतर समर्थन है। मैंने रूबी के लिए ऐसा कुछ नहीं देखा है।

पायथन को संख्यात्मक कंप्यूटिंग / वैज्ञानिक कंप्यूटिंग में तेजी से लगता है जो मैंने किया है। मेरे पास इसके अलावा कोई सबूत नहीं है जब मैंने पायथन और रूबी में समान एल्गोरिदम लिखा है, पायथन एल्गोरिदम तेजी से (वाईएमएमवी) चला।


2
यह वास्तव में चर्चा में बहुत योगदान नहीं देता है। Numpy की प्रभावशीलता पहले से ही स्वीकृत उत्तर में (अधिक विस्तार से) कवर की गई है । आपका प्रदर्शन तर्क असंबद्ध रहता है; ऐतिहासिक प्रदर्शन पर चर्चा करते समय मुझे उपाख्यानों पर भरोसा करना पसंद नहीं है, खासकर जब किसी भी तरह के तर्क शायद पहले से ही भरोसेमंद (अच्छी तरह से, एक संदर्भ-मुक्त उपाख्यान से अधिक भरोसेमंद) बेंचमार्क के साथ कवर किए गए हैं।
ब्रायन

@Brian, सहमत हुए।
जोश पेटिट

@ ब्रायन, मेरा विशिष्ट योगदान एन-आयामी सरणियों पर टिप्पणी थी। यह Numpy के आसपास क्या बनाया गया है, का मूल है, हाँ, लेकिन मैंने ND सरणियों का कोई उल्लेख नहीं देखा। यह रैखिक बीजगणित का मूल है और मतलाब और नेम्पी अच्छी तरह से करते हैं। रूबी एरियर्स का उपयोग करता है जैसे प्रोग्रामर एरेज़ का उपयोग करते हैं, न कि इंजीनियरों और वैज्ञानिकों द्वारा एरे (मैट्रिक्स) का उपयोग करने के लिए। अगर आपको लगता है कि इससे मदद मिलेगी, तो मैं एनडी सरणियों के बारे में एक टिप्पणी को स्वीकृत उत्तर में जोड़ दूंगा।
जोश पेटिट

@ ब्रायन, और मैं अभी भी अपनी टिप्पणी से खड़ा हूं कि मैंने वैज्ञानिक कंप्यूटिंग के लिए रूबी के लिए अच्छा एनडी सरणी समर्थन नहीं देखा है।
जोश पेटिट

0

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


0

मुझे लगता है कि मुख्य कारणों में से एक पायथन डेटा विज्ञान के लिए इतना लोकप्रिय हो गया था क्योंकि वास्तविक समाधान (जैसे, सॉफ्टवेयर सिस्टम) के लिए हमारी स्क्रिप्ट का विस्तार करने के लिए समय / प्रयास (यानी, धन) की बचत हो सकती है। पायथन के साथ, हम डेटा विज्ञान के लिए लिखे गए कोड के आधार पर अधिक आसानी से एक सिस्टम समाधान का निर्माण कर सकते हैं।

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

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

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