"जूलिया" वैज्ञानिक कंप्यूटिंग भाषा परियोजना कितनी परिपक्व है?


55

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

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

मैं जूलिया परियोजना के बारे में विशिष्ट प्रासंगिक तथ्यों पर ध्यान केंद्रित करने वाले उत्तरों की सराहना करता हूं ; मैं अन्य परियोजनाओं के साथ अनुभव के आधार पर राय में कम दिलचस्पी रखता हूं।

विशेष रूप से, ज्यॉफ ऑक्सबेरी की एक टिप्पणी बताती है कि जूलिया एपीआई अभी भी प्रवाह की स्थिति में है, जब इसे बदलने पर कोड को अपडेट करने की आवश्यकता होती है। मैं यह जानना चाहता हूं कि यह किस हद तक है: एपीआई के कौन से क्षेत्र स्थिर हैं, और जिनके बदलने की संभावना है?

मुझे लगता है कि आम तौर पर मैं ज्यादातर रैखिक बीजगणित (जैसे eigenproblems को हल करना) कर रहा हूं, कई चर के साथ ODE का संख्यात्मक एकीकरण, और PyPlot और / या OpenGL का उपयोग करके साजिश रच रहा है, साथ ही निम्न-स्तरीय सी-स्टाइल नंबर क्रंचिंग (जैसे मोंटे कार्लो सिमुलेशन के लिए) )। क्या इन क्षेत्रों में जूलिया की पुस्तकालय प्रणाली पूरी तरह से विकसित है? विशेष रूप से, एपीआई उन प्रकार की गतिविधियों के लिए अधिक या कम स्थिर है, या क्या मुझे पता चलेगा कि मेरा पुराना कोड जूलिया के नए संस्करण में अपग्रेड करने के बाद टूट जाएगा?

अंत में, क्या ऐसे अन्य मुद्दे हैं जो इस बात पर विचार करने के लायक होंगे कि वर्तमान समय में जूलिया को गंभीर काम के लिए उपयोग करना है या नहीं?


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

1
व्यक्तिपरक होना अपने आप में स्टैक एक्सचेंज के प्रारूप के लिए एक प्रश्न को अनुपयुक्त नहीं बनाता है - देखें blog.stackoverflow.com/2010/09/good-subjective-bad-subjective । यदि आपके पास व्यक्तिपरक प्रश्नों के खिलाफ एक साइट नीति है तो मैं माफी मांगता हूं। हालांकि, मुझे लगता है कि यह केवल थोड़ा व्यक्तिपरक है: पहले से ही आपकी टिप्पणी मुझे स्थिति का एक बेहतर विचार देती है, जितना मैंने सवाल पूछने से पहले किया था। किसी बाहरी व्यक्ति के लिए यह अनुमान लगाना बहुत कठिन हो सकता है कि कोई प्रोजेक्ट कितना परिपक्व है।
नथानिएल

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

आप "अच्छे व्यक्तिपरक बनाम बुरे व्यक्तिपरक" (मेरे पसंदीदा स्टैक एक्सचेंज ब्लॉग पोस्टों में से एक) के बारे में बिल्कुल सही हैं; मैंने टिप्पणी पोस्ट की क्योंकि मुझे प्रतिक्रिया देखने का इंतजार है। इन के साथ "आप _____ के बारे में क्या सोचते हैं?" सवाल, जवाब एक जोड़े को बहुत अच्छी तरह से सोची-समझी पोस्ट तक सीमित कर सकते हैं, या वे व्यापक हो सकते हैं, सभी जगह, दोहराए गए "मुझे भी!" पोस्ट नहीं। पूर्व महान है; उत्तरार्द्ध ऐसा नहीं है, इसलिए मैं आपको यह कहने के लिए शिष्टाचार दे रहा हूं: आइए देखें कि यह कैसे खेलता है।
ज्योफ ऑक्सीबेरी

3
एक इनाम, @AntonMenshov पोस्ट करने के लिए धन्यवाद। मैं ध्यान देता हूं कि जूलिया ने अब संस्करण 1.0 पारित कर दिया है (जो कि 2014 में ऐसा नहीं था जब मैंने इसे पोस्ट किया था), इसलिए वास्तव में अप टू डेट उत्तर देना बहुत अच्छा होगा।
नथानिएल

जवाबों:


43

