मेरे पास फ़ोरट्रान (मुझे फ़ोरट्रान IV) पर एक संख्यात्मक लाइब्रेरी है और मैं इसे पायथन कोड में परिवर्तित करना चाहता हूं। मुझे असली स्रोत कोड चाहिए जो मैं किसी भी पायथन वर्चुअल मशीन --- विंडोज, मैकोज़-एक्स, लिनक्स, एंड्रॉइड पर आयात कर सकता हूं। मैंने इसे हाथ से करना शुरू किया, लेकिन लाइब्रेरी में लगभग 1,000 दिनचर्या हैं, इसलिए यह उचित समाधान नहीं है।मैं आसानी से फ़ोरट्रान कोड को पाइथन कोड (वास्तविक कोड, रैपर नहीं) में कैसे परिवर्तित कर सकता हूं
उत्तर
संपादित: numpy
इस तरह के एक उपकरण Fortran to Lisp, या Fortran to C, या यहाँ तक Fortran to Java के लिए मौजूद है पर जोड़ा जानकारी। लेकिन आपके पास एक साधारण कारण के लिए पाइथन टूल के लिए फोरट्रान नहीं होगा: फोर्ट्रान, लिस्प या सी के विपरीत, पायथन के पास [1] नहीं है। और फोरट्रान (विशेष रूप से फोरट्रान चतुर्थ) कोड में कई गोटो हैं। भले ही Jacopini द्वारा प्रमेय किया गया हो, यह बताते हुए कि आप संरचित प्रोग्रामिंग के साथ गोटो का अनुकरण कर सकते हैं, यह वास्तविक (और कुशल) भाषा रूपांतरण टूल को लागू करने के लिए बहुत ही बोझिल है।
तो न केवल आप 1000 दिनचर्या का कोड का अनुवाद करने की आवश्यकता होगी, लेकिन आप भी करने के लिए प्रत्येक एल्गोरिथ्म को समझते हैं, अपने सभी imbricated gotos के साथ, और अजगर में यह लिखने से पहले एक संरचित कार्यक्रम में एल्गोरिथ्म का अनुवाद की आवश्यकता होगी। सौभाग्य!
अरे, आपको लगता है कि एक रैपर खराब क्यों है? विंडोज़, ओएसएक्स और लिनक्स में फोरट्रान और सी [2] कंपाइलर्स और अच्छे रैपर हैं!
सी के लिए (न कि आपके यहां भाषा है, लेकिन f2c एक विकल्प हो सकता है), वहाँ SWIG है, और फोरट्रान f2py है, अब numpy के साथ एकीकृत। एसडब्ल्यूआईजी में support for Android है।
वैसे, "शुद्ध" पायथन में परिवर्तित करने के बजाय, आप numpy का उपयोग कर सकते हैं: numpy क्षमताओं फोरट्रान 90 के समान हैं (तुलना here तुलना करें), तो आप पहले अपने प्रोग्राम को एक आसान संक्रमण के लिए F90 पर अनुवाद करने पर विचार कर सकते हैं । ऐसा लगता है कि Numpy on Adnroid भी है। और यदि आपको 64-बिट विंडोज़ पर numpy की आवश्यकता है, तो द्विआधारी here हैं।
यदि आप रैपर का उपयोग करने का निर्णय लेते हैं, तो gfortran लिनक्स (बस वितरण पैकेज से स्थापित) पर चलता है, विंडोज (MinGW), और Android। यदि आप उस लाइन के साथ जाते हैं, तो आप एफआईवी कोड संकलित नहीं करते हैं, इसलिए सामान्य "एक-ट्रिप लूप" समस्या होती है (आमतौर पर एक कंपाइलर विकल्प ठीक है)। आपको शायद आधुनिक पुराने कंपाइलरों में नहीं मिले पुराने, गैर मानक कथनों को मैन्युअल रूप से परिवर्तित करना होगा।
आपके पास भी, जाहिर है, लिस्प या जावा के लिए अपनी परियोजना भाषा स्विच करने का विकल्प ...
[1] आप पूछ सकते हैं: लेकिन अगर गोटो समस्या है, कैसे एक फोरट्रान जावा के लिए नहीं है उपकरण? खैर, यह जेवीएम के साथ चाल का उपयोग करता है, जिसमें आंतरिक रूप से GOTO instruction है। पायथन बाइटकोड में एक गोटो भी है (JUMP here देखें), इसलिए यहां जांच करने के लिए कुछ हो सकता है। तो मेरा पिछला कथन गलत है: जावा में बाइटकोड चाल का उपयोग करके एक फोर्ट्रान से पायथन टूल हो सकता है। लेकिन यह विकसित है, और अच्छी पुस्तकालयों की उपलब्धता (जैसे numpy, matplotlib, पांडा ...) कम से कम कहने के लिए इसे अनावश्यक बनाता है।
आप संरचित कार्यक्रम संरचना बनाने के लिए गोटो का उपयोग कर सकते हैं। कनवर्स का पालन नहीं होता है, अगर कोड पूरी तरह से जगह पर मिल गया है तो इसे संरचित करना संभव नहीं हो सकता है। अगर मुझे इस काम से निपटना पड़ा तो मैं पहले आधुनिक किलेन में परिवर्तित करने की कोशिश करता हूं (सभी गेटो से छुटकारा पाएं)। यदि कोड अच्छी तरह से संरचित है या नहीं, तो यह जल्दी से स्पष्ट हो जाना चाहिए। – agentp
मैं कोड पर काम कर रहा हूं जो लगभग 20 साल पुराना है (अभी भी बनाए रखा गया है) - और इसमें कोई गोटो नहीं है। मुझे लगता है कि किसी भी अच्छी तरह से बनाए रखा फोर्टन कोड के लिए यह बहुत आम होगा, क्योंकि GOTO को बनाए रखना वाकई मुश्किल है। एक किलर-टू-पायथन कनवर्टर अभी भी उस कोड के लिए उपयोगी होगा। – naught101
@ naught101 मुझे अभी भी विश्वास है कि फोरट्रान की गति और पायथन अच्छा I/O और जीयूआई क्षमताओं दोनों से लाभ उठाने के लिए एक रैपर लिखना बेहतर है। कंप्यूटिंग कोड को पाइथन जैसी भाषा में कनवर्ट करना, जो कि अस्तित्व में सबसे धीमी गति से है, करना बुद्धिमान बात नहीं है। एक अच्छा कारण है कि क्यों पाइथन का उपयोग ग्लू कोड और इंटरफेसिंग के लिए किया जाता है, यहां तक कि (या विशेष रूप से!) बड़ी परियोजनाओं में, जैसे [गठबंधन] (http://www.salome-platform.org/)। और फोरट्रान कोड का एकीकरण numpy के लिए एक Matlab- जैसे वाक्यविन्यास प्रदान करता है अभी भी आपके कोड बैकएंड के रूप में। मैं इस दृष्टिकोण के केवल फायदे देखता हूं। –
- 1. मैं विजुअल स्टूडियो कोड में पाइथन कोड को कैसे इंडेंट कर सकता हूं?
- 2. मैं सी कोड को आसानी से कैसे बेंचमार्क कर सकता हूं?
- 3. मैं संकलन से कोड की कुछ पंक्तियों को आसानी से कैसे बाहर निकाल सकता हूं?
- 4. आसानी से कोड का परीक्षण कैसे करें?
- 5. मैं पायथन सी कोड से कैसे जोर दे सकता हूं?
- 6. मैं एमैक्स लिस्प कोड को आसानी से कैसे लोड कर सकता हूं क्योंकि मैं इसे संपादित कर रहा हूं?
- 7. एक प्रबंधित कोड रैपर
- 8. मैं कक्षा कोड पर अपना कोड कैसे चला सकता हूं?
- 9. मैं कोड से माउस इवेंट कैसे अनुकरण कर सकता हूं?
- 10. मैं जावा से .NET कोड कैसे कॉल कर सकता हूं?
- 11. मैं qml में बाइनरी कोड को पीएनजी छवि में कैसे परिवर्तित कर सकता हूं?
- 12. मैं क्लोजर स्रोत कोड को दोबारा कैसे कर सकता हूं?
- 13. मैं सी में मॉनीटर कैसे कोड कर सकता हूं?
- 14. मैं अपने स्रोत कोड को कैसे इंडेक्स कर सकता हूं?
- 15. मैं कोड में टेक्स्टफील्ड कैसे केंद्रित कर सकता हूं?
- 16. पाइथन कोड
- 17. मैं जीएचसीआई में अनुकूलित कोड कैसे लोड कर सकता हूं?
- 18. पाइथन कोड
- 19. मैं डेटाबेस में संग्रहीत कोड कैसे निष्पादित कर सकता हूं?
- 20. पाइथन दुभाषिया कोड कोड को निम्नलिखित कोड में कैसे चलाता है?
- 21. मैं सी कोड के चारों ओर एक प्रबंधित रैपर का परीक्षण कैसे कर सकता हूं?
- 22. मैं स्प्रेडशीट डेटा को JSON में तेज़ी से और आसानी से कैसे परिवर्तित कर सकता हूं?
- 23. मैं वेबस्टॉर्म में जेएस कोड को कैसे सुधार सकता हूं?
- 24. मैं कोड नमूने कैसे बड़ा कर सकता हूं?
- 25. मैं निम्नलिखित कोड के प्रदर्शन को कैसे बढ़ा सकता हूं?
- 26. जावा कोड को कोड कोड में कनवर्ट करें
- 27. मैं पाइथन में सामान्य कोड का उपयोग कैसे कर सकता हूं?
- 28. क्या मैं वेबस्टॉर्म में कोड फोल्डिंग अक्षम कर सकता हूं?
- 29. मैं InitializeComponent की कोड जनरेशन को कैसे अनुकूलित कर सकता हूं? अधिक विशेष रूप से, मैं सभी जेनरेट कोड को कैसे प्रोसेस कर सकता हूं?
- 30. सी # में ऑपरेटर ओवरलोडिंग - वास्तविक कोड कोड कहां जाना चाहिए?
अफसोस की बात है, मेरे रूपांतरण के लिए कोई रूपांतरण उपकरण नहीं हैं। आपके लिए दोगुना बुरा लगता है ... सबसे पहले, आपको बदलने वाली लाइनों की संख्या, लेकिन अधिकतर क्योंकि आपको फोरट्रान IV से निपटना होगा। – SethMMorton
यहां तक कि ऑफ-प्रयुक्त 'f2py' फोरट्रान कोड को पायथन कोड में कनवर्ट करने के लिए एक अच्छी नौकरी नहीं करता है, इसलिए ** निश्चित रूप से ** कोई _easy_ विधि नहीं है। –
@KyleKanos f2py फोरट्रान को पायथन कोड में परिवर्तित नहीं करता है .. यह फोरट्रान कोड के चारों ओर एक सी रैपर बनाता है जिसे बाद में साझा लाइब्रेरी ऑब्जेक्ट में संकलित किया जाता है जो पायथन आयात कर सकता है। – SethMMorton