Einfaches Lernen
Python und Fortran sind relativ einfach zu erlernende Sprachen. Es ist wahrscheinlich einfacher, gute Python-Lernmaterialien zu finden als gute Fortran-Lernmaterialien, da Python häufiger verwendet wird und Fortran derzeit als Spezialsprache für das numerische Rechnen gilt.
Ich glaube, der Übergang von Python nach Fortran wäre einfacher. Python ist eine interpretierte Sprache, daher ist die Anzahl der Schritte, die erforderlich sind, um Ihr erstes Programm zum Laufen zu bringen, geringer (öffnen Sie den Interpreter, geben Sie print("Hello, world!")
an der Eingabeaufforderung ein) als die für Fortran (schreiben Sie ein "Hallo Welt" -Programm, kompilieren Sie, führen Sie es aus). Ich denke auch, dass es in Python bessere Materialien zum Unterrichten des objektorientierten Stils gibt als in Fortran, und dass auf GitHub mehr Python-Code verfügbar ist als in Fortran-Code.
Unter Windows einsatzbereit
Die Installation von Python sollte weniger schmerzhaft sein. Es sind Windows-Distributionen verfügbar. Ich empfehle eine wissenschaftliche Distribution wie Anaconda oder Enthought Canopy. Es gibt an sich keinen Compiler; Der Dolmetscher übernimmt diese Rolle. Sie sollten einen CPython-basierten Interpreter verwenden, da mehr numerische Bibliotheken verfügbar sind und eine gute Zusammenarbeit mit C, C ++ und Fortran besteht. Andere Interpreter-Implementierungen umfassen Jython und PyPy.
Auf einem Windows-Computer ist die Installation eines Fortran-Compilers ärgerlich. Typische Befehlszeilen-Compiler sind Programme wie gfortran, ifort (von Intel; für den persönlichen Gebrauch kostenlos, sonst kosten sie Geld) und pgfortran (von PGI; kostenlose Testversionen, sonst kosten sie Geld). Um diese Compiler zu installieren, müssen Sie möglicherweise eine Art UNIX / POSIX-Kompatibilitätsebene wie Cygwin oder MinGW installieren. Ich fand es schwierig, damit zu arbeiten, aber manche Leute mögen diesen Workflow. Sie können auch einen Compiler mit einer grafischen Benutzeroberfläche wie Visual Fortran installieren (erneut müssen Sie eine Lizenz bezahlen).
Unter Linux ist es einfacher, Python und Compiler zu installieren. Ich würde weiterhin Anaconda oder Enthought Canopy als Python-Distribution installieren.
Geschwindigkeit: ein Kompromiss zwischen Produktivität und Leistung
Wenn Sie Python (oder MATLAB, Mathematica, Maple oder eine andere interpretierte Sprache) verwenden, geben Sie die Leistung für die Produktivität auf. Im Vergleich zu Fortran (oder C ++, C oder einer anderen kompilierten Sprache) schreiben Sie weniger Codezeilen, um dieselbe Aufgabe zu erledigen, was im Allgemeinen bedeutet, dass Sie weniger Zeit benötigen, um eine funktionierende Lösung zu finden.
Die effektive Leistungseinbuße für die Verwendung von Python ist unterschiedlich und wird gemindert, indem rechenintensive Aufgaben an kompilierte Sprachen delegiert werden. MATLAB macht etwas Ähnliches. Wenn Sie in MATLAB eine Matrixmultiplikation durchführen, wird BLAS aufgerufen. Die Performance-Einbußen sind praktisch Null, und Sie mussten kein Fortran, C oder C ++ schreiben, um die hohe Performance zu erzielen. Eine ähnliche Situation besteht in Python. Wenn Sie Bibliotheken verwenden können (z. B. NumPy, SciPy, petsc4py, dolfin von FEniCS, PyClaw), können Sie Ihren gesamten Code in Python schreiben und erhalten eine gute Leistung (eine Strafe von vielleicht 10-40%), weil alle rechnerisch Intensive Teile sind Aufrufe an schnell kompilierte Sprachbibliotheken. Wenn Sie jedoch alles in reinem Python schreiben würden, wäre der Leistungsverlust ein Faktor von 100-1000x. Also, wenn Sie Python verwenden wollten und eine benutzerdefinierte einschließen mussten, Bei einer rechenintensiven Routine ist es besser, diesen Teil in einer kompilierten Sprache wie C, C ++ oder Fortran zu schreiben und ihn dann mit einer Python-Schnittstelle zu verpacken. Es gibt Bibliotheken (wie Cython und f2py), die diesen Prozess erleichtern, und Tutorials, die Ihnen helfen. es ist im Allgemeinen nicht lästig.
Nutzungsumfang
Python wird allgemein als Allzwecksprache verwendet. Fortran beschränkt sich weitgehend auf numerisches und wissenschaftliches Rechnen und konkurriert hauptsächlich mit C und C ++ um Benutzer in dieser Domäne.
In der Computerwissenschaft konkurriert Python normalerweise nicht direkt mit kompilierten Sprachen, da die von mir genannten Performance-Nachteile auftreten. Sie würden Python in Fällen einsetzen, in denen hohe Produktivität und Leistung von untergeordneter Bedeutung sind, z. B. beim Prototyping numerisch intensiver Algorithmen, der Datenverarbeitung und der Visualisierung. Sie würden Fortran (oder eine andere kompilierte Sprache) verwenden, wenn Sie eine gute Vorstellung davon haben, wie Ihr Algorithmus und Ihr Anwendungsdesign aussehen sollten, Sie bereit sind, mehr Zeit mit dem Schreiben und Debuggen Ihres Codes zu verbringen, und die Leistung ist von größter Bedeutung. (Zum Beispiel ist die Leistung ein einschränkender Schritt in Ihrem Simulationsprozess oder ein wesentlicher Bestandteil Ihrer Forschung.) Eine gängige Strategie besteht darin, Python und eine kompilierte Sprache zu mischen (normalerweise C oder C ++, aber Fortran wurde auch verwendet). Verwenden Sie die kompilierte Sprache nur für die leistungsempfindlichsten Teile des Codes. Die Entwicklungskosten liegen natürlich darin, dass es schwieriger ist, ein Programm in zwei Sprachen zu schreiben und zu debuggen, als ein Programm in einer einzigen Sprache.
In Bezug auf die Parallelität weist der aktuelle MPI-Standard (MPI-3) native Fortran- und C-Bindungen auf. Der MPI-2-Standard hatte native C ++ - Bindungen, MPI-3 jedoch nicht, und Sie müssten die C-Bindungen verwenden. Es gibt MPI-Bindungen von Drittanbietern, z. B. mpi4py. Ich habe MPI4PY verwendet. es funktioniert gut und ist einfach zu bedienen. Für eine groß angelegte Parallelität (Zehntausende von Kernen) möchten Sie wahrscheinlich eine kompilierte Sprache verwenden, da Dinge wie das dynamische Laden der Python-Module Sie in den Arsch reißen, wenn Sie dies auf naive Weise tun. Es gibt Möglichkeiten, diesen Engpass zu umgehen, wie die PyClaw-Entwickler gezeigt haben, aber es ist einfacher, ihn zu vermeiden.
Persönliche Meinungen
Ich habe ungefähr ein Jahrzehnt Erfahrung in Fortran 90/95 und ich habe auch in Fortran 2003 programmiert. Ich habe ungefähr fünf Jahre Erfahrung im Programmieren in Python. Ich benutze Python viel häufiger als Fortran, weil ich ehrlich gesagt in Python mehr erledige. Der Großteil der Arbeit, die ich zu erledigen habe, erfordert keine großen Supercomputer-Ressourcen und ist im Allgemeinen nicht wert, in einer anderen Sprache neu entwickelt zu werden. Python ist daher gut geeignet, um ODEs und PDEs zu lösen. Wenn ich eine kompilierte Sprache verwenden muss, verwende ich C, C ++ oder Fortran in dieser Reihenfolge.
Der größte Teil des Fortran-Codes, den ich gesehen habe, war hässlich, vor allem, weil die meisten Computerwissenschaftler keine Best Practices kannten oder diesen ablehnten, die von Software-Ingenieuren in den letzten 30 Jahren entdeckt wurden. Das heißt: In Fortran gibt es kein gutes Unit-Testing-Framework. (Das Beste, auf das ich gestoßen bin, ist FUnit von der NASA, und das wird nicht mehr gepflegt.) Es gibt einige gute Python-Unit-Test-Frameworks, gute Python-Dokumentationsgeneratoren und im Allgemeinen viele bessere Beispiele für gute Programmierpraktiken.