जूलिया, इस बिंदु पर (मई 2019, v1.2 के साथ जूलिया v1.1 बाहर आने के लिए) वैज्ञानिक कंप्यूटिंग के लिए काफी परिपक्व है। V1.0 रिलीज ने वार्षिक रूप से कोड टूटने का संकेत दिया । इसके साथ, बहुत सारे वैज्ञानिक कंप्यूटिंग पुस्तकालयों को बिना किसी व्यवधान के बढ़ने का समय मिला है। जूलिया पैकेज का व्यापक अवलोकन pkg.julialang.org पर पाया जा सकता है ।

कोर वैज्ञानिक कंप्यूटिंग के लिए, DifferentialEquations.jl अंतर समीकरण (ODEs, SDES, DAEs, DDEs, गिलेस्पी सिमुलेशन, आदि), के लिए पुस्तकालय Flux.jl तंत्रिका नेटवर्क के लिए, और कूद गणितीय प्रोग्रामिंग (अनुकूलन के लिए पुस्तकालय: रैखिक, द्विघात, मिश्रित पूर्णांक, आदि प्रोग्रामिंग) वैज्ञानिक कंप्यूटिंग पारिस्थितिकी तंत्र के तीन कोने हैं। ईपीआईआरके इंटीग्रेटर्स , रनगे - कुट्टा - निस्ट्रॉम , स्टिफ / डिफरेंशियल- अलजेबेरिक डिफरेंशियल डिफरेंशियल डिफरेंशियल डिफरेंशियल इक्वेशन डिफरेंशियल डिफरेंशियल जैसी बड़ी डेवलपमेंट टीम को लागू करने के साथ विशेष रूप से डिफरेंशियल इक्वेशन लाइब्रेरी अन्य भाषाओं में आपको और अधिक विकसित होती है। , औरअनुकूली समय कठोर स्टोकेस्टिक अंतर समीकरण इंटीग्रेटर्स, समीपस्थ संवेदनशीलता विश्लेषण , रासायनिक प्रतिक्रिया डीएसएल , मैट्रिक्स-मुक्त न्यूटन-क्रायलोव, और पूर्ण (डेटा ट्रांसफर फ्री) जीपीयू संगतता जैसी अन्य अच्छाइयों का एक गुच्छा , तंत्रिका अंतर समीकरणों के प्रशिक्षण के साथ, सभी के साथ। शानदार बेंचमार्क परिणाम (अस्वीकरण: मैं प्रमुख डेवलपर हूं)।

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

उन तरीकों में से एक जहां रचना सबसे उपयोगी है, रैखिक बीजगणित में है। उदाहरण के लिए ODE सॉल्वर्स आपको निर्दिष्ट करने की अनुमति देता है jac_prototype, जिससे आप इसे जैकबियन के लिए प्रकार देते हैं जो आंतरिक रूप से उपयोग किया जाएगा। बेशक, लिनेराएल्जेब्रा मानक पुस्तकालय में चीजें हैं जैसे Symmetricऔर Tridiagonalआप यहां उपयोग कर सकते हैं, लेकिन टाइप जेनेरिक एल्गोरिदम में रचना की उपयोगिता को देखते हुए, लोगों ने अब तक जाकर पूरे सरणी प्रकार के पुस्तकालयों का निर्माण किया है। BandedMatrices.jl और BlockBandedMatrices.jl ऐसी लाइब्रेरी हैं, जो बैंडेड मैट्रिक्स प्रकार को परिभाषित करती हैं lu, जिनमें फास्ट ओवरलोड होते हैं, जो उन्हें आंशिक अंतर समीकरणों की प्रणालियों के कठोर एमओएल विवेक के समाधान में तेजी लाने का एक अच्छा तरीका बनाते हैं।PDMats.jlसकारात्मक-निश्चित मैट्रिक्स के विनिर्देश के लिए अनुमति देता है। Elemental.jl आपको एक वितरित विरल जैकबियन को परिभाषित करने की अनुमति देता है। CuArrays.jl GPU पर सरणियों को परिभाषित करता है। आदि।

