मेरे कम्प्यूटेशनल विज्ञान पीएचडी कार्यक्रम में, हम लगभग विशेष रूप से सी ++ और फोरट्रान में काम कर रहे हैं। ऐसा लगता है कि कुछ प्रोफेसर एक दूसरे को पसंद करते हैं। मैं सोच रहा हूं कि कौन सी 'बेहतर' है या एक निश्चित परिस्थिति में दूसरे से बेहतर है।
मेरे कम्प्यूटेशनल विज्ञान पीएचडी कार्यक्रम में, हम लगभग विशेष रूप से सी ++ और फोरट्रान में काम कर रहे हैं। ऐसा लगता है कि कुछ प्रोफेसर एक दूसरे को पसंद करते हैं। मैं सोच रहा हूं कि कौन सी 'बेहतर' है या एक निश्चित परिस्थिति में दूसरे से बेहतर है।
जवाबों:
जैसा कि अक्सर होता है, विकल्प (1) उस समस्या पर निर्भर करता है जिसे आप हल करने की कोशिश कर रहे हैं, (2) आपके पास जो कौशल है, और (3) जिन लोगों के साथ आप काम करते हैं (जब तक कि यह एक एकल परियोजना नहीं है)। मैं इस समय के लिए (3) को अलग छोड़ दूंगा क्योंकि यह हर किसी की व्यक्तिगत स्थिति पर निर्भर करता है।
समस्या निर्भरता: सरणी प्रसंस्करण में फोरट्रान excels। यदि आपकी समस्या को सरल डेटा संरचनाओं और विशेष रूप से सरणियों के संदर्भ में वर्णित किया जा सकता है, तो फोरट्रान अच्छी तरह से अनुकूलित है। फोरट्रान प्रोग्रामर गैर-स्पष्ट मामलों (यहां तक कि रेखांकन का प्रतिनिधित्व करने के लिए) में सरणियों का उपयोग करके समाप्त होते हैं। सी ++ जटिल और अत्यधिक गतिशील डेटा संरचनाओं के लिए बेहतर अनुकूल है।
कौशल निर्भरता: अच्छे फोरट्रान कार्यक्रमों को लिखने की तुलना में अच्छा C ++ प्रोग्राम लिखने में बहुत अधिक प्रोग्रामिंग अनुभव होता है। यदि आप थोड़ा प्रोग्रामिंग अनुभव के साथ शुरू करते हैं और आपके पास अपनी नौकरी के उस पहलू को सीखने के लिए केवल इतना समय है, तो आपको संभवतः C ++ सीखने की तुलना में फोरट्रान सीखने में बेहतर लाभ मिलेगा। यह मानते हुए कि आपकी समस्या फोरट्रान के अनुकूल है।
हालांकि, केवल फोरट्रान और सी ++ की तुलना में प्रोग्रामिंग में अधिक है। मैं किसी को कम्प्यूटेशनल विज्ञान में जाने की सलाह दूंगा जैसे कि पायथन जैसे गतिशील उच्च स्तरीय भाषा के साथ शुरू करना। हमेशा याद रखें कि आपका समय सीपीयू समय से अधिक मूल्यवान है!
मुझे लगता है कि C ++ और फोरट्रान दोनों ही काफी अच्छे हैं और अच्छी तरह से काम करते हैं।
हालांकि मुझे लगता है कि फोर्ट्रान संख्यात्मक एल्गोरिदम के लिए बेहतर है , एल्गोरिदम के लिए जो सरणियों का उपयोग करके व्यक्त किया जा सकता है और अन्य परिष्कृत डेटा संरचनाओं की आवश्यकता नहीं है, इसलिए परिमित अंतर / तत्वों, पीडीई सॉल्वर, इलेक्ट्रॉनिक संरचना गणना जैसे क्षेत्रों में। फोरट्रान एक डोमेन विशिष्ट भाषा है। विशेष रूप से मुझे लगता है कि एक वैज्ञानिक (जरूरी नहीं कि एक कंप्यूटर विज्ञान विशेषज्ञ) द्वारा सी ++ की तुलना में फोरट्रान में तेजी से कार्यक्रम लिखना आसान हो ।
C ++ एक सामान्य उद्देश्य वाली भाषा है, इसलिए कोई भी इसमें कोई भी एल्गोरिथ्म व्यक्त कर सकता है, और यह निश्चित रूप से एल्गोरिदम के लिए बेहतर है जो कि एचपीसी क्षेत्र से एरे का उपयोग करके व्यक्त नहीं किया जा सकता है, शायद कुछ रेखांकन, मेष जनरेटर, प्रतीकात्मक हेरफेर और इतने पर।
सी ++ में सरणी एल्गोरिदम लिखना भी संभव है, लेकिन मेरे अनुभव में, इसके लिए बहुत अधिक कंप्यूटर विज्ञान ज्ञान और सामान्य रूप से अधिक काम करने की आवश्यकता है (यानी सरणी हेरफेर के लिए कक्षाएं बनाने या पुन: उपयोग करने की आवश्यकता है, और स्मृति प्रबंधन को हाथ से या कुछ का उपयोग करके संभालना होगा लाइब्रेरी जैसे ट्रिलिनो से Teuchos)। गैर-विशेषज्ञ बहुत अच्छे फोरट्रान प्रोग्राम लिखते हैं, लेकिन भयानक सी ++ प्रोग्राम (मेरे अपने अनुभव से बात करते हैं)।
अस्वीकरण: मैं व्यक्तिगत रूप से फोरट्रान को बहुत पसंद करता हूं और मैं इसे संख्यात्मक कंप्यूटिंग के लिए C ++ से अधिक पसंद करता हूं। मैंने C ++ दैनिक में प्रोग्रामिंग के लगभग 2 साल बिताए हैं, और आधुनिक फोरट्रान दैनिक (परिमित तत्वों के क्षेत्र में) में लगभग एक वर्ष की प्रोग्रामिंग की है। मैं पायथन और साइथन का भी बहुत उपयोग करता हूं।
मैं अपने दो सेंट को देर से तरह से फेंक रहा हूं, लेकिन मैंने केवल इस धागे को देखा है और मुझे लगता है कि, पोस्टीरिटी के लिए, कुछ बिंदु हैं जो सख्त बनाने की आवश्यकता है।
निम्नलिखित में ध्यान दें कि मैं C और C ++ के बारे में बात करूंगा। क्यों? खैर, अन्यथा यह सेब और संतरे है जो कि फोरट्रान के रूप में कुछ के साथ पूर्ण-गतिशील गतिशील रूप से ऑब्जेक्ट-उन्मुख भाषा की तुलना करते हैं। हां, नवीनतम फोरट्रान मानकों के कुछ आधुनिक कार्यान्वयन केवल इससे अधिक कर सकते हैं, लेकिन बहुत कम लोग वास्तव में उनका उपयोग करते हैं, और इसलिए जब हम फोरट्रान की बात करते हैं, तो हम सरल, स्थिर और अनिवार्य भाषा सोचते हैं। जहाँ C बहुत अधिक है, इसलिए मैं निम्नलिखित के लिए C को C ++ से बदल दूंगा।
सबसे पहले, फोरट्रान / सी के बेहतर संकलक होने की कोई भी चर्चा मूट है। समर्पित सी / फोरट्रान संकलक अतीत की बात है। Gcc / gfortran और icc / ifc दोनों एक ही बैक-एंड के लिए अलग-अलग फ्रंट-एंड हैं, अर्थात आपका प्रोग्राम फ्रंट-एंड द्वारा एक अमूर्त विवरण में बदल जाएगा और फिर बैक-एंड द्वारा अनुकूलित और असेंबल किया जाएगा। यदि आप लिखते हैं, शब्दार्थ, फोरट्रान में या सी में एक ही कोड, संकलक, दोनों ही मामलों में, एक ही विधानसभा का उत्पादन करेगा जो बस के रूप में तेजी से चलेगा।
यह अब मेरे दूसरे बिंदु की ओर जाता है: हम अभी भी मतभेद क्यों देखते हैं? समस्या यह है कि अधिकांश तुलनाओं को फोरट्रान प्रोग्रामर द्वारा सी या इसके विपरीत कुछ करने की कोशिश की जाती है। कभी ध्यान दें कि अधिकांश लेखक या कवि अपनी मूल भाषाओं में कैसे लिखना पसंद करते हैं? क्या आप ऐसी भाषा में कविता लिखना चाहते हैं जिसमें आप पूरी तरह से आश्वस्त नहीं हैं या घर पर नहीं हैं? बिल्कुल नहीं ... मैं खुद सी को अपनी "मूल" प्रोग्रामिंग भाषा मानता हूं। हालाँकि, मैंने तीन साल ऐसे समूह में काम करने में बिताए, जिसमें केवल फोरट्रान का उपयोग किया गया था, जिसमें मैंने एक निश्चित स्तर का प्रवाह हासिल किया है। हालाँकि, मैं कभी भी फोरट्रान में अपने दम पर कुछ नहीं लिखता क्योंकि मैं सी के साथ अधिक सहज हूं और, परिणामस्वरूप, परिणामी कोड बेहतर होगा , जो भी आप इसे परिभाषित करते हैं।
तो मुख्य अंतर प्रोग्रामर में है, भाषा नहीं। तो कोई मतभेद नहीं हैं? खैर, काफी नहीं। कुछ उदाहरण निम्नलिखित हैं:
SIMD: चाहे वह SSE, SSE3 या AltiVec हो, यदि आप उन्हें फोरट्रान में उपयोग करना चाहते हैं, तो आप बेहतर उम्मीद करते हैं और प्रार्थना करते हैं कि कंपाइलर अनुमान लगाता है कि आप क्या चाहते हैं और ऐसा करते हैं। सौभाग्य। सी में आप आमतौर पर प्रत्येक वास्तुकला के लिए आंतरिक कार्य करते हैं, या, हाल ही में, जीसीसी में सामान्य SIMD वेक्टर प्रकार । अधिकांश फोरट्रान संकलक केवल लूप को अनियंत्रित करने के लिए SIMD निर्देशों का उपयोग करेंगे, लेकिन अगर आपके पास एक कर्नेल है जो गैर-स्पष्ट तरीके से डेटा के लघु वैक्टर पर काम करता है, तो संकलक बहुत शायद इसे नहीं देख पाएंगे।
विभिन्न हार्डवेयर आर्किटेक्चर: पूरे CUDA आर्किटेक्चर को Cernels के आसपास C. Yes में बनाया गया है। पोर्टलैंड ग्रुप के पास अब CUDA- सक्षम फोरट्रान कंपाइलर भी है, लेकिन यह वाणिज्यिक है, और सबसे महत्वपूर्ण बात, यह NVIDIA से नहीं है। वही OpenCL के लिए जाता है, जिसके लिए मुझे सबसे अच्छा मिल सकता है एक हालिया प्रोजेक्ट जो केवल कुछ बुनियादी कॉल का समर्थन करता है।
समानांतर प्रोग्रामिंग: हां, एमपीआई और ओपनएमपी दोनों सी और फोरट्रान दोनों के साथ ठीक काम करते हैं। हालाँकि, यदि आप अपने थ्रेड्स का वास्तविक नियंत्रण चाहते हैं, अर्थात यदि आपके पास पूरी तरह से गतिशील साझा-मेमोरी संगणना है, तो आप कोट्रान के साथ ठंड में बाहर रहेंगे। सी में आपके पास मानक पंथ हैं, जो गर्म और फजी नहीं हैं, फिर भी आपको तूफान के माध्यम से मिलेंगे। सामान्य तौर पर, अधिकांश कम्प्यूटेशंस जो ऑपरेटिंग सिस्टम, उदाहरण के लिए थ्रेड्स, प्रोसेस, फाइल सिस्टम आदि पर निर्भर होते हैं ... सी। ओह के साथ बेहतर तरीके से परोसे जाते हैं, और फोरट्रान के साथ अपनी नेटवर्किंग करने की कोशिश नहीं करते हैं।
उपयोग में आसानी: फोरट्रान सी के मुकाबले मतलब के करीब है। एक बार जब आप सभी अलग-अलग खोजशब्दों पर पहुँच जाते हैं और चर घोषित करने के तरीके को छोड़ देते हैं, तो बाकी कोड Matlab की तरह दिखता है, जो सीमित प्रोग्रामिंग अनुभव वाले उपयोगकर्ताओं के लिए अधिक सुलभ होता है।
इंटरऑपरेबिलिटी: जब आप सी में एक संरचना बनाते हैं, तो वास्तविक डेटा का लेआउट सीधा-आगे और नियतात्मक होता है। फोरट्रान में, यदि आप सूचक सरणियों या संरचित डेटा का उपयोग करते हैं, तो डेटा का वास्तविक लेआउट दृढ़ता से संकलक-निर्भर है, न कि सीधे-आगे, और आमतौर पर पूरी तरह से अवांछित। आप सी को फोरट्रान से बुला सकते हैं और इसके विपरीत, लेकिन यह सोचना शुरू न करें कि एक स्थिर सरणी से एक से दूसरे और पीछे से अधिक कुछ भी पारित करना आसान हो सकता है।
यह सब कुछ थोड़ा-सा geeky, निम्न-स्तरीय सामान है, लेकिन यह उच्च-प्रदर्शन कम्प्यूटिंग है जिसके बारे में हम बात कर रहे हैं, है ना? यदि आप अंतर्निहित हार्डवेयर प्रतिमानों का सर्वोत्तम उपयोग करने में रुचि नहीं रखते हैं, अर्थात कार्यान्वयन और / या एल्गोरिदम विकसित करना जो साझा / वितरित मेमोरी, थ्रेड्स, SIMD वेक्टराइजेशन, SIMT का उपयोग करके GPU, और इसी तरह के लिए सर्वोत्तम हैं, तो आप कर रहे हैं बस एक कंप्यूटर पर गणित कर रहा है।
यह बहुत लंबा हो गया है कि मैं जो कुछ भी मिलाता हूं, इसलिए यहां एक सारांश है - एक प्रकार का घर संदेश ले लो:
वैज्ञानिक सॉफ़्टवेयर के बारे में मेरी 15 वर्षों की सोच से: यदि आपका कोड 25% तेजी से चलता है क्योंकि आप इसे फोरट्रान में लिखते हैं, लेकिन इसे लिखने में आपको 4 गुना समय लगता है (कोई एसटीएल, जटिल डेटा संरचनाओं को लागू करने में कठिनाई आदि), तो फोरट्रान केवल तभी जीतता है जब आप अपने दिन का एक महत्वपूर्ण हिस्सा अंगूठे और अपनी गणना समाप्त होने की प्रतीक्षा में बिताते हैं। यह देखते हुए कि हम में से लगभग सभी के लिए सबसे मूल्यवान चीज हमारा अपना समय है, निष्कर्ष यह है: उस भाषा का उपयोग करें जो आपको अपने कोड को सबसे तेजी से विकसित करने, डिबग करने और परीक्षण करने की अनुमति देती है, इस कारण को अनदेखा करते हुए कि शायद यह संभव से अधिक धीमा हो। आपने इसे फोरट्रान में लिखा था।
मेरा दृष्टिकोण C ++ का उपयोग हर चीज के लिए किया गया है लेकिन कम्प्यूटेशनल गुठली, जो आमतौर पर विधानसभा में सबसे अच्छा लिखा जाता है; यह आपको पारंपरिक एचपीसी दृष्टिकोण के प्रदर्शन के सभी खरीदता है, लेकिन आपको SGEMM / DGEMM / CGEMM / ZGEMM जैसे कम्प्यूटेशनल गुठली को एक ही रूटीन में अधिभारित करके, इंटरफ़ेस को सरल बनाने की अनुमति देता है। स्पष्ट रूप से कच्चे बिंदुओं से बचने और अपारदर्शी वर्गों पर स्विच करके अमूर्त स्तर को बहुत अधिक उठाया जा सकता है, लेकिन यह एक अच्छा पहला कदम है।
मुझे लगता है कि C ++ का सबसे बड़ा नकारात्मक रूप संकलन समय में वृद्धि है, लेकिन, मेरे अनुभव में, विकास के समय में बचत इसके लिए अधिक है। एक और नकारात्मक पहलू यह है कि विक्रेता C ++ कंपाइलर में विक्रेता C और फोरट्रान संकलक की तुलना में अधिक बग होते हैं। पिछले वर्ष में, मुझे लगता है कि मैं C ++ कंपाइलर में लगभग दस बगों में चला गया हूं।
उन सभी ने कहा, मुझे लगता है कि निम्न-स्तरीय भाषाओं (और फोरट्रान) में लिखी गई वैज्ञानिक पैकेजों को पूर्ववत करना परिष्कृत डेटा संरचनाओं के लिए सुविधाजनक इंटरफेस को उजागर करने की अनिच्छा है: अधिकांश लोग फोरट्रान BLAS इंटरफ़ेस से संतुष्ट हैं, क्योंकि उन्हें केवल आवश्यकता है मैट्रिक्स का वर्णन करने के लिए संकेत और अग्रणी आयाम, लेकिन कुछ लोग तर्क देंगे कि सामान्य 40-पूर्णांक फोरट्रान विरल-डायरेक्ट सॉल्वर इंटरफ़ेस सुविधाजनक (cf. UHM, SuperLU, PETSc, और Trilinos) के करीब है।
संक्षेप में, मैं निम्न-स्तरीय कम्प्यूटेशनल गुठली के लिए असेंबली का उपयोग करने के लिए तर्क देता हूं, लेकिन उच्चतर भाषाओं में बाकी सभी चीजों के लिए, खासकर जब गैर-तुच्छ डेटा संरचनाओं पर काम कर रहा हो।
चूंकि मैं यहां नया हूं, इसलिए मैं पुराने सवालों को देख रहा था और मुझे यह पता चला। उम्मीद है कि यह पुराने लोगों को जवाब देने के लिए वर्जित नहीं है!
चूंकि किसी और ने इसका उल्लेख नहीं किया है, मुझे लगा कि मैं करूंगा। फोरट्रान 2003 को लगभग सभी प्रमुख संकलकों (इंटेल, आईबीएम, क्रे, एनएजी, पीसीजी) द्वारा पूरी तरह से समर्थित किया गया है, यहां तक कि (जल्द ही होने वाली) नवीनतम रिलीज 4.7 के साथ जीसीसी भी। फोरट्रान 2003 (और 2008) एक वस्तु उन्मुख भाषा है, यद्यपि C ++ की तुलना में थोड़ा अधिक क्रिया है। मुझे लगता है कि फोर्ट्रान के बारे में जो चीजें मुझे अच्छी लगती हैं उनमें से एक यह है कि मानक समिति वैज्ञानिक कंप्यूटिंग को देखती है क्योंकि यह प्राथमिक दर्शक है (मैं दूसरे दिन मेरे लिए इसे इंगित करने के लिए डेमियन रूसन का धन्यवाद करता हूं)।
मैं यह सब इसलिए लाता हूं ताकि C ++ प्रोग्रामर फोरट्रान प्रोग्रामर बनें, लेकिन ताकि फोरट्रान लोगों को पता चले कि उनके पास C ++ में स्विच करने या फ़ोर्टन 90/95 में ऑब्जेक्ट ओरिएंटेड अवधारणाओं का अनुकरण करने के अलावा अब और भी विकल्प हैं।
एक कैविटी मैं जोड़ूंगा कि कंपाइलरों में लागू किए जाने वाले रक्तस्राव के किनारे पर होने की लागत है। यदि आप अभी फोरट्रान 2003 में एक बड़ी परियोजना शुरू करते हैं, तो आप बगों में ठोकर खाएंगे और लगातार अपने कंपाइलर (विशेषकर यदि आप जीसीसी का उपयोग करते हैं) को अपडेट करने की आवश्यकता है, हालांकि यह पिछले कुछ महीनों में काफी बेहतर हो गया है!
C ++ के साथ समस्या यह है कि आपके पास प्रदर्शन को बर्बाद करने की कई संभावनाएं हैं, उदाहरण के लिए, एसटीएल, अपवादों, कक्षाओं (वर्चुअल ओवरहेड प्लस संरेखण समस्याओं) का उपयोग करके, ऑपरेटर ओवरलोडिंग (अनावश्यक नए / हटाए गए) या टेम्पलेट्स (कभी न खत्म होने वाला संकलन और गुप्त त्रुटियों)। सौम्य लगता है, लेकिन आप इस तरह से घंटों बर्बाद कर सकते हैं)।
हालाँकि, आप सामान्य पुस्तकालयों तक बेहतर पहुँच प्राप्त कर सकते हैं और संभवत: अपने कोड की दृश्यता (हालांकि यह दृढ़ता से क्षेत्र पर निर्भर करता है, और आपके पास अभी भी शुद्ध सी है)। और आप अभी भी R, Lush, Matlab / Scilab या यहां तक कि Python, Ruby या Lua जैसी स्क्रिप्ट भाषा में इसके कोड को लपेटकर फ़ोर्टन की लचीलेपन की कमी की भरपाई कर सकते हैं।
तीन तथ्य:
सी में F77- शैली एन-आयामी सरणियाँ: CnD (एक बेशर्म प्लग, भर्ती) का उपयोग कर कोई समस्या नहीं
F90 का मॉड्यूल सिस्टम खराब वातावरण तैयार करने और वातावरण बनाने के लिए शत्रुतापूर्ण है। (एक मॉड्यूल का नाम उसके फ़ाइल नाम से मेल नहीं खाता है, उदाहरण के लिए)
एक व्यक्तिगत छाप:
transfer()
, यहाँ हम आते हैं)फोरट्रान सरणी / मैट्रिक्स अभिकलन के लिए अनुकूलित है और किसी भी प्रकार के पाठ पार्सिंग के साथ काम करने के लिए पूरी तरह से दर्द है। सी और सी ++, संख्यात्मक कंप्यूटिंग (यह करीब है) में फोरट्रान के साथ मेल नहीं खा सकते हैं, लेकिन मुझे पाठ को संसाधित करने और सी / सी ++ के साथ डेटा (यानी कस्टम डेटा संरचनाओं) को व्यवस्थित करने में बहुत आसान लगता है।
जैसा कि दूसरों ने उल्लेख किया है, गतिशील व्याख्या की गई भाषाओं (पायथन एट अल) को मत गिनिए। वे फ़ोर्टन के सामने की पिघलने की गति की पेशकश नहीं कर सकते हैं, लेकिन वे आपको कार्यान्वयन के सभी विवरणों की तुलना में अपनी कम्प्यूटेशनल समस्या को हल करने पर अधिक ध्यान केंद्रित करने की अनुमति देते हैं। अक्सर आप पायथन में एक समाधान लागू कर सकते हैं, और यदि प्रदर्शन अस्वीकार्य है, तो कुछ रूपरेखा करें, समस्या क्षेत्रों की पहचान करें, और या तो साइथॉन का उपयोग करके उस कोड को अनुकूलित करें या पूरे कार्यक्रम को संकलित भाषा में फिर से लागू करें। एक बार जब आप समस्या को हल करने वाले तर्क को निकाल देते हैं, तो बाकी सिर्फ कार्यान्वयन है और कंप्यूटिंग की बुनियादी बातों की अच्छी समझ के साथ, किसी भी प्रकार की प्रोग्रामिंग भाषाओं में प्रतिनिधित्व करने के लिए सीधा होना चाहिए।
मैं वर्तमान में एक राष्ट्रीय प्रयोगशाला में काम कर रहा हूं। मेरे आसपास के अधिकांश लोग मैकेनिकल इंजीनियर हैं। एचपीसी समूहों में कुछ लोगों के साथ चैटिंग, वे ज्यादातर लिनक्स और ज्यादातर सी ++ कर रहे हैं। वर्तमान में मैं जिस समूह में हूं, वह ज्यादातर डेस्कटॉप एप्लिकेशन है और हम विंडोज का उपयोग करते हैं और अवरोही क्रम में: C #, FORTRAN, पायथन, VBA और VB (6, नॉट .NET)। कुछ सिमुलेशन इंजन जिनका हम उपयोग करते हैं, वे अन्य राष्ट्रीय प्रयोगशालाओं में FORTRAN में लिखे गए थे।
एक पुराने धागे को खोदने के लिए क्षमा करें, लेकिन ऐसा लगता है कि 2015 में भी, फोरट्रान का बहुत उपयोग किया जा रहा है।
मैं अभी इस (वैकल्पिक लिंक ) सूची में आया था जो मूल रूप से 300-पेटाफ्लॉप शिखर सम्मेलन मशीन पर चलने के लिए डीओई की ओसीएलएफ सुविधा द्वारा अनुमोदित 13 कोड की एक सूची है जो 2018 में शोधकर्ताओं को उपलब्ध कराई जाएगी। मैंने मुख्य भाषा का उपयोग करने की कोशिश की। कोड के लिए (एक त्वरित Google खोज पर आधारित) और यहाँ वही है जो मैंने पाया:
XGC Fortran
SPECFEM Fortran
ACME Fortran (Bunch of climate codes)
DIRAC Fortran (Mostly)
FLASH Fortran
GTC Fortran
HACC C/C++
LS-DALTON Fortran (some C)
NAMD C/C++
NUCCOR Fortran
NWCHEM Fortran
QMCPACK C++
RAPTOR Fortran
इसलिए 13 कोड में से कम से कम 10 (मेरी त्वरित खोज के आधार पर) फोरट्रान में लिखे गए प्रतीत होते हैं। 50 साल पुरानी भाषा के लिए बुरा नहीं है।
ध्यान दें: मैं अच्छी तरह से जानता हूं कि भाषा की तुलना बेकार है लेकिन लोगों की संख्या (विशेष रूप से C ++ उपयोगकर्ता) जो बुरे मुंह वाले फोरट्रान को देखते हैं, मैंने सोचा कि इसका उल्लेख करना सार्थक हो सकता है।
जैक पी। मुझे लगता है कि कहने की कोशिश कर रहा है कि आपको मिश्रण और मैच करना चाहिए। सॉफ्टवेयर का एक अच्छा टुकड़ा ध्यान से स्तरित है। अलग-अलग परतें अलग-अलग भाषाओं में अधिक स्वाभाविक रूप से या कुशलता से मैप कर सकती हैं। आपको प्रत्येक परत के लिए सबसे उपयुक्त भाषा चुननी चाहिए। आपको यह भी समझना चाहिए कि भाषाएं किस तरह से हस्तक्षेप कर सकती हैं, जो प्रभावित कर सकती हैं कि आप किस भाषा का चयन करते हैं।
एक बेहतर सवाल यह है कि उत्कृष्ट रूप से डिज़ाइन किए गए सॉफ़्टवेयर के उदाहरण क्या हैं जो कि स्तरित सॉफ़्टवेयर को डिज़ाइन करने के तरीके के बारे में जानने के लिए अध्ययन करने योग्य हैं।