Ist C++ wirklich so schlecht?
-
Ich gebe zu, dass ich in dem Projekt bisher so gut, wie keine ernsthafte Ausnahmebehandlung mache. Es werden also früher oder später noch ein paar "finally" dazukommen. ...es werden auch noch ein paar "try" und "catch" dazukommen (zum Beispiel bei möglichen Plätzen für OutOfMemoryExceptions). Das ändert aber nichts daran, dass sich das im Großen und Ganzen nahezu garnicht auf die Codegröße auswirkt.
-
Original erstellt von Bashar:
[Es geht] um die Behauptung, C++ sei noch unsicherer als C.Auf jeden Fall formal sehr viel schwieriger zu verifizieren, weil viel komplexer.
Die 'richtigen Techniken' können auch mal das Falsche tun.
-
Java is also between 30% and 200% more productive, in terms of lines of code per minute.
zu deutsch: "in java braucht man fuer alles 30 bis 200 prozent mehr zeilen"
und "7 jahre c++ erfahrung" im verhaeltnis zu "paar wochen java" klingt imposanter als es ist. mit einer sprache lernt man programmieren, das dauert eine weile, fuer alle weiteren braucht man dann halt nur noch paar wochen. insbesonderen bei der aehnlichkeit von java und c++. also kann man sagen, der konnte beides gleich gut.
und wie man bei einem experiment mit einer (1!) versuchsperson zu einer konfidenz von 95% kommen kann ist mir schleierhaft.c/c++ erreicht fast assembler nahe geschwindigkeit.
4. C++-Programme werden in der Regel schneller als Assembler-Programme ausgeführt, weil die Compiler besser optimieren können, als es der Mensch kann.
hm. dann wurden die compiler wohl von einem compiler entwickelt?
ganze am anfang wurde gefragt, was man mit java klassen machen kann, was man mit c++ klassen nicht kann: einen anderen konstruktor der selben klasse aufrufen. und super ist auch manchmal nicht schlecht.
meine meinung zu java: klobig, fuehlt sich fast an wie pascal. ich kann mir eine welt ohne templates nicht mehr vorstellen. damit kann man mit einer einzigen zeile quasi unendlich produktiv sein.
-
zu deutsch: "in java braucht man fuer alles 30 bis 200 prozent mehr zeilen"
...lern mal Englisch. Ich habe gehört, dass das ganz nützlich sein soll!
hm. dann wurden die compiler wohl von einem compiler entwickelt?
Hast du schonmal nen Menschen gesehen, der mp3s abspielen kann? mp3-Player wurden schließlich auch von Menschen entwickelt.
meine meinung zu java: klobig, fuehlt sich fast an wie pascal. ich kann mir eine welt ohne templates nicht mehr vorstellen. damit kann man mit einer einzigen zeile quasi unendlich produktiv sein.
Ich habe von dir mal ein paar Fragen im Java-Forum gesehen. Ich habe dich da mehrfach darauf hingewiesen, dass du offenbar versuchst, Java wie C++ zu verwenden. Es ist klar, dass das nicht gut geht und, dass einem Java dann absolut schlecht vorkommt. Wenn du Java so verwendet hättest, wie man Java verwenden sollte, dann wäre dir Java auch nicht klobig und so vorgekommen. Java ist IMHO eine sehr mächtige und sehr schöne Sprache. C++ ist noch mächtiger, dafür aus meiner Sicht aber absolut hässlich.
Soo ähnlich sind sich Java und C++ nicht und es geht nicht so schnell, umzusteigen. Man findet vielleicht leicht in die andere Sprache hinein (da Syntax und Konzepte teilweise übereinstimmen), das heißt aber noch lange nicht, dass man bald gut in der anderen Sprache programmieren kann. Es dauert ja allein schon eine gewisse Zeit, bis man weiß, wo man was in der jeweils neuen Standardbibliothek finden kann und was überhaupt da ist.
-
meine meinung zu java: klobig, fuehlt sich fast an wie pascal
Java ist IMHO eine sehr mächtige und sehr schöne Sprache. C++ ist noch mächtiger, dafür aus meiner Sicht aber absolut hässlich.
Seht ihr. Das war der Grund warum ich folgende Aussage formuliert habe:
Ich kann dazu keine *fachliche* Aussage treffen. Nur meine Meinung kundtun. Und diese ist dann eher auf Emotionen, denn auf Wissen begründet. Keine gute Ausganslage um sinvoll zu diskutieren.
Scheinbar bin ich nicht der Einzige hier, der vor diesem Problem steht.
Ich habe den Text zwar schon mal gebracht, als Konter gefällt er mir hier aber sehr sehr gut
Java, the virtual success. Java improves on C++, adding some fundamental features such as
garbage collection, tightly integrated thread support, and the ever popular
"Write Once, Debug Everywhere" model. But while Java managed to get a few things right,
or at least better, it hugely misses the boat in some very fundamental areas:
there is just enough type checking to get in your way, but not enough to ensure your safety.
There is no genericty (templates or similar), there is no support for invariant assertions
(as in Eiffel), it's not as flexible as Objective C or Smalltalk, not as elegant as Eiffel,
and not as fast as C++. This isn't meant to be a lengthy bash at Java, but as one pundit
put it "Java has the blazing speed of Smalltalk and the elegant simplicity of C++."Die Punkte type checking, templates und invariant assertions (bzw. Pre-Postconditions: siehe Probleme mit Template Method und Interfaces) sehe ich wirklich als *fachliche* Kritikpunkte.
-
Original erstellt von Gregor:
**...lern mal Englisch. Ich habe gehört, dass das ganz nützlich sein soll!
**Nicht mit dem Finger zeigen, da weisen 4 Finger der gleichen Hand auf Dich!
Lies seine Aussage noch mal _ganz_ _genau_ und Du wirst sehen, daß er sehr wohl Englisch kann, aber Probleme mit Aussagen von Werbetextern hat.
-
Original erstellt von Marc++us:
**Nicht mit dem Finger zeigen, da weisen 4 Finger der gleichen Hand auf Dich!
**Mach doch mal ein Foto, wie Du entweder den Daumen in sehr stumpfem Winkel zum Zeigefinger hältst, oder zeig deine sechsfingrige Hand.
-
Trefferblitz
-
Die Punkte type checking, templates und invariant assertions (bzw. Pre-Postconditions: siehe Probleme mit Template Method und Interfaces) sehe ich wirklich als *fachliche* Kritikpunkte.
Invariant Assertions: Naja! Assertions gibt es zumindest in Java: http://java.sun.com/j2se/1.4/docs/guide/lang/assert.html
Erklär mir bitte, warum der Mangel von "invariant Assertions" so schwerwiegend sein soll? ...ich kannte den Begriff so bisher noch nicht. Die sind für Eigenschaften gedacht, die als Precondition und Postcondition gelten müssen, oder? Das wären dann in Java halt 2 Zeilen, statt eine.Templates: Daran wird wohl gearbeitet. Ist IMHO aber in Java nicht so wichtig, wie in C++, da es eine gemeinsame Superklasse gibt. Zugegeben: Templates sind mächtiger.
Type Checking: Wird IMHO überbewertet, zudem wird es mit den Generics auch mehr Typsicherheit geben. Ich hatte zumindest noch nie Probleme, weil ich von einem falschen Typ ausgegangen bin. Man schmeißt ja auch nicht alle Objekte in einen großen Topf, rührt ein paarmal um und greift dann wahllos irgendeins heraus.
-
@Gregor
Wie sieht es mit dem DP Template Method aus? Das ist doch zweifellos ein sinnvolles Design Pattern für die Prüfung von Pre- und Postconditions.
In Java habe ich damit zwei Probleme:
1. In Java schaffe ich es nicht die "Hook"-Methode private zu machen. Ok. Mach ich sie halt protected. Ist zwar nicht schön, aber natürlich auch kein Beinbruch.2. Mir ist völlig unklar wie man das mit Interfaces machen kann. Dort kann ich ja keine final-Methode drin definieren. Also bin ich auf eine Basisklasse fixiert.
Ich schreibe hier extra "ich". Vielleicht gibt es ja (mittlerweile) eine Möglichkeit Template Method in Java ordentlich zu implementieren. Falls ja, nur her damit.
Das ist auf jeden Fall eine Sache die ich in Java sehr unschön finde.
Erklär mir bitte, warum der Mangel von "invariant Assertions" so schwerwiegend sein soll? ...ich kannte den Begriff so bisher noch nicht. Die sind für Eigenschaften gedacht, die als Precondition und Postcondition gelten müssen, oder? Das wären dann in Java halt 2 Zeilen, statt eine.
Letztlich geht es hier doch um das "Design by contract"-Konzept. Dieses Konzept ist natürlich primär auf Design-Ebene und hat nicht direkt etwas mit Implementation zu tun. Es ist aber doch bekanntlich so, dass es einer Sprache sehr hoch angerechnet wird, wenn sie die Implementation wichtiger Design-Konzepte vereinfacht. Am Besten so, dass man sie 1:1 übernehmen kann.
Wäre dem nicht so, könnte wir auch alle weiterhin C programmieren und neimand hätte jemals das Schlüsselwort class erfinden müssen.Templates sind mächtiger.
Vorallem wenn man Templates nicht als Feind der OOP bzw. der Laufzeitpolymorphie sieht. Es ist eine Ergänzung. Man bekommt auch statische Polymorphie. Das ist in Sprachen mit einer gemeinsamen Wurzelklasse zwar nicht ganz so wichtig, in meinen Augen aber trotzdem auch hier eine sehr nette Zugabe.
Type Checking: Wird IMHO überbewertet
Wie heißt es doch so schön: Perfekte Programmierer brauchen keine Typüberprüfung
-
Original erstellt von Gregor:
Templates: Daran wird wohl gearbeitet. Ist IMHO aber in Java nicht so wichtig, wie in C++, da es eine gemeinsame Superklasse gibt. Zugegeben: Templates sind mächtiger.Naja, das mit der Superklasse ist natürlich ein Ersatz dafür. Mich wundert nur, daß das so bereitwillig akzeptiert wird - die ganzen Bücher über OOA oder auch UML - wo es um die Designfragen geht - fordern die Minimierung des Zusammenhangs zwischen den Klassen. Also insbesondere nicht quer durch das Modell Klassen gemeinsam ableiten. Und dann machen sich die Leute munter daran das in Java umzusetzen, wo genau diese Forderung per Definition verletzt ist.
Erstaunlich ist das für mich als Zuschauer schon ein bißchen.