Weche Programmiersprache Physik?



  • rüdiger schrieb:

    Fortran ist immer noch weit verbreitet. Je nach Forschungsgruppe wird auch noch immer fleißig in Fortran programmiert. Ich würde Fortran nicht nutzen wollen und auch nicht empfehlen. Aber so zu tun, als wäre Fortran seit den 80ern irrelevant ist schlicht und einfach falsch.

    Ich hatte auch nicht gemeint, dass FORTRAN vollkommen tot ist. Es ging um die Frage, was soll ich mir für Physik aneignen? Da empfehle ich klar C und C++. Kriegt man einen vorhandenen FORTRAN-Code vorgelegt, sollte man diesen mit geringer Einarbeitung leicht verstehen und bei Bedarf auch ändern können. Alles was in FORTRAN vorhanden ist, findet sich in C und C++ wieder - nur anders.


  • Mod

    Hier ist glaube ich eine etwas ausgewogenere Beitragsseite zum Thema:
    http://lambda-the-ultimate.org/node/2720
    Allerdings wird hier Cuda und Opencl (C, aber auch Schnittstellen zu anderen Sprachen) vermutlich wegen dem Alter der Seite gar nicht angesprochen. Von 2008 halt.

    Der eigentliche Herausforderer für Fortran ist Haskell. Aber Fortran ist halt etwas performanter. Und wenn es dann eben schnell sein soll, gehts dann halt wieder über Cuda, C, Fortran und für Fortran gibt es natürlich auch Cuda-Anbindungen, wie für andere Sprachen http://www.nvidia.de/object/cuda_fortran_de.html

    Und http://chapel.cray.com/ ...vielleicht auch einen Blick wert.



  • nachtfeuer schrieb:

    Hier ist glaube ich eine etwas ausgewogenere Beitragsseite zum Thema:
    http://lambda-the-ultimate.org/node/2720

    Äh, das wirkt eher ein bisschen merkwürdig. Hab von Boo noch nichts gehört. Das letztes Release ist 1.5 Jahre alt und für .NET. Also nicht wirklich wonach man bei einer SciComp-Sprache sucht. Er erwähnt nicht einmal X10, Fortress oder Chapel. Und C++ hält er für "not promising" 😮 Ich glaube das ist eher ein weniger sinnvoller Artikel.

    nachtfeuer schrieb:

    Der eigentliche Herausforderer für Fortran ist Haskell. Aber Fortran ist halt etwas performanter.

    Haskell ist nicht wirklich für Numerik ausgelegt. Außerdem ist die Sprache zu kompliziert für Leute die ohnehin nicht gut programmieren. Mathematiker mögen Haskell vielleicht, aber das heißt nicht, dass es für Numerik taugt.


  • Mod

    rüdiger schrieb:

    nachtfeuer schrieb:

    Der eigentliche Herausforderer für Fortran ist Haskell. Aber Fortran ist halt etwas performanter.

    Haskell ist nicht wirklich für Numerik ausgelegt. Außerdem ist die Sprache zu kompliziert für Leute die ohnehin nicht gut programmieren. Mathematiker mögen Haskell vielleicht, aber das heißt nicht, dass es für Numerik taugt.

    Wüsste jetzt nicht, wieso nicht, zumal man auch Schnittstellen zu C und Cuda hat und Haskell ist parallelfreundlich, wie eben auch Chapel.

    Ich glaube, Haskell ist nicht komplizierter als C++ oder C. Vielleicht etwas schwerer als Basic, Haskell hat ja auch mehr Möglichkeiten Kniffe, aber Fortran hat einen gewissen Basic-Charm, so gesehen hätte Fortran jetzt einen Bonuspunkt.
    Rein didaktisch könnte man (als Haskellvorläufer) ja zuerst Lisp lernen, denn Lisp ist auch einfach
    http://www.amazon.de/Land-Lisp-Lisp-Programmierung-programmieren-Professional/dp/3826691636/
    aber der TO wollte bestimmt nicht noch eine nicht so performante(relativ!) Interpretersprache lernen 😃
    (dann wohl eher was mit .net und directx?)

    Du hattest ja Chapel schon weiter oben angesprochen, hast du schon Erfahrung sammeln können, auch im Vergleich mit anderen Parallellösungen (Cuda, OpenCl, Mpi usw.)?



  • nachtfeuer schrieb:

    Du hattest ja Chapel schon weiter oben angesprochen, hast du schon Erfahrung sammeln können, auch im Vergleich mit anderen Parallellösungen (Cuda, OpenCl, Mpi usw.)?

    Ich hab mit Chapel ein bisschen gespielt und mir ein paar der Vorträge durchgelesen. Leider habe ich es nicht groß einsetzen können bisher und meine Spielereien haben die hpc Features noch nicht wirklich ausgenutzt. Aber im Vergleich zu MPI ist es deutlich einfacher. Man hat eben eine globale und nicht lokale Perspektive. Ich kann mir aber vorstellen, dass man mit Chapel teilweise das Problem hat, abzuschätzen wie viele Daten nun über das Netzwerk gehen.



  • berniebutt schrieb:

    Lasst doch bitte FORTRAN aus dem Spiel. Bis in die 80er Jahre war FORTRAN für wissenschaftliche Anwendungen, Physiker und Ingenieure die Sprache der Wahl. Mit der Verfügbarkeit von C sind die meisten FORTRAN-Anwender auf C umgestiegen, weil C einfach mehr Möglichkeiten bietet.

    Denkst du. Ich hab mein Physikstudium (Schwerpunkte Astronomie und Teilchenphysik) 2008 abgeschlossen, und die meisten Simulationen die wirklich Rechenpower gefressen haben waren in Fortran77 geschrieben. C++ wurde hauptsächlich für die Auswertung der Messergebnisse und Simulationsdaten benutzt (es gibt da einen unsäglichen C++ "Interpreter", den sie in der Teilchenphysik benutzen...). Die einzige weitere Sprache die mir in der Zeit über den Weg gelaufen ist war LabView, um Messungen aus der Elektronik eines Versuchsaufbaus anzuzeigen und aufzuzeichnen.
    Java hatte mal jemand versucht einzuführen, aber auch kleine Performancenachteile sind nunmal Nachteile. Niemand möchte auf Simulationsergebnisse sechs Tage warten, wenn er sie auch nach gut fünf Tagen bekommen kann.



  • @ nachtfeuer + rüdiger
    Ihr scheint euch im gestellten Thema etwas zu verrennen. 🤡 Der Fragesteller sucht einen für Physik brauchbaren Einstieg in die Programmierung. Das sollte eine höhere allgemein einsetzbare Programmiersprache sein, wie sie auch von anderen Physikern gewöhnlich benutzt wird. Dafür kommen in der Reihenfolge der Präferenz C / C++ / FORTRAN in Frage. Mit einer soliden Grundlagenkenntnis kann er sich bei Bedarf immer noch in anderes einarbeiten, wenn das andere Vorteile bringt oder verlangt ist. Bei wissenschaftlichen Anwendungen stehen oft aufwendige Algorithmen - sehr oft mit Iterationen - zur Diskussion, also fachliche Dinge. Die woanders nützlichen Dinge wie OOP, GUI usw. haben da eine untergeordnete Bedeutung! Der Fragesteller hat sich für C++ entschieden und damit eine gute Wahl getroffen. Die Grundlagen von C sind ja in C++ voll enthalten.

    Wir sollten bei jedem Thema solche Nebendiskussionen vermeiden. Die können nur verunsichern oder verwirren! 😃

    @ pumuckl
    Klar: Das alte FORTRAN (Einführung 1958) ist weiterhin gut. Mit C kann man alles aber genauso und teilweise effizienter machen. Nicht umsonst sind viele technisch-wissenschaftlich orientierte Softwareentwickler Ende der 80er Jahre auf C umgestiegen. Für den Einstieg erscheint mir FORTRAN heute deshalb eher ungeeignet



  • berniebutt schrieb:

    Wir sollten bei jedem Thema solche Nebendiskussionen vermeiden.

    Äh.. nein? Deshalb lese ich doch regelmäßig in diesem Forum. oO



  • @berniebutt
    Er hat sich doch eh schon entschieden. Bei der Diskussion hier dreht es sich ja gar nicht mehr darum, ihm irgend etwas zu empfehlen.

    Und ich würde ehrlich gesagt C++ ganz klar gegenüber C bevorzugen, wenn es um physikalische Berechnungen geht. Einerseits hat man Dinge wie Operator/Funktionsüberladung, die die Benutzung von Matrizen/Vektoren etc. erst angenehm machen. Aber viel wichtiger ist einfach, dass so was wie Blitz++ oder Eigen gar nicht in C realisiert werden kann und das sind ja die Dinge mit denen man Fortran in der Performance schlägt.

    Fortran ist für den Einstieg sicher nicht ideal. Wobei modernes Fortran mit altem Fortran wenig am Hut hat und es ist halt einfach so, dass man heutzutage nicht nur auf Fotran-Code stößt, sondern je nach Forschungsgruppe einfach das meiste immer noch in Fortran (sogar Fortran77! *würg*) gemacht wird. https://bitbucket.org/eric_t/modern-fortran/wiki/Home http://fortranwiki.org

    @pumuckl
    Du meinst sicher CINT/ROOT vom Cern. Ja, das ist ziemlich grausam.


  • Mod

    berniebutt schrieb:

    Nicht umsonst sind viele technisch-wissenschaftlich orientierte Softwareentwickler Ende der 80er Jahre auf C umgestiegen. Für den Einstieg erscheint mir FORTRAN heute deshalb eher ungeeignet

    Das hat auch mit der Entwicklung der Betriebsystemem zu tun. Wenig Unterstützung für Asm, Fortran, Pascaltypen (und Witzgeschichten wie Modula3 für die man erstmal einen C-Compiler installieren muß) usw. So hat dann Fortran genau das gleiche Reputation Problem wie Assembler, oder Pascal. Das geht soweit, dass sich dann gar nicht mehr schickt, in Asm oder Fortran oder Pascal zu coden und man hardwarebeschleuniges Java (in Handys) findet, statt einfaches Asm, Pascal, Basic oder Fortran, Lisp usw.

    C++ ist OK, aber man fragt sich natürlich auch, welches von den 20 Büchern, und 500 Tutorials, die man lesen muß, (um effektiv zu coden) am sinnvollsten für den schnellen Umstieg in den Mainstream und C++-Fanboyismus ist (u.a. auch STL, BOOST, Blitz, directx. und für jede Lib natürlich ein extra Meyers Buch ;)) oder http://www.josuttis.com/tmplbook/tmplbookxref.html (kann ich nicht auch einmal ohne links posten??..ach 🤡 )
    ..na wenn schon, die 2 auch noch:
    http://www.xsc.de/
    http://software.intel.com/en-us/intel-sdp-home/
    (die muss ich nicht kommentieren, oder doch?)

    Und ganz davon abgesehen, sind HPCler natürlich auch total weltfremde Typen, wenn sie so ein Urgestüm wie Fortran benutzen, das sich im Laufe der Zeit natürlich auch überhaupt nicht weiterentwickelt hat.
    Wunschdenken von C-ohneasm-Fanboys kann man auch immer supergut im Assemblerforum oder anderen Lowlevelecken bestaunen. Spricht ja nichts gegen C-ohneasm-Wayoflife. Nur wirkt das seltsame Bedürfnis, deswegen Asm (meist mit Vorurteilen) abwerten zu müssen, dann meist etwas schräg. Da man für C++ auch relativ viel Zeit investieren muß, um die Möglichkeiten auszuloten, ist natürlich klar, das dies nicht umsonst gewesen sein darf.

    Und ein Nebenschauplatz kann das auch schon mal gar nicht sein, wenn man sich über Möglichkeiten und Irrtümer im Sprachgebrauch und Unipraxis austauscht bei einer Frage wie dieser des TOs. Es spricht ja auch überhaupt nichts dagegen, erstmal die VB Kenntnisse und Möglichkeiten auszuloten so gut es geht und an der Uni das zu nehmen und zu lernen, was vorinstalliert ist oder präferiert wird, zumal man dort auch ganz andere Möglichkeiten hat, Workstations, mehr Compis was auch immer.

    Ist doch ganz Ok, und auch wünschenswert, wenn man ein Ding aus ganz unterschiedlichen Perspektiven betrachten kann.

    ...hm, und ein wenig Langeweile...
    http://www.phrack.org/issues.html?issue=67&id=11
    http://www.personal.psu.edu/hdk/fortran.html
    http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/directx.shtml
    https://srv.rz.uni-bayreuth.de/lehre/fortran90/fortran.pdf
    http://www-com.physik.hu-berlin.de/~bunk/kurs/f90/f90.pdf
    http://www.wi.uni-muenster.de/pi/lehre/ss04/seminarprogrammiersprachen/fortran.pdf
    http://www.amazon.com/Explained-Numerical-Mathematics-Scientific-Computation/dp/0199601429/
    http://www.amazon.com/Modern-Fortran-Norman-S-Clerman/dp/052173052X/
    ...hm, aber das liest doch sowieso keiner...?
    ...vielleicht
    http://www.cs.bgu.ac.il/~sagieg/books/Addison.Wesley.Accelerated.C._.pdf
    http://www.c-plusplus.net/tuts/cpp/vcppk.zip
    Wobei die verlinkten Tuts von Marc++us schon ziemlich alt sind (von 2004) und von verschiedenen Standards überholt wurden.
    Dies ist sehr lesenswert:
    http://www.henning-thielemann.de/CHater.html
    Ein nicht funktionierender Link auf dieser Seite peilt dieses recht spannend zu lesende Script an:
    http://pu.inf.uni-tuebingen.de/users/klaeren/ko.pdf
    das hier ist auch nicht schlecht:
    http://retroware.de/secret/Bücher %26 Artikel/Programmierung/Programmiersprachen Wiki-Buch.pdf
    Das hier einen Blick wert:
    http://www.openmp.org/presentations/miguel/F95_OpenMPv1_v2.pdf
    Und natürlich http://clang.llvm.org/

    Und ganz abgesehen davon, bringt mingw (wie OW) auch beides mit, c++ und fortran



  • rüdiger schrieb:

    Und ich würde ehrlich gesagt C++ ganz klar gegenüber C bevorzugen, wenn es um physikalische Berechnungen geht. Einerseits hat man Dinge wie Operator/Funktionsüberladung, die die Benutzung von Matrizen/Vektoren etc. erst angenehm machen. Aber viel wichtiger ist einfach, dass so was wie Blitz++ oder Eigen gar nicht in C realisiert werden kann und das sind ja die Dinge mit denen man Fortran in der Performance schlägt.

    Sehe ich auch so. In der Numerik ist es an vielen Stellen ungeheuer wichtig komfortabel mit Matrizen und Vektoren umgehen zu können und dabei noch performant zu sein. Da möchte ich keine Sprache nehmen wollen, die so etwas nicht built-in hat oder durch Operatorüberladung und ein wenig template-magic nachbilden kann. Aber gerade der Trend, dass man alles verallgemeinern, sprich aus allem ein Riesen-Template machen will (man könnte ja mal eine tridiagonale char-Matrix mit Spaltenlayout beginnend bei Index 17 brauchen), schreckt mich ehrlich gesagt fast schon wieder ein bisschen ab. Nicht nur, dass es die Compilezeiten sehr ungünstig in die Höhe treibt, auch die Fehlerausgaben der Compiler werden nicht unbedingt verständlicher.



  • Ich kann mich den Beiträgen hier nur Anschliessen. C++ ist für wissenschaftliche Berechnungen sehr gut geeigent. Es gibt viele sehr gute Bibliotheken die sowohl sehr schnell (so schnell wie c oder fortran und teilw. durch optimale algorithmenerzeugung durch templates oä. sogar schneller) als auch sehr schön in der Anwendung (durch Operator überladung und so).

    Meiner Meinung nach hat man mit C++ das beste aus allen Welten.

    Zum Prototyping nehm ich auch noch sehr gerne Mathematica.
    Das ist aber sehr praktisch aber halt nicht ganz billig.


Anmelden zum Antworten