2013-08-14 2 views
12

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

+3

अफसोस की बात है, मेरे रूपांतरण के लिए कोई रूपांतरण उपकरण नहीं हैं। आपके लिए दोगुना बुरा लगता है ... सबसे पहले, आपको बदलने वाली लाइनों की संख्या, लेकिन अधिकतर क्योंकि आपको फोरट्रान IV से निपटना होगा। – SethMMorton

+0

यहां तक ​​कि ऑफ-प्रयुक्त 'f2py' फोरट्रान कोड को पायथन कोड में कनवर्ट करने के लिए एक अच्छी नौकरी नहीं करता है, इसलिए ** निश्चित रूप से ** कोई _easy_ विधि नहीं है। –

+3

@KyleKanos f2py फोरट्रान को पायथन कोड में परिवर्तित नहीं करता है .. यह फोरट्रान कोड के चारों ओर एक सी रैपर बनाता है जिसे बाद में साझा लाइब्रेरी ऑब्जेक्ट में संकलित किया जाता है जो पायथन आयात कर सकता है। – SethMMorton

उत्तर

9

संपादित: 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, पांडा ...) कम से कम कहने के लिए इसे अनावश्यक बनाता है।

+0

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

+1

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

+0

@ naught101 मुझे अभी भी विश्वास है कि फोरट्रान की गति और पायथन अच्छा I/O और जीयूआई क्षमताओं दोनों से लाभ उठाने के लिए एक रैपर लिखना बेहतर है। कंप्यूटिंग कोड को पाइथन जैसी भाषा में कनवर्ट करना, जो कि अस्तित्व में सबसे धीमी गति से है, करना बुद्धिमान बात नहीं है। एक अच्छा कारण है कि क्यों पाइथन का उपयोग ग्लू कोड और इंटरफेसिंग के लिए किया जाता है, यहां तक ​​कि (या विशेष रूप से!) बड़ी परियोजनाओं में, जैसे [गठबंधन] (http://www.salome-platform.org/)। और फोरट्रान कोड का एकीकरण numpy के लिए एक Matlab- जैसे वाक्यविन्यास प्रदान करता है अभी भी आपके कोड बैकएंड के रूप में। मैं इस दृष्टिकोण के केवल फायदे देखता हूं। –

संबंधित मुद्दे