Warum hat C++ so eine aufwendige Syntax?
-
Hallo
Holztisch schrieb:
Wer braucht das alles? Warum macht man es nicht viel einfacher? Wäre sicher auch besser für die Compilerhersteller.
Daß C++ so komplex ist, liegt unter anderem an zwei Dingen:
1. Kompatibilität mit C (wurde schon genannt)
2. Statische TypisierungWegen Punkt 2. braucht C++ einige komplizierte syntaktische Elemente (z.B. Templates), die bei dynamischer Typisierung nicht notwendig sind.
Es ist nunmal einfacher zu schreiben (dynamische Typisierung)
nasowas=[x, 1, "hallo"]als ein äquivalentes - aber -zigmal längeres - C++/boost-Programm
zu schreiben.Gruß
-
Undertaker schrieb:
Artchi schrieb:
Warum ist die Bananne krumm? Könnte man genauso gut fragen...

immerhin gibt es dafür eine erklärung: bananen wachsen der sonne entgegen.

Gut, dass C++ nicht Sun entgegenwächst :p
-
Undertaker schrieb:
immerhin gibt es dafür eine erklärung: bananen wachsen der sonne entgegen.

Hallo, Ten

-
CStoll schrieb:
Wäre es nicht einfacher für die Compilerhersteller auf solche exotischen Sachen zu verzichten und statt dessen mehr Performanceoptimerung zu machen?
Was hat denn das eine mit dem anderen zu tun?
Na, ich denk mal das es einfacher ist Code zu optimieren, wenn dieser einfacher ist. Ich kann mir gut vorstellen, dass es Stellen gibt, wo man was nicht oder nur sehr aufwendig optimieren kann, weil es sein kann das etwas zusätzlicheres und komplizierteres beachtet werden muss.
-
Kenner des Grundes schrieb:
Damit Nerds was zum frickeln haben und sich elitärer fühlen können.
Endlich bringts jemand auf den Punkt

-
Holztisch schrieb:
Na, ich denk mal das es einfacher ist Code zu optimieren, wenn dieser einfacher ist.
Du verwechselst parsen mit optimieren.
nur weil ein int m() eine funktion statt einer variablen ist, ist das doch nicht schwerer zu optimieren...
-
long long double schrieb:
Undertaker schrieb:
Artchi schrieb:
Warum ist die Bananne krumm? Könnte man genauso gut fragen...

immerhin gibt es dafür eine erklärung: bananen wachsen der sonne entgegen.

Gut, dass C++ nicht Sun entgegenwächst :p
ja, das wäre echt übel

-
Shade Of Mine schrieb:
Holztisch schrieb:
Na, ich denk mal das es einfacher ist Code zu optimieren, wenn dieser einfacher ist.
Du verwechselst parsen mit optimieren.
Das war's wohl, worüber ich bei Holztisch's Bemerkungen gestolpert bin.
@Holztisch:
Du mußt unterscheiden zwischen dem, was an C++ Code reinkommt, und dem was hinterher an Maschinencode entsteht. Und auf Maschinenebene sind solche Konstrukte wie eine lokale Funktionsdeklaration bedeutungslos (und haben auch keinen Einfluß darauf, wie gut sich etwas optimieren lässt).@LordJaxom: Schön, daß ich nicht der einzige bin, dem's auffällt

-
Ich hab mich schon gewundert, wo er ist.
-
Holztisch schrieb:
CStoll schrieb:
Holztisch schrieb:
Wer braucht den ne Funktionsdeklaration in einer Funktion?
Ist vielleicht nicht alltäglich, aber hin und wieder kommt's schon vor.
Wann kann man den die Funktionsdeklaration nicht vor die Funktion schreiben?
Wäre es nicht einfacher für die Compilerhersteller auf solche exotischen Sachen zu verzichten und statt dessen mehr Performanceoptimerung zu machen?
Sicher kann man es vor die Funktion schrieben, aber amüsanterweise ist es einfacher, eine Deklaration innerhalb der Funktion zu erlauben als sie zu verbieten.
Die Syntax von C++ ist in vielerlei Hinsicht einfacher als die von "einfacheren" Sprachen, allerdings muss man die Einfachheit dahinter verstehen. Um die Syntax einfach zu halten, muss auch sowas wie Klasse = Wert möglich sein.Wenn Du der Meinung bist, dass Du gute Ideen, wie eine alternative Syntax für diverse Konstrukte hast, so bin ich grundsätzlich interessiert.
Es gibt genug, dass man auch an C++ verbessern kann, aber grundsätzlich muss man C++ als eine der besten Sprachen auf dem Markt akzeptieren.
-
Xin schrieb:
...aber grundsätzlich muss man C++ als eine der besten Sprachen auf dem Markt akzeptieren.
weil sie weit verbreitet ist bzw. oft genutzt wird, oder wieso meinst du das?