फिर आपके पास आपके सभी प्रकार के नंबर हैं। Unitful.jl संकलन समय पर यूनिट की जाँच करता है, इसलिए यह एक ओवरहेड-फ्री यूनिट्स लाइब्रेरी है। DoubleFloats.jl Quadmath.jl और ArbFloats.jl के साथ एक उच्च उच्च परिशुद्धता पुस्तकालय है । फॉरवर्डडिफ़.एलएल फ़ॉरवर्ड-मोड स्वचालित भेदभाव के लिए एक पुस्तकालय है जो दोहरी संख्या अंकगणित का उपयोग करता है। और मैं इनकी सूची जारी रख सकता हूं। और हाँ, आप उन्हें पर्याप्त रूप से सामान्य जूलिया लाइब्रेरी में विभेदित कर सकते हैं जैसे कि डिफरेंशियल ईक्शन्स.ज्ल। यहां तक ​​कि कुछ ऐसा ApproxFun.jlजो बीजीय वस्तुओं के रूप में कार्य करता है (चेबफुन की तरह) इस जेनेरिक प्रणाली के साथ काम करता है, जिससे पीडीई के विनिर्देशन एक फ़ंक्शन स्थान में स्केल पर ODEs के रूप में होते हैं।

कंपोजिबिलिटी के फायदे और जिस तरह से जेनेरिक जूलिया फंक्शंस पर नए और कुशल कोड बनाने के लिए उपयोग किया जा सकता है, उसे देखते हुए, शुद्ध जूलिया में मुख्य वैज्ञानिक कंप्यूटिंग कार्यक्षमता के कार्यान्वयन को प्राप्त करने के लिए बहुत काम किया गया है। Optim.jl nonlinear अनुकूलन के लिए, NLsolve.jl nonlinear प्रणालियों को सुलझाने के लिए, IterativeSolvers.jl रैखिक प्रणालियों और eigensystems की पुनरावृत्ति समाधानकर्ताओं के लिए, BlackBoxOptim.jl ब्लैक बॉक्स अनुकूलन, आदि यहां तक कि तंत्रिका नेटवर्क पुस्तकालय के लिए Flux.jl सिर्फ CuArrays उपयोग करता है। jl की GPU क्षमताओं के लिए कोड का jl का स्वचालित संकलन। डिफेक्यूफ्लक्स.ज्ल में न्यूरल डिफरेंशियल इक्वेशन जैसी चीजों को बनाने वाली यह रचना मुख्य थीTuring.jl जैसी संभावित प्रोग्रामिंग भाषाएं भी अब काफी परिपक्व हो गई हैं और एक ही अंतर्निहित टूलिंग का उपयोग करती हैं।

चूँकि जूलिया की लाइब्रेरियाँ मौलिक रूप से कोड जनरेशन टूल्स पर आधारित होती हैं, इसलिए इसमें कोई आश्चर्य नहीं होना चाहिए कि कोड जनरेशन के आसपास बहुत सारे टूलिंग हैं। जूलिया की प्रसारण प्रणाली मक्खी पर लगे हुए गुठली उत्पन्न करती है जो ऊपर वर्णित सुविधाओं का एक बहुत कुछ देने के लिए सरणी प्रकारों द्वारा अतिभारित हैं । CUDAnative.jl जूलिया कोड को GPU गुठली में संकलित करने की अनुमति देता है। ModelingToolkit.jl गणितीय कोड को बदलने के लिए एक प्रतीकात्मक प्रणाली में स्वचालित रूप से डी-शर्करा एएसटी को हटा देता है। Cassette.jlआपको संकलन समय से पहले अपने फ़ंक्शन को बदलने के लिए नियमों का उपयोग करके किसी और के मौजूदा फ़ंक्शन को "ओवरडब" करने की अनुमति देता है (उदाहरण के लिए: अपने सभी सरणी आवंटन को स्थिर सरणी आवंटन में बदल दें और जीपीयू में संचालन स्थानांतरित करें)। यह अधिक उन्नत टूलींग है (मुझे उम्मीद नहीं है कि कंपाइलर का प्रत्यक्ष नियंत्रण लेने के लिए हर कोई वैज्ञानिक कंप्यूटिंग कर रहा है), लेकिन यह है कि अगली पीढ़ी के टूलींग का एक बहुत कुछ बनाया जा रहा है (या इसके बजाय, कैसे विशेषताएं खुद लिख रही हैं)।

समानता के लिए, मैंने जीपीयू का उल्लेख किया है, और जूलिया ने अंतर्निहित मल्टीथ्रेडिंग और वितरित कंप्यूटिंग का निर्माण किया है । जूलिया की मल्टीथ्रेडिंग बहुत जल्द एक समानांतर-कार्य रनटाइम (PARTR) आर्किटेक्चर का उपयोग करेगी जो नेस्टेड मल्टीड्रेडिंग के स्वचालित शेड्यूलिंग के लिए अनुमति देता है । यदि आप MPI का उपयोग करना चाहते हैं, तो आप MPI.jl का उपयोग कर सकते हैं । और फिर, निश्चित रूप से, इसका उपयोग करने का सबसे आसान तरीका सिर्फ अपने कार्यों में समानता का उपयोग करने के लिए एक AbstractArray प्रकार सेटअप का उपयोग करना है।

