C++ / Delphi
-
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 kommtfunction 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 ...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 soint 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. ]
-
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.