Warum hat C Fortran abgelöst und warum konnte sich Pascal nur in der DOS Ära behaupten?



  • Pascal hat sicher auch immer das Problem gehabt, dass es den Ruf einer Schulsprache hatte. Wirth hat ja mit Oberon und Modula-2 versucht Pascal für den "Mainstream" weiter zu entwickeln.

    Geschichte der Progsprach schrieb:

    Bashar schrieb:

    1. Fortran ist eine Sprache für wissenschaftliche Berechnungen. Das ist sie immer noch, Fortran wird in dem Bereich immer noch gerne benutzt. C ist eine Sprache für Systemprogrammierung, das war Fortran nie.

    Welche Vorteile hat hier Fortran?
    Gibt's da bessere mathematische Bibliotheken oder größere Fließkommadatentypen oder warum ist Fortran hier so toll?
    Wie sieht es mit der Threadingfähgikeit von Fortran in Multicore CPUs aus, ist Fortran dafür überhaupt geeignet?

    Fortran hat einfach verdammt gute Compiler. Im Vergleich zu C macht die Sprache es auch dem Compiler leichter effizienten Code zu generieren. So gibt es kein Aliasing und man hat direkt Operationen auf Vektoren (so wie in Matlab oder bei C++'s valarray bzw. blitz++). Es gibt sogar Fortran-Compiler die den Code automatisch in Threads aufteilen können (weiß aber nicht wie gut das ist).

    Und Fortran gab es vor C. Oft ist die Wahl ja historisch bedingt. Irgend ein Professor kannte nur Fortran und wollte daher alles nur in Fortran. Irgend ein Solver war in Fortran programmiert. Also hat man alles andere auch in Fortran programmiert etc.



  • Interessant finde ich, dass -obwohl Pascal ausstirbt- Pseudo-Code immer noch irgendwie Pascal-mässig auszusehen hat.
    Oder hat sich das mittlerweile auch geändert?
    Hab lange kein frisches Lehrbuch mit Algorithmen oder sowas gesehen.



  • Geschichte der Progsprach schrieb:

    Eine austerbende Sprache die überwiegend nur von alten Programmierern benutzt wird?

    Is doch jetzt schon so. Abgesehen von BS und Treiberentwicklung benutzt doch nahezu niemand mehr C fuer neue Projekte. Wenn Performance nicht das wichtigste ist (was es meistens nicht ist), wird man eher Java oder .NET nehmen, ansonsten C++.



  • Ich nutze C ständig, auch für Neues.

    Vermutlich gibt es Besseres, ich müßte eine Sprache finden die für DOS
    (= Kommandozeile), Windows und Web (CGI) vernünftig funktioniert. Performance
    brauche ich auch.

    Die gängigen Web-Sachen wie PHP etc müssen ständig gepatcht werden (ein Update
    jagt das nächste, die Herren die die Server administieren würden mich erschlagen)
    und können keine Windows oder DOS-Programme, Pascal ist mir persönlich zuviel
    Tipparbeit (schlage mich eh mit einem Mausarm herum) und umgekehrt ist es
    auch nix.

    Mit C uns SQLite habe ich etwas das alles abdeckt, dazu performant.

    Um da eine neue Sprache erfolgreich zu verwenden brauche ich einige Zeit die
    ich nicht habe. Das mit dem ++ hatte mich schon interessiert, ich sehe da nur
    keinen Fortschritt und für mich persönlich keinen Gewinn.

    Na ja - egal. Ich brauche eine Möglichkeit, meine Ideen einem Rechner klarzumachen,
    wie die heißt ist eigentlich wurscht.



  • Geschichte der Progsprach schrieb:

    Welche Vorteile hat hier Fortran?
    Gibt's da bessere mathematische Bibliotheken oder größere Fließkommadatentypen oder warum ist Fortran hier so toll?
    Wie sieht es mit der Threadingfähgikeit von Fortran in Multicore CPUs aus, ist Fortran dafür überhaupt geeignet?

    Lustigerweise, ich war 2009 auf einem Intel-Seminar zum Thema Multithreading/Multicore, hat Intel seine Parallel-Compiler (im Parallel Studio) zunächst für 3 Programmiersprachen herausgebracht:

    - C
    - C++
    - Fortran!

    http://software.intel.com/en-us/intel-sdp-home/

    Erst danach(!) geht es an die Unterstützung der Multithreading-/Multicore-Fähigkeiten von .NET und der Java-VM. Erst seit diesem Jahr hat Intel dazu mehr in der Pipeline.



  • Scheppertreiber schrieb:

    Vermutlich gibt es Besseres, ich müßte eine Sprache finden die für DOS
    (= Kommandozeile), Windows und Web (CGI) vernünftig funktioniert. Performance
    brauche ich auch.

    Du könntest D nehmen.



  • Vielleicht beantwortet das deine Frage: FORTRAN kam aus der Zeit der Grossrechner (1960 ...), PASCAL kam später. Ich habe mit beiden Compilern gerne gearbeitet und bin wie viele andere auf C und C++ umgestiegen. Warum? 🙂



  • Geschichte der Progsprach schrieb:

    Bis auf die wenigen Delphi Nischenprodukte.
    Vom Verbreitungsgrad hätte Pascal doch eigentlich auch in der Windowswelt noch weiterbestehen müssen.

    Wieso ist es nicht so gekommen?

    Delphi war alles andere als ein Nischenprodukt. Selbst heute wird es noch gerne eingesetzt, jedoch fast ausschließlich für geschäftliche Anwendungen. Skype oder Peazip sind da wenige bekannte Ausnahmen an populärer Software.

    Jockelx schrieb:

    Interessant finde ich, dass -obwohl Pascal ausstirbt- Pseudo-Code immer noch irgendwie Pascal-mässig auszusehen hat.
    Oder hat sich das mittlerweile auch geändert?
    Hab lange kein frisches Lehrbuch mit Algorithmen oder sowas gesehen.

    Das könnte aber auch daran liegen, dass Pascal und seine Nachfolger versuchen der menschlichen Sprache nahe zu kommen. Das gilt für C absolut nicht.

    Außerdem: Wenn du mal in die Pascal-Communities schaust, wirst du feststellen, dass die noch sehr aktiv sind. Die FreePascal/Lazarus-Community wächst derzeit sogar eher an (wohl aber auch auf Kosten von Delphi). Ein Aussterben ist nicht wirklich zu erkennen. Zumindest noch eine ganze Weile nicht.



  • Delphin schrieb:

    ...Skype oder Peazip sind da wenige bekannte Ausnahmen an populärer Software.

    ich dachte skype ist mit qt gemacht und dann wärs eher c++ 😕



  • _-- schrieb:

    ich dachte skype ist mit qt gemacht und dann wärs eher c++ 😕

    Windows Original: Pascal/Delphi
    Linux Port: C++/Qt
    Mac Port: Objective-C/Cocoa



  • Marc++us schrieb:

    Geschichte der Progsprach schrieb:

    Welche Vorteile hat hier Fortran?
    Gibt's da bessere mathematische Bibliotheken oder größere Fließkommadatentypen oder warum ist Fortran hier so toll?
    Wie sieht es mit der Threadingfähgikeit von Fortran in Multicore CPUs aus, ist Fortran dafür überhaupt geeignet?

    Lustigerweise, ich war 2009 auf einem Intel-Seminar zum Thema Multithreading/Multicore, hat Intel seine Parallel-Compiler (im Parallel Studio) zunächst für 3 Programmiersprachen herausgebracht:

    - C
    - C++
    - Fortran!

    http://software.intel.com/en-us/intel-sdp-home/

    Erst danach(!) geht es an die Unterstützung der Multithreading-/Multicore-Fähigkeiten von .NET und der Java-VM. Erst seit diesem Jahr hat Intel dazu mehr in der Pipeline.

    Das ist ja nicht überraschend. Den .NET/Java-Leuten geht es ja nicht um Highperformance und die SPEC-Benchmark (sehr wichtige Benchmark) hat einen großen Fortran-Anteil. Und Fortran ist im wissenschaftlichen Umfeld wirklich nicht tot. Ohne einen Fortran-Compiler hat man im HPC-Bereich keine Chance.



  • rüdiger schrieb:

    ... Und Fortran ist im wissenschaftlichen Umfeld wirklich nicht tot. Ohne einen Fortran-Compiler hat man im HPC-Bereich keine Chance.

    Der Sprachumfang von FORTRAN ist genauso mager wie der von C, eher weniger. Mögliche Unterschiede liegen allein in den verfügbaren Bibiotheken, die man für dies oder jenes fertig einsetzen möchte oder manchmal sogar muss. Wenn die Konventionen stimmen, kann man getrost gemischtsprachige Programme schreiben. Das war ich irgendwann mit FORTRAN, ASSEMBLER, C aber leid und habe für alles C/C++ gewählt. 🙂 Gut, die Leute die C als überholt ansehen gibt es auch.



  • Das war ich irgendwann mit FORTRAN, ASSEMBLER, C aber leid und habe für alles C/C++ gewählt.

    C warst du als leid, da hast du die imaginäre Sprache C/C++ gewählt? Sehr unglücklich ausgedrückt.



  • Inhalt Werkzeugkasten vorher:

    • Fortran
    • Assembler
    • C

    Inhalt Werkzeugkasten nachher:

    • C
    • C++

    Das ist nun nicht wirklich schwer zu verstehen, außer man will es unbedingt.



  • Geschichte der Progsprach schrieb:

    Vom Verbreitungsgrad hätte Pascal doch eigentlich auch in der Windowswelt noch weiterbestehen müssen.

    Wieso ist es nicht so gekommen?

    weil C (das übrigens fast gleich alt ist wie Pascal, nämlich rund 38 Jahre) damals Rückenwind aus mehreren Richtungen hatte:

    * C war "Haussprache" von *n*x, dem "Betriebssystem der Zukunft", wie man auch sagte
    * C war "Haussprache" auf zwei 68K-Heimcomputern (amiga + st), die 1985-1990 sehr populär waren
    * C-Unterstüztung für windows

    In den spätern 80ern war zeitweise ein Nachfolger von Pascal (nämlich Modula-2) recht populär auf einigen 68K-Maschinen - warum hätte man dann zum Vorgänger Pascal zurücksatteln sollen ?

    Außerdem sind die Unterschiede zwischen den beiden Algol-Abkömmlingen Pascal und C gar nicht so groß - nur, daß C eine wesentlich knackigere Syntax hat, in wohltuendem Gegensatz zu den damals längeratmigen Syntaxen von Cobol, Fortran, Pascal ... und wie sie alle hießen.



  • Vielleicht will Progsprach ja nur eine Studie anfertigen über die Entwicklung der einzelnen Programmiersprachen und die Gründe erfahren, warum man da in der Vergangenheit als Programmierer - teils mehrfach - gewechselt ist? Irgendwie war da auch Marketing-Politik der Compiler-Hersteller oder anderen Interessenten dabei. PASCAL war einmal sehr beliebt solange BORLAND mässige Preise hatte.



  • ich würd mal behaupten dass C in naher Zukunft erstmal nicht ausstirbt.
    Da man diese Programmiersprache gerne für Microcontroller Programmierung benutzt...



  • Geschichte der Progsprach schrieb:

    Und wäre Ada für wissenschaftliche Berechnungen nicht besser geeignet?

    Ich habe noch keinen Ada-Code in dem Bereich gesehen. Wäre mir auch neu, dass Ada dafür irgendwelche nennenswerten Vorteile hätte. Wir reden da in den meisten Fällen ja nicht von sicherheitskritischen Anwendungen.

    rüdiger schrieb:

    Und Fortran ist im wissenschaftlichen Umfeld wirklich nicht tot. Ohne einen Fortran-Compiler hat man im HPC-Bereich keine Chance.

    Für bestehende Projekte schon, bei Neuentwicklungen meine ich aber zu beobachten, dass immer mehr in C++ gemacht wird. Ich kann aber auch nur für Finite Elemente-Codes und was da so dran hängt sprechen. Teilweise baut man sich dann ganz hübsche Interfaces um bestehende effiziente Fortran- oder C-Codes fürs 'number crunching' und nutzt an anderen Stellen generische Programmierung, OOP und Co. aus. Teilweise baut man aber auch komplette Codes in C++. Gegenüber Fortran verliert man u.U. etwas Performance, aber ich denke, dass viele Leute das in Kauf nehmen um Code zu schreiben, der generisch, modular und einfach wartbar ist.



  • Walli schrieb:

    einfach wartbar

    einfach wartbar... ...was für ein Traum. 🙂 ...hier mal ein kleiner Ausschnitt aus dem Fortran Code, mit dem ich es momentan zu tun habe:

    SUBROUTINE mkgylm(
         >                  jspins,rv,thet,nsp,nspd,jspd,
         >                  rh,rhdr,rhdt,rhdf,rhdrr,rhdtt,rhdff,
         >                  rhdtf,rhdrt,rhdrf,
         <                  agr,agru,agrd,g2r,g2ru,g2rd,gggr,
         <                  gggru,gggrd,grgru,grgrd,gzgr)
    
    [...]
    
              agr(i) = sqrt(grr**2+grt**2+grf**2)
    
              IF (agr(i).LT.chsml) CYCLE points_2
    
              dagrr = (rdr*drdr*rv3+rdt* (rdrt*rv1-rdt)+
         +            rdf* (rdrf*rv1-rdf)/sint2)/agr(i)/rv3
    
              dagrt = (rdr*rdrt*rv2+rdt*rdtt+rdf* (-rdf/tant1+rdtf)/sint2)/
         +            (agr(i)*rv3)
    
              dagrf = (rdr*rdrf*rv2+rdt*rdtf+rdf*rdff/sint2)/
         +            (agr(i)*rv3*sint1)
    
              g2r(i) = drdr + 2.e0*rdr/rv1 + (rdtt+rdt/tant1+rdff/sint2)/rv2
    
              dzdr = ((rdru-rdrd)*ro- (rou-rod)*rdr)/ro2
    
    c         dzdtr,dzdfs vanish by definition.
              dzdtr = 0.0
              dzdfs = 0.0
    
              gggr(i) = grr*dagrr + grt*dagrt + grf*dagrf
    
              gzgr(i) = dzdr*grr + dzdtr*grt + dzdfs*grf
    
              grru = rdru
              grtu = rdtu/rv1
              grfu = rdfu/rvsin1
    
              agru(i) = sqrt(grru**2+grtu**2+grfu**2)
    
              dagrru = (rdru*rdrru*rv3+rdtu* (rdrtu*rv1-rdtu)+
         +             rdfu* (rdrfu*rv1-rdfu)/sint2)/agru(i)/rv3
    
              dagrtu = (rdru*rdrtu*rv2+rdtu*rdttu+
         +             rdfu* (-rdfu/tant1+rdtfu)/sint2)/ (agru(i)*rv3)
    
              dagrfu = (rdru*rdrfu*rv2+rdtu*rdtfu+rdfu*rdffu/sint2)/
         +             (agru(i)*rv3*sint1)
    
              g2ru(i) = rdrru + 2.e0*rdru/rv1 +
         +              (rdttu+rdtu/tant1+rdffu/sint2)/rv2
    
              gggru(i) = grru*dagrru + grtu*dagrtu + grfu*dagrfu
    
              grgru(i) = grr*grru + grt*grtu + grf*grfu
    
              grrd = rdrd
              grtd = rdtd/rv1
              grfd = rdfd/rvsin1
    
              agrd(i) = sqrt(grrd**2+grtd**2+grfd**2)
    
              dagrrd = (rdrd*rdrrd*rv3+rdtd* (rdrtd*rv1-rdtd)+
         +             rdfd* (rdrfd*rv1-rdfd)/sint2)/agrd(i)/rv3
    
              dagrtd = (rdrd*rdrtd*rv2+rdtd*rdttd+
         +             rdfd* (-rdfd/tant1+rdtfd)/sint2)/ (agrd(i)*rv3)
    
              dagrfd = (rdrd*rdrfd*rv2+rdtd*rdtfd+rdfd*rdffd/sint2)/
         +             (agrd(i)*rv3*sint1)
    
              g2rd(i) = rdrrd + 2*rdrd/rv1 +
         +              (rdttd+rdtd/tant1+rdffd/sint2)/rv2
    
              gggrd(i) = grrd*dagrrd + grtd*dagrtd + grfd*dagrfd
    
              grgrd(i) = grr*grrd + grt*grtd + grf*grfd
    

    100.000 Zeilen davon, selbstverständlich kaum Kommentare. Die meisten wissen glaube ich gar nicht, wieviel gut wartbarer Code eigentlich wert ist. Aber in erster Linie ist das unabhängig von der Programmiersprache. 😋



  • Walli schrieb:

    Für bestehende Projekte schon, bei Neuentwicklungen meine ich aber zu beobachten, dass immer mehr in C++ gemacht wird. Ich kann aber auch nur für Finite Elemente-Codes und was da so dran hängt sprechen. Teilweise baut man sich dann ganz hübsche Interfaces um bestehende effiziente Fortran- oder C-Codes fürs 'number crunching' und nutzt an anderen Stellen generische Programmierung, OOP und Co. aus. Teilweise baut man aber auch komplette Codes in C++. Gegenüber Fortran verliert man u.U. etwas Performance, aber ich denke, dass viele Leute das in Kauf nehmen um Code zu schreiben, der generisch, modular und einfach wartbar ist.

    Den Eindruck habe ich auch gewonnen. Zumindest bei dem Institut, für die ich mal ein bisschen gewerkelt habe, haben die stark auf Metaprogrammierung und Boost gesetzt. Durch die ganze Metaprogrammierung haben die sogar schnelleren Code generiert als Fortran.

    @Gregor
    pfff das nutzt ja nicht mal die richtig fiesen FORTRAN Features und wer braucht schon Variablennamen die länger als 6 Zeichen sind? 😉

    http://www.pbm.com/~lindahl/real.programmers.html


Anmelden zum Antworten