जूलिया में बुनियादी अंतर्निहित पारिस्थितिकी तंत्र भी है जो आप वैज्ञानिक अनुप्रयोगों के लिए उपयोग किए जाने वाले सामान्य उद्देश्य की भाषा की अपेक्षा करेंगे। यह है जूनो आईडीई एक साथ breakpoints के साथ निर्मित डिबगर , यह है Plots.jl भूखंडों के सभी प्रकार बनाने के लिए। बहुत सारे विशिष्ट उपकरण अच्छे हैं, जैसे कि Revise.jl एक फ़ाइल को सहेजते समय स्वचालित रूप से आपके फ़ंक्शन / लाइब्रेरी को अपडेट करता है। आपके पास अपने DataFrames.jl , सांख्यिकी पुस्तकालय , आदि हैं। सबसे अच्छी पुस्तकालयों में से एक वास्तव में वितरण है ।jl जो आपको वितरण के लिए एल्गोरिदम जेनेरिक लिखने देता है (उदाहरण के लिए:rand(dist)जो भी वितरण पारित किया गया था, उसकी एक यादृच्छिक संख्या लेता है, और इसमें एकतरफा और बहुभिन्नरूपी वितरण का भार होता है (और निश्चित रूप से प्रेषण समय पर होता है, यह सब वितरण के लिए विशिष्ट फ़ंक्शन को हार्डकोड करने के रूप में तेज़ होता है)। डेटा हैंडलिंग टूलिंग , वेब सर्वर आदि का एक गुच्छा है , जिसे आप नाम देते हैं। इस बिंदु पर यह काफी परिपक्व है कि अगर कोई बुनियादी वैज्ञानिक चीज है और आप इसके अस्तित्व की उम्मीद करेंगे, तो आप इसे केवल .jl या जूलिया के साथ Google करेंगे और यह दिखाई देगा।

फिर क्षितिज पर ध्यान रखने के लिए कुछ चीजें हैं। PackageCompiler जूलिया पुस्तकालयों से बायनेरिज़ का निर्माण करना चाह रहा है, और इसमें पहले से ही कुछ सफलताएं हैं लेकिन अधिक विकास की आवश्यकता है। Makie.jl सहभागिता के साथ GPU- त्वरित प्लॉटिंग के लिए एक पूरी लाइब्रेरी है, और इसे अभी भी कुछ और काम करने की आवश्यकता है लेकिन यह वास्तव में जूलिया में मुख्य प्लॉटिंग लाइब्रेरी बनना चाहता है। Zygote.jl एक स्रोत-से-स्रोत स्वचालित भेदभाव लाइब्रेरी है, जिसमें अनुरेखण-आधारित AD (फ़्लक्स ट्रैकर, PyTorch, जैक्स) के प्रदर्शन के मुद्दे नहीं हैं, और यह सभी शुद्ध जूलरी कोड पर काम करना चाहता है। आदि।

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


2
बहुत बढ़िया जवाब। एक प्रश्न: क्या जूलिया अनुसंधान कोड से एक उत्पादन प्रणाली में सुंदर विकास की अनुमति देता है? या क्या यह और अधिक पसंद है जहां कोई उम्मीद नहीं है?
user14717

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

29

यदि नहीं, तो क्या मुझे फिर से विचार करने से पहले कितनी देर तक प्रतीक्षा करनी चाहिए, इसका मोटा-मोटा आदेश देना संभव है?

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

उदाहरण 1: SciPy की शुरुआत 2001 या उसके बाद हुई थी। 2009 में, Scipy 0.7.0 जारी किया गया था, और ODE इंटीग्रेटर का VODE (जो कि समतुल्य है ode15s, लगभग ode15sNDD- आधारित है, VODE BDF / एडम्स-बैशफोर्थ, निर्भर करता है) के लिए एक इंटरफ़ेस था । SciPy 0.10.0 के साथ, एक इंटरफ़ेस dopri5, जो लगभग MATLAB के समतुल्य है ode45, एक रन-कुट्टा 4th ऑर्डर विधि आमतौर पर अंडरग्रेजुएट्स के लिए पहले व्यावहारिक संख्यात्मक एकीकरण विधि के रूप में पेश की जाती है। SciPy 0.10.0 दिसंबर 2011 में जारी किया गया था, और मुझे पता था कि हर इंजीनियरिंग अंडरग्रेजुएट के लिए शुरू किए गए MATLAB की एक विशेषता को शामिल करने में उन्हें लगभग 10 साल लग गए।

उदाहरण 2: 1984 में मैथवर्क्स की स्थापना हुई थी। अपनी पहली रिलीज में, उन्होंने JACKPAC (C जैक लिटिल के बाद, जो एक MathWorks इंजीनियर ने लिखा था) के नाम C से LAPACK पोर्ट का उपयोग किया। उन्होंने इसे 2000 तक LAPACK से प्रतिस्थापित नहीं किया।

जूलिया को कम समय लग सकता है, लेकिन मुझे मुख्यधारा बनने के लिए लगभग 10 साल लगेंगे। (यह पहले से ही एक वर्ष या तो बाहर हो गया है; शायद 9-10 वर्ष, फिर?)

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

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

संपादित करें: ऑरेलियस एक अच्छा बिंदु लाता है:

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

मूल उत्तर में, मैंने "क्या जूलिया मुख्यधारा बनने में सफल होगा?" जितना संभव। असफल होना आसान है; सफलता मुश्किल है। मुझे लगता है कि जूलिया की सबसे अच्छी तुलना MATLAB, R और ऑक्टेव जैसी तकनीकी कंप्यूटिंग भाषाओं से है। एचपीसी भाषा (चैपल, फोर्ट्रेस, यूपीसी, आदि) में तकनीकी कंप्यूटिंग भाषाओं की तुलना में अधिक संकीर्ण दर्शक हैं, और सामान्य प्रयोजन भाषाओं (सी, पायथन, सी ++, आदि) में तकनीकी कंप्यूटिंग भाषाओं की तुलना में व्यापक दर्शक हैं।

कुछ मुझे लगता है कि जूलिया अभिव्यंजना का त्याग किए बिना प्रदर्शन के लिए डिजाइन करने में मदद करता है। जूलिया C, MATLAB, R या यहां तक ​​कि पायथन की तरह संकलित भाषाओं के साथ अधिक प्रतिस्पर्धी है। यह डिज़ाइन लक्ष्य भी एक विशेषता है जो मौजूदा भाषाओं के लोगों को आकर्षित कर सकता है, जैसे:

  • जो लोग प्रदर्शन के बारे में बहुत परवाह करते हैं और सी और फोरट्रान जैसी भाषाओं से आते हैं, लेकिन संकलित भाषा से व्याख्या की गई भाषा की कम पंक्तियों (साथ ही एक REPL के लिए) के लिए एक छोटे से प्रदर्शन (शायद 2ish का एक कारक) का त्याग करने के लिए तैयार हैं। अधिक तेजी से विकास और परीक्षण)।
  • जो लोग उच्च उत्पादकता की परवाह करते हैं और पायथन, आर, और MATLAB जैसी भाषाओं से आते हैं, लेकिन अधिक प्रदर्शन चाहते हैं। जब निष्पादन की बात आती है, तो शुद्ध पायथन, शुद्ध MATLAB, और शुद्ध R धीमे होते हैं। उन भाषाओं के डेवलपर्स संकलित भाषाओं में पुस्तकालयों को लपेटने के लिए अपने रास्ते से बाहर चले गए हैं, लेकिन आप सब कुछ नहीं लपेट सकते हैं, और कुछ बिंदु पर, मूल भाषा आपको धीमा करने जा रही है। कोर जूलिया तेज है, जो आपको और अधिक तेजी से विज्ञान करने की अनुमति देता है।
  • जो लोग फ्री सॉफ्टवेयर की परवाह करते हैं। जूलिया की व्याख्या और नि: शुल्क है (इसलिए पायथन, ऑक्टेव, आदि); MATLAB नहीं है।

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

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


