Ich habe eine numerische Bibliothek in FORTRAN (ich glaube, FORTRAN IV) und ich möchte es in Python-Code konvertieren. Ich möchte echten Quellcode, den ich auf jedem virtuellen Python-Computer importieren kann --- Windows, MacOS-X, Linux, Android. Ich habe angefangen, das manuell zu machen, aber es gibt ungefähr 1000 Routinen in der Bibliothek, also ist das keine vernünftige Lösung.Wie kann ich einfach FORTRAN-Code in Python-Code konvertieren (echter Code, nicht Wrapper)
Antwort
bearbeiten: hinzugefügt Informationen über numpy
Ein solches Werkzeug existiert für Fortran to Lisp oder Fortran to C oder sogar Fortran to Java. Aber Sie werden nie ein Fortran zu Python Werkzeug haben, aus einem einfachen Grund: Im Gegensatz zu Fortran, Lisp oder C, hat Python nicht GOTO [1]. Und es gibt viele GOTOs in Fortran (besonders Fortran IV) Code. Selbst wenn es einen Satz von gibt, der besagt, dass Sie GOTO mit strukturierter Programmierung emulieren können, ist es viel zu umständlich, ein echtes (und effizientes) Sprachkonvertierungstool zu implementieren.
So werden Sie nicht nur benötigen Sie den Code von 1000 Routinen zu übersetzen, aber Sie werden auch müssen jeden Algorithmus verstehen, mit all seinem geschuppten gotos und dem Algorithmus in ein strukturiertes Programm übersetzen, bevor es in Python zu schreiben. Viel Glück!
Hey, warum denkst du, ein Wrapper ist schlecht? Windows, OSX und Linux haben alle Fortran und C [2] Compiler und gute Wrapper!
Für C (nicht Ihre Sprache hier, aber f2c kann eine Option sein), gibt es SWIG und Fortran hat f2py, jetzt mit numpy integriert. SWIG hat einige support for Android.
Übrigens, anstatt in "reines" Python zu konvertieren, können Sie numpy: numpy Funktionen sind Fortran 90 ähnlich (siehe einen Vergleich here), so können Sie zuerst Ihre Programme in F90 für einen reibungsloseren Übergang übersetzen . Es scheint auch eine Numpy on Adnroid zu geben. Und wenn Sie bei 64-Bit Windows numpy benötigen, gibt es Binärdateien here.
Wenn Sie sich für die Verwendung von Wrappern entscheiden, läuft gfortran unter Linux (einfach aus Distributionspaketen installieren), Windows (MinGW) und Android. Wenn Sie entlang dieser Linie gehen, vergessen Sie nicht, Sie kompilieren FIV-Code, so gibt es die üblichen "One-Trip-Loop" -Problem (in der Regel eine Compiler-Option ist in Ordnung). Sie müssen vermutlich auch einige alte, nicht standardisierte Anweisungen manuell konvertieren, die in modernen Compilern nicht gefunden werden.
Sie haben auch, natürlich, die Möglichkeit, das Projekt Sprache Lisp oder Java zu wechseln ...
[1] Sie fragen sich vielleicht: aber wenn GOTO das Problem ist, wie kommt ein Fortran zu Java ist Werkzeug? Nun, es verwendet Tricks mit der JVM, die intern die GOTO instruction hat. Es gibt auch ein GOTO in Python-Bytecode (suche nach JUMP here), also könnte hier etwas zu untersuchen sein. Also meine vorherige Aussage ist falsch: dort kann ein Fortran zu Python Tool sein, mit Bytecode Tricks wie in Java. Aber es bleibt zu entwickeln, und die Verfügbarkeit von guten Bibliotheken (wie Numpy, Matplotlib, Pandas ...) macht es überflüssig, um es gelinde auszudrücken.
können Sie mit goto strukturierte Programmkonstrukte erstellen. Die Umkehrung folgt nicht, wenn der Code willy nillos überall ist, kann es nicht möglich sein, es zu strukturieren. Wenn ich diese Aufgabe angehen müsste, würde ich zuerst versuchen, zu modernem Fortran (loszuwerden alle Goto's) zu konvertieren. Es sollte schnell klar werden, wenn der Code gut strukturiert ist oder nicht. – agentp
Ich arbeite an Code, der fast 20 Jahre alt ist (immer noch gepflegt) - und es hat keine GOTOs. Ich kann mir vorstellen, dass dies für jeden gut gepflegten Fortran-Code ziemlich üblich ist, da GOTOs sehr schwer zu pflegen sind. Ein Fortran-zu-Python-Konverter wäre immer noch nützlich für all diesen Code. – naught101
@ naught101 Ich glaube immer noch, dass es besser ist, einen Wrapper zu schreiben, um sowohl von Fortran-Geschwindigkeit als auch von Python-netter I/O- und GUI-Fähigkeiten zu profitieren. Konvertieren von Computer-Code in eine Sprache wie Python, die zu den langsamsten in der Existenz ist, ist nicht die kluge Sache zu tun. Es gibt einen guten Grund, warum Python für Leimcode und Schnittstellen verwendet wird, sogar (oder besonders!) In großen Projekten wie [Allianzen] (http://www.salome-platform.org/). Und die Integration von Fortran-Code in numpy bietet eine Matlab-ähnliche Syntax mit immer noch Ihrem Code als Backend. Ich sehe nur Vorteile für diesen Ansatz. –
Leider gibt es keine Konvertierungstools (meines Wissens). Fühle dich doppelt schlecht für dich ... zuerst die Anzahl der Zeilen, die du konvertieren musst, aber vor allem, weil du dich mit FORTRAN IV beschäftigen musst. – SethMMorton
Selbst der häufig verwendete 'f2py' macht keine gute Arbeit, Fortran-Code in Python-Code zu konvertieren, also gibt es ** definitiv keine _easy_-Methode. –
@KyleKanos f2py konvertiert Fortran nicht in Python-Code .. Es erstellt einen C-Wrapper für den Fortran-Code, der dann in ein gemeinsam genutztes Bibliotheksobjekt kompiliert wird, das Python importieren kann. – SethMMorton