वैज्ञानिक संगणना के लिए अपरंपरागत प्रोग्रामिंग भाषाओं का उपयोग करना [बंद]


22

नोट: निम्नलिखित पोस्ट में विवादास्पद राय शामिल हो सकती है, इसलिए कृपया ध्यान दें कि वे केवल मेरी राय हैं, और किसी को अपमानित करने का इरादा नहीं है।

मैं 1999 के बाद से किसी न किसी रूप में प्रोग्रामिंग कर रहा हूं। मैंने शुरुआत में आर का इस्तेमाल किया और फिर बाद में 2004 के आसपास, ज्यादातर पायथन में बदल गया।

कई वैज्ञानिक अनुप्रयोगों के लिए, उदाहरण के लिए, सिमुलेशन, जिसमें एमसीएमसी जैसी चीजें शामिल हैं, दोनों आर और पायथन बहुत धीमे हैं और ऊपर उठने की आवश्यकता है। ऐसा करने का सामान्य तरीका C या C ++ के साथ है। आर और पायथन दोनों के लिए, यह वही है जो मैंने किया था, सी ++ के साथ आर के सी एपीआई और पायथन के साथ बूस्ट पायथन लाइब्रेरी का उपयोग किया।

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

1) जहाँ तक स्पष्टता जाती है, न तो आर और न ही पायथन वास्तव में मेरी राय में वैज्ञानिक एल्गोरिदम लिखने के लिए आदर्श हैं। वे अंतर्निहित एल्गोरिथ्म के लिए बारीकी से नक्शा नहीं करते हैं। हालांकि, वे दोनों C ++ से काफी बेहतर हैं।

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

अब, एक आदर्श दुनिया में, असीमित समय और संसाधनों के साथ, इनमें से कोई भी समस्या एक बड़ी बात नहीं होगी। हालाँकि, जिन वैज्ञानिक परियोजनाओं में मैंने काम किया है, उनमें मुझे निम्न अनुभव हुआ है।

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

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

जहाँ तक मैं बता सकता हूँ, कुछ लोग वैज्ञानिक गणना के लिए या तो CL या Ocaml का उपयोग करते हैं। इस साइट को खोजने पर, मुझे सीएल (एक मेरा था) के लिए दो और ओकेमेल (मेरा) के लिए एक संदर्भ मिला। मेरे पास वर्षों से उत्साहजनक लोगों के साथ जुड़ने के लिए उत्साहवर्धक संपर्क है। 2008 में, मैं तमस के पप्प द्वारा पीटर सीबेल की "प्रैक्टिकल कॉमन लिस्प" (जो मैं स्वयं करता हूं) की एक पुस्तक समीक्षा में आया था । इसने मेरा ध्यान आकर्षित किया, क्योंकि यह लिस्प के लिए वैज्ञानिक कंप्यूटिंग के कुछ उल्लेखों में से एक था जो मैं नेट पर आया था। मैंने तमस को लिखा, जिन्होंने तुरंत मदद की और उत्साहजनक तरीके से जवाब दिया। उसे उद्धृत करने के लिए

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

आपको लोगों से क्लॉज़ पर विचार करने पर विचार करना चाहिए, मैं अकेला ऐसा नहीं हूं जो इन चीजों के बारे में जानता हूं, अन्य लोग लिस्प पर वैज्ञानिक कंप्यूटिंग करते हैं।

उनका एक ब्लॉग और GitHub पेज भी है

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

शायद ऐसे अन्य लोग हैं जो लिस्प पर वैज्ञानिक कंप्यूटिंग करते हैं, लेकिन मुझे किसी के बारे में पता नहीं है।

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

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

निष्कर्ष निकालने के लिए, मैं सोच रहा हूं कि क्या दूसरों के पास इसका अनुभव है, और उनके पास क्या विचार हैं, यदि कोई है।

EDIT: जिन मुद्दों पर मैंने ऊपर चर्चा की है, उनके संदर्भ में मैं पहले हाथ के अनुभव में दिलचस्पी रखता हूं। जैसे यदि आप पायथन और C ++ (या R और C ++) का उपयोग करते हैं और अधिक अस्पष्ट भाषा में चले जाते हैं, तो मुझे आपके अनुभवों के बारे में सुनने में सबसे अधिक दिलचस्पी होगी।


2
स्टैक एक्सचेंज सवाल पूछने के लिए है, जीवन की कहानियों को पोस्ट करने के लिए नहीं! आपका प्रश्न लगता है "क्या कॉमन लिस्प या ओकेमेल का उपयोग करने वाली कोई वैज्ञानिक कंप्यूटिंग परियोजनाएं हैं", सही?
खिनसेन