क्या आपको लगता है कि जूलिया वास्तव में मुख्यधारा बन जाएगी, और न केवल इतनी सारी भाषाओं की तरह अश्लीलता में मर जाती है? SciPy / numpy के पास कभी न बढ़ने वाले अजगर समुदाय का समर्थन है, जो जूलिया के पास नहीं है। मुझे गलत मत समझो, मुझे C ++ / Python / Fortran / Matlab (और मुझे जूलिया के बारे में कुछ भी नहीं पता है) की तुलना में एक बेहतर उपकरण उपलब्ध होना पसंद है, लेकिन नई एचपीसी भाषाओं में कई प्रयास हुए हैं जो विफल रहे हैं।
ऑरेलियस

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

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

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

21

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

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

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

कई उदाहरणों में मैंने कार्यात्मक परिमित तत्व कोड के निर्माण के बाद कुछ ही घंटों में C प्रदर्शन (अपने स्वयं के C कोड की तुलना में) प्राप्त किया है। अब तक अगर मैं केवल जूलिया सुविधाओं का उपयोग करता हूं, जो आमतौर पर सी की तुलना में ~ 3X धीमी के भीतर मिलता है। इसके बाद मैं हॉटस्पॉट्स को सी फ़ंक्शन के साथ बदल देता हूं (जूलिया इनकी पहचान करने में मदद करने के लिए स्टैक सैंपलिंग प्रोफाइलर के साथ आता है)। अक्सर इसके लिए कोड की आपत्तिजनक हॉटस्पॉट लाइनों को "ccall" के साथ बदलना पड़ता है, क्योंकि जूलिया किसी भी मार्शलिंग को संभालती है।

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


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