-
SammyRukka schrieb:
Aber egal, wenn die Syntax einfacher sein soll, dann empfehle ich immernoch Java (sorry an alle C++-Jünger)
Stimmt, ein a.add(b) sieht tausendmal besser aus als ein a += b
.
-
Walli schrieb:
SammyRukka schrieb:
Aber egal, wenn die Syntax einfacher sein soll, dann empfehle ich immernoch Java (sorry an alle C++-Jünger)
Stimmt, ein a.add(b) sieht tausendmal besser aus als ein a += b
.Du mußt aber zugeben, dass man schon ne Menge Arbeit reinstecken muß, bis man ne Klasse gebaut hat, die sich vollständig und vernünftig mit den Operatoren bearbeiten lässt.
-
Jester schrieb:
Du mußt aber zugeben, dass man schon ne Menge Arbeit reinstecken muß, bis man ne Klasse gebaut hat, die sich vollständig und vernünftig mit den Operatoren bearbeiten lässt.
Und für wen soll das jetzt ein Argument sein? Eine Methode add() zu schreiben ist genauso einfach oder schwierig wie die Methode 'operator+=' - sie hat nur einen anderen Namen.
-
Wie oft habt ihr denn schon eine "add/+" Methode geschrieben? Wieviele Methoden habt ihr schon geschrieben, bei denen es keinen passenden operator gibt? Manche können ja << und >> für alles nehmen, naja...
-
mal ehrlich schrieb:
Wie oft habt ihr denn schon eine "add/+" Methode geschrieben?
Ich will nicht sagen, daß ich es täglich mache, aber es kommt vor. Und wenn sich hinter einer Methode eine Addition (im weitesten Sinne) verbirgt, finde ich op+ auf jeden Fall eleganter anzuwenden als ein add().
Wieviele Methoden habt ihr schon geschrieben, bei denen es keinen passenden operator gibt?
Wohl deutlich mehr - aber das spricht doch nicht gegen die Möglichkeiten der Operator-Überladung.
-
CStoll schrieb:
Und für wen soll das jetzt ein Argument sein? Eine Methode add() zu schreiben ist genauso einfach oder schwierig wie die Methode 'operator+=' - sie hat nur einen anderen Namen.
man kann in C++ mehr falsch machen, z.b. pointer statt referenzen zurückgeben oder eine referenz auf eine lokale variable zurückgeben und schon geht gar nix mehr.
...und ausserdem gehört zu einem 'operator+=' auch noch ein 'operator+', sonst ist es nicht komplett.

-
Undertaker schrieb:
CStoll schrieb:
Und für wen soll das jetzt ein Argument sein? Eine Methode add() zu schreiben ist genauso einfach oder schwierig wie die Methode 'operator+=' - sie hat nur einen anderen Namen.
man kann in C++ mehr falsch machen, z.b. pointer statt referenzen zurückgeben oder eine referenz auf eine lokale variable zurückgeben und schon geht gar nix mehr.
Was hat das bitteschön mit Operator-Überladung zu tun?
...und ausserdem gehört zu einem 'operator+=' auch noch ein 'operator+', sonst ist es nicht komplett.

Wer sagt das?
PS: Ich hab's schon bei deiner letzten Inkarnation aufgegeben, dir die Vorteile von C++ erklären zu wollen - das Spiel fange ich jetzt nicht wieder von vorne an.
-
CStoll schrieb:
mal ehrlich schrieb:
Wie oft habt ihr denn schon eine "add/+" Methode geschrieben?
Ich will nicht sagen, daß ich es täglich mache, aber es kommt vor. Und wenn sich hinter einer Methode eine Addition (im weitesten Sinne) verbirgt, finde ich op+ auf jeden Fall eleganter anzuwenden als ein add().
Wieviele Methoden habt ihr schon geschrieben, bei denen es keinen passenden operator gibt?
Wohl deutlich mehr - aber das spricht doch nicht gegen die Möglichkeiten der Operator-Überladung.
Naja, ich finde es halt komisch, weil hier immer wieder Operatorüberladung als tolles Feature angepriesen wird, obwohl man es vlt. in 5% aller Fälle einsetzen kann.
PS: Jetzt wurde am Anfang nix von Java erwähnt, aber sobald es einmal gesagt wurde, gibts hier wieder Java vs C++...
-
mal ehrlich schrieb:
CStoll schrieb:
mal ehrlich schrieb:
Wie oft habt ihr denn schon eine "add/+" Methode geschrieben?
Ich will nicht sagen, daß ich es täglich mache, aber es kommt vor. Und wenn sich hinter einer Methode eine Addition (im weitesten Sinne) verbirgt, finde ich op+ auf jeden Fall eleganter anzuwenden als ein add().
Wieviele Methoden habt ihr schon geschrieben, bei denen es keinen passenden operator gibt?
Wohl deutlich mehr - aber das spricht doch nicht gegen die Möglichkeiten der Operator-Überladung.
Naja, ich finde es halt komisch, weil hier immer wieder Operatorüberladung als tolles Feature angepriesen wird, obwohl man es vlt. in 5% aller Fälle einsetzen kann.
Das ist ja das tolle an C++ - es gibt viele Sachen, die zwar selten angewendet werden, aber trotzdem nützlich sind (ich glaube z.B. nicht, daß schonmal jemand ALLE STL-Funktionen praktisch eingesetzt hat - aber wenn man sie braucht, ist für fast jeden Zweck etwas vorhanden).
PS: Jetzt wurde am Anfang nix von Java erwähnt, aber sobald es einmal gesagt wurde, gibts hier wieder Java vs C++...
Und das wundert hier noch irgendjemanden?