Mam biblioteki numerycznej w FORTRAN (myślę, że FORTRAN IV) i chcę przekonwertować go do kodu Pythona. Chcę prawdziwy kod źródłowy, który mogę zaimportować na dowolnej maszynie wirtualnej Python --- Windows, MacOS-X, Linux, Android. Zacząłem to robić ręcznie, ale w bibliotece jest około 1000 procedur, więc nie jest to rozsądne rozwiązanie.Jak mogę łatwo przekonwertować kod FORTRAN do kodu Pythona (prawdziwy kod, nie opakowania)
Odpowiedz
edit: dodano informacje na numpy
Takie narzędzie istnieje Fortran to Lisp lub Fortran to C lub nawet Fortran to Java. Ale nigdy nie będziesz mieć narzędzia Fortran do Pythona z prostego powodu: w przeciwieństwie do Fortran, Lisp lub C, Python nie ma GOTO [1]. I istnieje wiele GOTO w kodzie Fortrana (zwłaszcza Fortran IV). Nawet jeśli istnieje twierdzenie z Jacopini stwierdzające, że można emulować GOTO za pomocą programowania strukturalnego, jest ono zbyt uciążliwe, aby zaimplementować prawdziwe (i wydajne) narzędzie do konwersji języków.
Więc nie tylko trzeba będzie tłumaczyć kod 1000 rutyny, ale trzeba także zrozumieć każdy algorytm, ze wszystkimi jego imbricated GOTOS i tłumaczyć algorytm do programu zorganizowanego przed zapisaniem go w Pythonie. Powodzenia!
Hej, dlaczego myślisz, że opakowanie jest złe? Windows, OSX i Linux mają kompilatory Fortran i C [2] oraz dobre opakowania!
Dla C (nie swoim języku tutaj, ale f2c może być opcja) istnieje SWIG i Fortran ma f2py, teraz zintegrowane z numpy. SWIG ma około support for Android. Nawiasem mówiąc, zamiast konwertowania do "czystego" Pythona, możesz użyć numpy: funkcje numpy są podobne do Fortran 90 (zobacz porównanie here), więc możesz rozważyć najpierw tłumaczenie swoich programów na F90 w celu płynniejszego przejścia . Wydaje się, że istnieje również Numpy on Adnroid. A jeśli potrzebujesz numpy w 64-bitowym systemie Windows, są binaria here.
Jeśli zdecydujesz się na owijanie, gfortran działa na Linuksie (wystarczy zainstalować z pakietów dystrybucyjnych), Windows (MinGW) i Android. Jeśli przejdziesz dalej, nie zapomnij o kompilacji kodu FIV, więc istnieje zwykły problem z pętlą jednokrotną (zwykle opcja kompilatora jest w porządku). Prawdopodobnie będziesz musiał ręcznie przekonwertować niektóre stare, niestandardowe instrukcje, których nie ma w nowoczesnych kompilatorach.
Trzeba też oczywiście opcja, aby przełączyć język projektu do Lisp lub Java ...
[1] Można zapytać: ale jeśli GOTO jest problem, jak to jest Fortran Java narzędzie? Cóż, używa sztuczek z JVM, która ma wewnętrznie GOTO instruction. Istnieje również GOTO w bajtowym kodzie Pythona (poszukaj JUMP here), więc tutaj może być coś do zbadania. Więc moje poprzednie stwierdzenie jest błędne: istnieje może być narzędzie Fortran do Pythona, używając sztuczek kodu bajtowego, takich jak w Javie. Pozostaje jednak rozwijać się, a dostępność dobrych bibliotek (takich jak numpy, matplotlib, pandy ...) sprawia, że jest to niepotrzebne.
możesz użyć goto, aby utworzyć strukturalne konstrukcje programowe. Odwrotność nie następuje, jeśli kod nie będzie chodził w różnych miejscach, może nie być możliwe, aby to ustrukturyzować. Gdybym musiał rozwiązać to zadanie, najpierw spróbowałbym przekształcić się w nowoczesny fortran (pozbyć się wszystkich goto). Powinno szybko stać się oczywiste, jeśli kod jest ładnie zbudowany, lub nie. – agentp
Pracuję nad kodem, który ma prawie ponad 20 lat (nadal zachowany) - i nie ma GOTO. Wyobrażam sobie, że byłoby to dość powszechne dla każdego dobrze utrzymanego fortranowego kodu, ponieważ GOTO są naprawdę trudne do utrzymania. Konwerter fortran-to-python nadal byłby przydatny dla całego tego kodu. – naught101
@ naught101 Nadal uważam, że lepiej jest napisać wrapper, aby korzystać zarówno z prędkości Fortran, jak i z Pythona, ładnych interfejsów I/O i GUI. Konwersja kodu komputerowego na język taki jak Python, który jest jednym z najwolniejszych w swoim istnieniu, nie jest mądrym posunięciem. Jest dobry powód, dla którego Python jest używany do kodowania kleju i łączenia, nawet (a zwłaszcza!) W dużych projektach, takich jak [Alliances] (http://www.salome-platform.org/). A integracja kodu Fortran do numpy oferuje składnię podobną do Matlab, a Twój kod nadal jest backendem. Widzę tylko zalety tego podejścia. –
- 1. Jak przekonwertować przyjazny dla użytkownika kod matematyczny do kodu Clojure?
- 2. Jak mogę wywołać kod Pythona z Ruby?
- 3. haskell generuje kod opakowania eksportu FFI
- 4. Jak sprawdzić kod bajtowy Pythona?
- 5. kod Pythona do odczytu rejestru
- 6. fsolve na pytona (konwersja matlab kod do kodu Pythona)
- 7. Najbezpieczniejszy kod Pythona działający
- 8. Jak osadzić kod Pythona w skrypcie
- 9. Jak przekonwertować llvm IR na kod c?
- 10. Jak dokumentować kod Pythona: Epydoc, doxygen, Sphinx, ...?
- 11. Jak przekonwertować ASM na kod czytelny?
- 12. sandbox do wykonania potencjalnie nieprzyjazny kod Pythona
- 13. Kod debugowania w interprerze Pythona
- 14. Jak mogę oznaczyć kod Perla jako przestarzałe?
- 15. AS3: Jak przekonwertować kod ASCII na ActionScript
- 16. Xkb: Jak przekonwertować kod klucza na keysym
- 17. Kod pomijania pythona-pdb (jak w "nie wykonuje")
- 18. Kod wersji kodu kontroli wersji
- 19. Jak przekonwertować kod HTML witryny na obraz?
- 20. Konwersja kodu klucza na kod klucza
- 21. Kod do tworzenia kodu CAPTCHA w ASP.NET?
- 22. Jak mogę zoptymalizować ten kod?
- 23. Jak mogę zobaczyć drzewo parse, kod pośredni, kod optymalizacyjny i kod zespołu podczas kompilacji?
- 24. jak zrobić ten kod Pythona mniej brzydki
- 25. Kod i upiększacz kodu online
- 26. Czy kiedykolwiek będziesz musiał napisać prawdziwy kod w języku asemblera?
- 27. Jak mogę uzyskać wybrany kod w Eclipse?
- 28. Jak mogę utworzyć ten kod Pythonic
- 29. Jak przekonwertować kod HTML na marżę w stylu Confluence?
- 30. Jak mogę automatycznie uporządkować kod źródłowy Perla?
Niestety, nie ma narzędzi do konwersji (według mojej wiedzy). Poczuj się podwójnie zły ... po pierwsze, liczba linii, które musisz zmienić, ale głównie dlatego, że musisz poradzić sobie z FORTRANEM IV. – SethMMorton
Nawet często używane 'f2py' nie robi dobrej roboty, konwertując kod Fortrana do kodu Pythona, więc istnieje ** zdecydowanie ** nie _łatwo_ metoda. –
@KyleKanos f2py nie konwertuje Fortran do kodu Pythona .. tworzy wokół kodu Fortran owijkę C, która jest następnie kompilowana do obiektu biblioteki współdzielonej, który Python może zaimportować. – SethMMorton