मैं स्रोत के साथ अद्यतित रहता हूं क्योंकि मैं भी परियोजना में योगदान करने का प्रयास कर रहा हूं। अब तक मुझे कोई विराम नहीं मिला है, लेकिन मेरे पास लेखन और सिद्धांत की एक बड़ी अवधि थी और अब मैं अपने कोड पर वापस आ रहा हूं और हम देखेंगे कि यह कैसे होता है। Numpy सरणियाँ डिफ़ॉल्ट रूप से 0-अनुक्रमित और पंक्ति-प्रमुख हैं। और जूलिया डिफ़ॉल्ट रूप से 1-अनुक्रमित और स्तंभ-प्रमुख है, आमतौर पर यह समस्या नहीं बनाता है लेकिन असंरचित डेटा प्लॉटिंग के लिए सूचकांक सरणियों को पास करने की आवश्यकता होती है, इसलिए मुझे अजीब त्रिभुजाकार जाल के पास पास p-1 जैसी अजीब चीजें करनी पड़ती हैं। रूटीन, जहां p एक इंडेक्स मैप है।
रीड.टेकसन

9

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

  • जूलिया के कोर के बाहर के पैकेज विश्वसनीय नहीं हैं। वे अपडेट के साथ टूटते हैं, बदलते हैं, प्रतिस्थापित हो जाते हैं, कभी-कभी अधूरे या बस टूट जाते हैं।
  • जूलिया की समानता की विशेषताएं (सबसे होनहार संभावित मतलाब हत्यारा विशेषताएं) अपरिपक्व हैं। आप विभाजन दोष, स्मृति लीक, क्रैश और निराशाजनक प्रदर्शन का सामना करेंगे। कभी-कभी वे जूलिया के अन्य हिस्सों के साथ अच्छी तरह से नहीं खेलते हैं, उदाहरण के लिए रैखिक सिस्टम या कोर के बाहर पैकेज के लिए कुछ सॉल्वर। हालांकि, इन विशेषताओं में आशाजनक ध्वनि है, वे अक्सर मेरे लिए पर्याप्त असफल रहे। लगभग कभी भी यह केवल @parallelलूप के लिए लिखने के लिए पर्याप्त नहीं था , जहां सिद्धांत रूप में यह होना चाहिए।
  • कई छोटी चीजें, छोटे कीड़े और मुद्दे जो किसी के साथ रह सकते हैं: इतना अच्छा और कभी-कभी गलत कॉल स्टैक निशान नहीं, थोड़ा छोटी गाड़ी की व्याख्या करने वाला इतिहास, पैकेजों की धीमी गति से लोडिंग, एक या किसी अन्य पैकेज / फ़ंक्शन के खराब प्रदर्शन, आदि ने मुझे परेशान किया। सबसे PyPlot पैकेज है, matplotlib के लिए एक आवरण, वर्तमान में इसका कोई विकल्प नहीं है। यह वास्तव में बहुत अच्छा है कि यह वहां है और यह ज्यादातर काम करता है। लेकिन अगर आपको डेटा प्लॉट करने की आवश्यकता है, तो बहुत धीमी गति से प्रदर्शन और समस्याओं के लिए तैयार रहें।

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

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