4
सहमत, यह एक ब्लॉग पोस्ट की तरह थोड़ा अधिक पढ़ता है, लेकिन मुझे आधार पसंद है। कोई भी मौका जिसे आप 2-3 पैराग्राफ में आज़मा सकते हैं और कम कर सकते हैं?
एरन अहमदिया

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

1
@FaheemMitha: "आदर्श दुनिया" में आप इसके माध्यम से मध्य मार्ग का उल्लेख करते हैं, यह सभी हाथ से अनुकूलित विधानसभा होगी ... मेरे लिए निराशाजनक लगता है!
मेवप्लप

3
@FaheemMitha: सबसे अच्छी बात मुझे लगता है कि आप अपने प्रश्न को बेहतर बनाने के लिए कर सकते हैं, यह प्रश्न स्पष्ट करने के लिए है। ऐसा लगता है कि आप अपने अनुभवों के बारे में एक कहानी बता रहे हैं (जो सब ठीक है), और फिर अंत में, आप अपनी कहानी के अंत में एक बयान के रूप में प्रश्न को दफन करते हैं। ("निष्कर्ष निकालने के लिए, मैं सोच रहा हूँ ...") सबसे अच्छी बात यह है कि आप उस हिस्से को एक सवाल बना सकते हैं, इसलिए आपके प्रश्न को संक्षिप्त करने वाले लोग आसानी से पहचान सकते हैं कि आप क्या पूछ रहे हैं। मुझे यह पता लगाने के लिए एक दो बार वापस जाना पड़ा।
ज्योफ ऑक्सबेरी

जवाबों:


18

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

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


जो खूबसूरत दिखती है! मैं अपने काम के लिए इसे जरूर देखूंगा। वर्तमान में मैं सैद्धांतिक रूप से संघनित मामले में अपने सभी कार्यों के लिए अजगर का उपयोग करता हूं, सिर्फ इसलिए कि तेजी से C ++ कोड प्राप्त होने से समय पहले स्थान पर C ++ में लिखे गए समय से
उपेक्षित होता है

9

प्रोग्रामिंग भाषाओं की गति, आकार और निर्भरता आपके "प्रश्न" में व्यक्त कई अलग-अलग चिंताओं को लपेटने का एक बहुत अच्छा काम करती है। यह 33 भाषाओं में समान बेंचमार्क के कार्यान्वयन के एक समूह की गति और कोडबेस आकार की तुलना करता है!

मैं मुख्य रूप से पायथन प्रेमी बन गया हूं क्योंकि कार्यक्रम के लिए अतिरिक्त समय की तुलना में अधिक कंप्यूटिंग समय होना बहुत आम है। मैं सीपीयू चक्रों के लिए समय की एक प्रतिज्ञा को त्यागने के लिए तैयार हूं, जो कि अधिक दिलचस्प चीज के लिए समर्पित हो सकता है।

इसके अलावा, जूलिया पर +1। मुझे लगता है कि जब मैं थोड़ा और अधिक स्थिर और व्यापक रूप से समर्थित हो जाता हूं, जब मानक मॉड्यूल को मेरे द्वारा पसंद किए जाने वाले काम के लिए लपेटा जाता है, तो मैं इसे स्विच कर सकता हूं।


4

OCaml के वैज्ञानिक अनुप्रयोगों के लिए, उदाहरण के लिए देखें

विज्ञान में लिस्प के लिए, उदाहरण के लिए देखें

मुझे यकीन है कि कई और संदर्भ हैं। हालाँकि, मैं किसी भी बड़े शोध प्रोजेक्ट का हवाला नहीं दे सकता, जिसमें कम्प्यूटेशनल काम OCaml या Lisp में किया गया हो। दोनों में से किसी एक को चुनने का मतलब है रिश्तेदार अलगाव में काम करना।

आपको जूलिया में भी दिलचस्पी हो सकती है , वर्तमान में विकास के तहत वैज्ञानिक कंप्यूटिंग के लिए एक नई भाषा, स्पष्ट लिस्प प्रभावों के साथ।


1
मुझे शायद यह अधिक स्पष्ट करना चाहिए था कि मैं पहले हाथ के अनुभव में दिलचस्पी रखता हूं। मैं इसे दर्शाने के लिए अपना प्रश्न संपादित करूँगा।
फहीम मीठा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.