C++ / Delphi



  • Toll finde ich dass der C++Builder beim Übersetzen nur ca. 7 Prozent des Prozessors belegt. Wie schnell könnte er sein, wenn er wirklich den ganzen Prozessor nutzen würde.

    Also mein C-Builder belegt > 90% und braucht trotzdem ewig. Hast Du die Hintergrund-Compilierung an? Damit ist er nämlich NOCH langsamer.

    Weiterhin gibt es in Object Pascal nicht nur ?class? sondern auch ?object?. Das ist ein Überbleibsel aus Turbo Pascal 5.5-Zeiten. Derartige Klasen verhalten sich ähnlich wie C++-Klassen. Man kann also nicht nur dynamisch eine Instanz erzeugen, sondern auch eine, die autom. am Anfang der Methode erzeugt und am Schluss wieder freigegeben wird

    Soweit ich mich entsinne müssen aber Ctor und Dtor trotzdem explizit aufgerufen werden. Das ist ja der springende Punkt.

    [ Dieser Beitrag wurde am 08.01.2003 um 18:58 Uhr von kartoffelsack editiert. ]



  • Lesbarkeit:
    OPascal kann man wirklich schneller lesen teilweise, aber was mich stört
    Funktionsaufrufe müssen keine () bei leerer Parameter Liste haben 😞
    und das der Typ einer Funktion erst am Ende kommt

    function lala(foobar : Integer) : Real;
    

    Aber ich finde C++ ist auch leicht zu lesen, wenn man sich dran gewöhnt. Templates können aber wirklich Funktionen unübersichtlich machen, aber das ist auch Gewöhnungssache IMHO

    ADA:
    Ich dachte immer, dass ADA eine Verbesserung (deutliche!) von Pascal ist, sozusagen inc(Pascal)

    Compilezeit:
    zur Compilezeit Minimierung sind die Systeme sehr praktisch, die das compilieren auf verschiedene Rechner aufteilen, ähnlich nach dem SETI@Home Prinzip, ich weiss aber nicht, ob es so was für Windows gibt. Aber für mal eben ausprobieren alles neuzukompilieren ist ein bisschen übertrieben, ist es nicht? (man kann natürlich pech haben und probiert mal so ein bisschen an wichtigen Stellen rum und man kommt nicht mehr an "Alles Neuerstellen" vorbei, aber an den Basis stellen sollte man eh lieber am Anfang rumfummeln ;))



  • Original erstellt von kingruedi:
    **
    ADA:
    Ich dachte immer, dass ADA eine Verbesserung (deutliche!) von Pascal ist, sozusagen inc(Pascal)**

    Wer von Pascal auf Ada (watch the spelling) umsteigt, verbessert sich tatsächlich deutlich 😉
    Dass einige Ideen von Pascal auf Ada übernommen wurden, sieht man am Syntax
    recht schnell.... aber trotzdem ist Ada keine "Weiterentwicklung", sondern vielmehr eine komplette Neuentwicklung mit bestimmten Vorgaben...



  • Original erstellt von kartoffelsack:
    **Also mein C-Builder belegt > 90% und braucht trotzdem ewig. Hast Du die Hintergrund-Compilierung an? Damit ist er nämlich NOCH langsamer.
    **

    Ich hatte bis vor kurzem sogar 100 Prozent. Dann habe ich die Unterstützung des DMA-Transfers vom Betriebssystem aktiviert. Seit dem braucht er nur noch ca 7 Prozent. An den Übersetzungszeiten selbst hat das aber nichts geändert. Bei mir macht es auch keinen Unterschied, ob ich die Hintergrund-Compilierung an habe.
    Wir haben ein paar Leute von Borland im Haus. Die konnten mir das aber auch nicht erklären.

    Soweit ich mich entsinne müssen aber Ctor und Dtor trotzdem explizit aufgerufen werden. Das ist ja der springende Punkt.

    Ich muss gestehen, dass ich seit Borland Pascal 7 nicht mehr damit gearbeitet habe und ich mich deswegen evtl. falsch erinnere. Ich bin jetzt aber zu faul dem weiter nachzugehen.

    [ Dieser Beitrag wurde am 09.01.2003 um 17:35 Uhr von Eisenherz editiert. ]

    [ Dieser Beitrag wurde am 09.01.2003 um 17:36 Uhr von Eisenherz editiert. ]



  • Original erstellt von kingruedi:
    **Lesbarkeit:
    OPascal kann man wirklich schneller lesen teilweise, aber was mich stört
    Funktionsaufrufe müssen keine () bei leerer Parameter Liste haben 😞
    und das der Typ einer Funktion erst am Ende kommt

    function lala(foobar : Integer) : Real;
    

    **

    Mir geht es genau anders herum. Mich stört, dass bei C++/Java/C# zuerst der Typ kommt. Wenn ich nach einer Methode in einer Klasse suche, dann klappere ich die Methodennamen ab, bis ich einen finde, der nach der gesuchten Funktionalität klingt. Die Methodennamen stehen aber fast nie auf der gleichen Höhe, da die Typbezeichnungen unterschiedlich lang sind. Außerdem kann noch ein virtual oder ähnliches davor stehen, was es mir entgültig erschwert den Namen der Methode auf Anhieb zu erkennen.
    Bei Pascal kommt das ganze Zeugs dahinter, die Namen der Methoden stehen also alle (fast) auf gleicher Höhe. Außerdem sehe ich bei Pascal durch das fett geschriebene "function" bzw. "procedure" sofort, dass es sich um eine Methode und nicht um ein Feld handelt. Bei C++ muss ich immer erst nach den unscheinbaren Klammern schauen.



  • Ich denke, dass das eh sehr subjektiv ist, wie gut man eine Sprache lesen kann oder nicht (außer bei Brainfuck, da haben sicher alle eine Meinung ;)).

    Mir gefällt der C(++) Weg besser, dir der (O)Pascal Weg



  • Also mein C-Builder belegt > 90% und braucht trotzdem ewig.

    BTW : Warum brauchen C++-Compiler eigentlich so lange zum Kompilieren? g++ kompiliert bei mir ein 80-Zeilen C++-Programm in 4 Sekunden. javac kompiliert bei mir ein 7000-Zeilen Java-Programm in 4 Sekunden. ...ich hatte bei g++ übrigens noch nichtmal mit "-O3" kompiliert.

    [ Dieser Beitrag wurde am 09.01.2003 um 18:35 Uhr von Gregor editiert. ]



  • @gregor
    Der Compiler hat mehr zu tun, weil der Aufbau der Sprache komplexer ist. z.B. das Header-Konzept (komplexer meint nicht zwingend besser). Wenn dann noch Templates hinzukommen ...

    @Eisenherz

    Deswegen code ich so

    //...
     int
    foo(double d);
    
     double
    foo(int i);
    
     void
    bar();
    

    dann sind die Dinger auch auf einer Linie.

    Ansonsten könnt ich auch mal schaun, ob DMA bei mir aktiviert ist. Dann könnt ich besser surfen, wenn er compiliert 😃

    [ Dieser Beitrag wurde am 09.01.2003 um 20:08 Uhr von kartoffelsack editiert. ]



  • Das Header Konzept wird doch vom PP aufgelöst und sollte doch eigentlich nicht so schwer sein. Ich denke Templates sind da schon komplexer



  • @Kartoffelsack
    Ich mach das so:

    int     foo(double d);
    double  foo(int i);
    void    bar();
    


  • Die lange Kompilierzeit dürfte auch damit zusammenhängen, dass Operatoren je nach Verwendung und Position verschiedene Bedeutungen haben können, die sich erst durch den Zusammenhang ergeben.



  • @WebFritzi
    oder so

    int                                                                                          foo();
    std::mulimap<my::specialAccessKey, std::pair<double, std::string>, my::someSpecialPredicate> doAussagekraeftigerFunktionsname(int* pBar);
    

    😃

    @Lucki
    Das mit den Operatoren ist aber doch auch nix anderes als ne ganz normale Funktionsüberladung. Das kann man in Delphi und Java aber doch auch

    @kingruedi
    Aber der Präprozessor kopiert ja nur den ganzen Code aus den Headern in jedes Modul rein. d.h. dass pro cpp-Datei der gesamte Code der Header übersetzt werden muss. Wenn man da ein paar Header aus der STL verwendet, kommen da gleich ein paar tausen Programmzeilen zusammen. Und wenn ein mittelkleines Projekt dann vielleicht aus 30 Modulen besteht, ist das schon irrsinnig viel Code.
    Beim CBuilder kann man Präkompilierte Header verwenden. Das ist in der Praxis allerdings recht schwer: Die Header müssen immer in der gleichen Reihenfolge verwendet werden, man muss die Dateinamen in den Includes gleich schreiben (also nicht mal groß, mal klein), wenns inline-Funktionen gibt, packt ers nicht, genausowenig standard-Parameter, templates machen Probleme etc.
    Aber wenn man drauf achtet, gehts schon: Ich habs mal bei nem nicht wirklich goßen Projekt ausprobiert (mit vielleicht 30 eher kleinen Klassen in entsprechend vielen Modulen): Ohne vorkompilierte Header: 900 sec, mit 300. Das ist schon ne Beschleunigung um Faktor 3, aber verdammt das sind immer noch 5 Minuten für ein lächerliches Projekt. Außerdem versteh ichs auch nicht: Wenn er die ganzen Header ohne vorkomp. Header wirklich für jedes Modul übersetzt, mit aber nur einmal, hätte das das ganze noch erheblich mehr beschleunigen sollen.
    Andere Compiler sind dann aber schon ein ganzes stück schneller. Ich schätz, die merken sich die einzelnen Header irgendwie und basteln die dann zusammen.

    [ Dieser Beitrag wurde am 10.01.2003 um 10:55 Uhr von kartoffelsack editiert. ]



  • @kartoffelsack

    Gute Idee, wenn es keinen Styleguide gäbe, der das anders vorschreibt. Trotzdem hätte ich das Problem noch mit den Code von anderen Programmierern, die das nicht so formatieren.

    Zwecks DMA: Bei Windows NT4 heißt das Programm zum aktivieren dmacheck.exe. Ich weiß aber nicht, wo sich das bei einer normalen Installation befindet. Vielleicht im Ordner i386 auf der Installations-CD

    Danach geht das Surfen richtig flüssig. 😃


Anmelden zum Antworten