Warum hat C++ so eine aufwendige Syntax?
-
Artchi schrieb:
DEvent schrieb:
String-Pools, k.a. letztens als ich 2 Strings mit == vergleichen wollte, ging es gruendlich schief.
Als ich von C++ nach Java gewechselt bin, war es das erste was bei mir in die Hose ging. Kollege von mir "Mach mal dies und das bitte zu morgen fertig.". Ich am basteln mit Strings, ich natürlich ganz selbstverständlich zwei Strings mit == verglichen. "Hem, also irgendwie hab ich hier nen Fehler. Woran liegt das?" Kollege: "Zeig mal! Achso... neee, du darfst in Java da kein == benutzen. Mußt du equals benutzen."
Falls es dich beruhigt, sowas passiert nicht nur in Java (Stichwort strcmp()).
@KasF: Die Frage nach der const correctness hatte ich schon bei einem der letzten C++ vs. Java Threads aufgebracht - mit dem Ergebnis, daß man ja die Klasse aufteilen könnte in eine änderbare Klasse und ein nicht-änderbares Interface (was dem const entsprechen sollte). Weitergehende Fragen zu der Umsetzung wurden von den Java-Verteidigern ignoriert,
(ich vermute mal, weil sie selber keine Ahnung haben, wie man das umsetzen könnte)
-
Simon2 schrieb:
DEvent schrieb:
...Einfach ein import packet.Klasse; und noch in classpath angeben wo sich die Libs befinden.
Äh ? Wo liegt da denn der Unterschied zu #include <subDir/header.h> (gerade, wo der headername in 99% der Fälle der Klassenname ist) und der Angabe eines Includepfads ?
Dass ich in C++ statisch linken kann und dann schon vor der Laufzeit einen LibPfad brauche ?So wie in Java solls auch nicht werden. Es wird aber prinzipiell das Modulsystem geändert (das bestehende kann man natürlich nicht weg nehmen), vorallem auch um das Buildsystem zu vereinfachen und damit mehr Build-Speed zu erhalten. Es geht dabei weniger darum, das jemanden stört #include zu schreiben. DEvent stört es vielleicht... und man wird wahrscheinlich auch kein #include mehr schreiben müssen. Aber es wird (wenn ich das Proposal richtig in Erinnerung habe) durch ein using namespace implizit das richtige Modul inkludiert und gelinkt. So in etwa... das Modul-Proposal kann sich auch noch ändern, es ist bisher nur ein Proposal, das vom C++-komitee als "interessant" bewertet wurde. Deshalb kann man heute sagen: es wird sich was bei C++ in dem Bereich sicherlich was ändern, aber Details muss man abwarten.
-
CStoll schrieb:
mit dem Ergebnis, daß man ja die Klasse aufteilen könnte in eine änderbare Klasse und ein nicht-änderbares Interface (was dem const entsprechen sollte).
Aha, habe auch gerade nen Link dazu gefunden ( siehe Thread )
-
Shade Of Mine schrieb:
Undertaker schrieb:
ich selbst habe auch mal C++ verwendet, und weiss, was für 'ne fummelei das ist im verhältnis zu sprache X.
Aber scheinbar hast du nicht wirklich viel von c++ gelernt. Ohne dir zu nahe treten zu wollen, dir fehlt komplett das verständnis für eine menge an essentiellen teilen von c++, dass du die sprache einfach nicht beurteilen kannst.
kein problem, du kannst mich ruhig kritisieren. dafür bin ich ja da

mein verständnis von C++ ist begrenzt, ja, aber ich habe es trotzdem (früher relativ oft) verwendet. ich denke, ich weiss darüber soviel wie ein durchschnittlicher anwender, etwa wie einer, der volkards tutorial durchgearbeitet hat und dann selbständig einige programme geschrieben hat.
...und (wie vielleicht schon anderswo gesagt habe) ich fands sogar mal ganz gut, - bis - nein, das sag' ich jetzt nicht (flamewar gefahr)...

-
Undertaker schrieb:
Shade Of Mine schrieb:
Undertaker schrieb:
ich selbst habe auch mal C++ verwendet, und weiss, was für 'ne fummelei das ist im verhältnis zu sprache X.
Aber scheinbar hast du nicht wirklich viel von c++ gelernt. Ohne dir zu nahe treten zu wollen, dir fehlt komplett das verständnis für eine menge an essentiellen teilen von c++, dass du die sprache einfach nicht beurteilen kannst.
kein problem, du kannst mich ruhig kritisieren. dafür bin ich ja da

mein verständnis von C++ ist begrenzt, ja, aber ich habe es trotzdem (früher relativ oft) verwendet. ich denke, ich weiss darüber soviel wie ein durchschnittlicher anwender, etwa wie einer, der volkards tutorial durchgearbeitet hat und dann selbständig einige programme geschrieben hat.Also gehörst du zu der "Ihgitt, C++ ist ja so kompliziert, Hello World ist in Basic viel einfacher"-Fraktion?

Undertaker schrieb:
...und (wie vielleicht schon anderswo gesagt habe) ich fands sogar mal ganz gut, - bis - nein, das sag' ich jetzt nicht (flamewar gefahr)...

Dann wird es Zeit, dass du deine C++-Kenntnisse auffrischt. Wenn du es schaffst, da unbefangen heranzugehen lauert eine ganze Welt voller interessanter und oft zugegebenermaßen etwas merkwürdiger Möglichkeiten auf dich.

Vielleicht würdest du dann ja auch verstehen, warum es nicht unbedingt eine Verbesserung ist, Dinge in einer Sprache einfach zu verbieten.
-
Mr. N schrieb:
Also gehörst du zu der "Ihgitt, C++ ist ja so kompliziert, Hello World ist in Basic viel einfacher"-Fraktion?

so ganz unrecht hast du damit nicht.

Undertaker schrieb:
Dann wird es Zeit, dass du deine C++-Kenntnisse auffrischt. Wenn du es schaffst, da unbefangen heranzugehen lauert eine ganze Welt voller interessanter und oft zugegebenermaßen etwas merkwürdiger Möglichkeiten auf dich.

und die wären?
sollte ich nicht besser Lisp o.ä. nehmen?
denn das wäre ja noch unbekannter und daher interessanter für mich.
jetzt mal im ernst: ich will mir schon eine ganze weile ADA und Python anschauen, hab's bisher aber immer auf die lange bank geschoben...
-
Undertaker schrieb:
Mr. N schrieb:
Also gehörst du zu der "Ihgitt, C++ ist ja so kompliziert, Hello World ist in Basic viel einfacher"-Fraktion?

so ganz unrecht hast du damit nicht.

Also ich würde mich nicht gerne in diese Fraktion einreihen lassen. Vor allem wenn man bedenkt, dass Hello World in Java noch viel komplizierter ist. :p
package dem.mrn.sein.helloworld; class MyHelloWorld { public static void main(String [] arguments) { System.out.println("Hello World!"); } }Oder geht das einfacher?
Undertaker schrieb:
Mr. N schrieb:
Dann wird es Zeit, dass du deine C++-Kenntnisse auffrischt. Wenn du es schaffst, da unbefangen heranzugehen lauert eine ganze Welt voller interessanter und oft zugegebenermaßen etwas merkwürdiger Möglichkeiten auf dich.

und die wären?
Das würdest du dann ja sehen.
Undertaker schrieb:
sollte ich nicht besser Lisp o.ä. nehmen?
Wie wärs mit beidem? :p
Undertaker schrieb:
denn das wäre ja noch unbekannter und daher interessanter für mich.
Lisp ist nicht unbekannt.
Undertaker schrieb:
jetzt mal im ernst: ich will mir schon eine ganze weile ADA und Python anschauen, hab's bisher aber immer auf die lange bank geschoben...

Wenn du was wirklich neues willst, lern Haskell.
(Das ist wirklich mal was anderes und ich bin ja so stolz dass ich die IO-Monad verstanden habe...
)
-
Mr. N schrieb:
Undertaker schrieb:
Mr. N schrieb:
Also gehörst du zu der "Ihgitt, C++ ist ja so kompliziert, Hello World ist in Basic viel einfacher"-Fraktion?

so ganz unrecht hast du damit nicht.

Also ich würde mich nicht gerne in diese Fraktion einreihen lassen.
ich hab' damit kein problem, bin ein praktisch veranlagter mensch.
warum soll ich mir zusätzliche komplexität antun (wie mit C++) ohne irgendeinen mehrwert zu bekommen?
ach, das hatte ich noch vergessen: ich benutze manchmal m$ visual-C++ um mit MFC quick-and-dirty windows-progrämmchen zu basteln. nicht weil C++ so toll ist, sondern weil die IDE einen guten codegenerator hat (und weil ich das codegerüst dann ganz einfach mit eigenem C-code füllen kann).
praktisch eben, aber es liegt nicht an C++, es ist das tool. C++ alleine ist mist.

-
Undertaker schrieb:
ich hab' damit kein problem, bin ein praktisch veranlagter mensch.
warum soll ich mir zusätzliche komplexität antun (wie mit C++) ohne irgendeinen mehrwert zu bekommen?
Und warum motzt du dann die ganze Zeit über C++, wenn du es eh nicht benutzen willst und es auch nicht benutzt und dich hier im Forum keiner dazu zwingt? Du hast doch die Möglichkeit KEIN C++ zu benutzen, oder zwingt dich jemand?
Wenn ich etwas nicht benutze, komme ich auch nicht dazu darüber zu motzen. Ich programmiere kein Python, und entsprechend bin ich NIE in einem Pythonforum gewesen und habe gemotzt. Obwohl ich es schon mal ansatzweise benutzt habe. Aber dann war die Geschichte auch für mich gegessen, weil es mir nicht gefallen hat.
Aber du willst nur stänkern. Einen anderen Grund für deine Ausgüsse erkenne ich nicht, nach deiner eigenen Aussage.
Undertaker schrieb:
ach, das hatte ich noch vergessen: ich benutze manchmal m$ visual-C++ um mit MFC quick-and-dirty windows-progrämmchen zu basteln. nicht weil C++ so toll ist, sondern weil die IDE einen guten codegenerator hat (und weil ich das codegerüst dann ganz einfach mit eigenem C-code füllen kann).
praktisch eben, aber es liegt nicht an C++, es ist das tool. C++ alleine ist mist.

Da ist doch der totale Widerpruch! Du sagst man kann mit C++ nichts produktiv oder produktiver als Sprache X machen, benutzt es aber trotzdem??? Verarschung pur, was du hier mit uns machst. Oder du willst Aufmerksamkeit, weil dich wohl zu Hause keiner lieb hat.
-
Undertaker schrieb:
Mr. N schrieb:
Undertaker schrieb:
Mr. N schrieb:
Also gehörst du zu der "Ihgitt, C++ ist ja so kompliziert, Hello World ist in Basic viel einfacher"-Fraktion?

so ganz unrecht hast du damit nicht.

Also ich würde mich nicht gerne in diese Fraktion einreihen lassen.
ich hab' damit kein problem, bin ein praktisch veranlagter mensch.
warum soll ich mir zusätzliche komplexität antun (wie mit C++) ohne irgendeinen mehrwert zu bekommen?
Gegenüber Basic hat C++ definitiv einen Mehrwert.
Außerdem: du hast schon gemerkt, dass das Java-Beispiel wesentlich komplexer ist? Nochmal zum vergleichen:
#include <iostream> int main() { std::cout << "Hello World! << std::endl; }versus
package dem.mrn.sein.helloworld; class MyHelloWorld { public static void main(String [] arguments) { System.out.println("Hello World!"); } }Undertaker schrieb:
ach, das hatte ich noch vergessen: ich benutze manchmal m$ visual-C++ um mit MFC quick-and-dirty windows-progrämmchen zu basteln. nicht weil C++ so toll ist, sondern weil die IDE einen guten codegenerator hat (und weil ich das codegerüst dann ganz einfach mit eigenem C-code füllen kann).
praktisch eben, aber es liegt nicht an C++, es ist das tool. C++ alleine ist mist.

Also wenn das C++ das dir Visual Studio generiert dein einziger Maßstab ist, dann kann ich die Bewertung sogar verstehen.

-
Mr. N schrieb:
Außerdem: du hast schon gemerkt, dass das Java-Beispiel wesentlich komplexer ist? Nochmal zum vergleichen:
#include <iostream> int main() { std::cout << "Hello World! << std::endl; }versus
package dem.mrn.sein.helloworld; class MyHelloWorld { public static void main(String [] arguments) { System.out.println("Hello World!"); } }ROFL
-
Artchi schrieb:
Simon2 schrieb:
DEvent schrieb:
...Einfach ein import packet.Klasse; und noch in classpath angeben wo sich die Libs befinden.
Äh ? Wo liegt da denn der Unterschied zu #include <subDir/header.h> (gerade, wo der headername in 99% der Fälle der Klassenname ist) und der Angabe eines Includepfads ?
Dass ich in C++ statisch linken kann und dann schon vor der Laufzeit einen LibPfad brauche ?So wie in Java solls auch nicht werden. Es wird aber prinzipiell das Modulsystem geändert (das bestehende kann man natürlich nicht weg nehmen), vorallem auch um das Buildsystem zu vereinfachen und damit mehr Build-Speed zu erhalten. Es geht dabei weniger darum, das jemanden stört #include zu schreiben. DEvent stört es vielleicht... und man wird wahrscheinlich auch kein #include mehr schreiben müssen. Aber es wird (wenn ich das Proposal richtig in Erinnerung habe) durch ein using namespace implizit das richtige Modul inkludiert und gelinkt. So in etwa... das Modul-Proposal kann sich auch noch ändern, es ist bisher nur ein Proposal, das vom C++-komitee als "interessant" bewertet wurde. Deshalb kann man heute sagen: es wird sich was bei C++ in dem Bereich sicherlich was ändern, aber Details muss man abwarten.
Mich stoert nicht das include, sondern was dazu gehoert. Dazu gehoeren die include-guards, vergisst man die, gibts Stress.
Dann kann man in den Headern Variablen deklarieren. Wieso ist sowas erlaubt?
Man braucht keine namespaces zu benutzen. Wozu sind die dann gut? Das man sie nicht benutzen braucht, fuert entweder dazu, dass jeder eine eigene Praefix-Style zu seinen Typen drannsetzt, oder aber das ich Probleme kriegen kann, obwohl ich alles richtig mache. (QtObject oder CString oder so ein Bloedsinn, wieso nicht einfach namespaces?).
Dann gibt es soviele Bibliothek-Typen, wie es Systeme und Compiler gibt. In Java habe ich nur die vorkompelierten Class-Dateien. Die werden von jedem Java-Compiler verstanden. Das der ISO Standard keine Angaben zu Bibliotheken macht, fuert doch nur dazu, dass man sich auf den kleinsten Nenner einigen muss. Der kleinste Nenner ist aber leider C-Code. Damit hat man doch die ganzen Vorteile von C++ wieder weggeworfen.
Dann die Compiler-Zeit. Auch mit prebuffered Headers dauerte es Ewigkeiten, wenn man mal ein wichtiges Interface geaendert hat. In Eclipse dauert das bei meinem aktuellem Projekt grade mal 3 oder 4 Sekunden. (ist schon groeseres Projekt, ca. >100 Klassen, kann man das irgendwie Zaehlen?)
Im grunde kann man das ganze abkuezen: Mir gefaelt C++ einfach nicht, weil es viel zu viele Altlasten hat. Deswegen ist auch Java, C#, RubyOnRails usw. im kommen, weil sie eben keine Altlasten haben.
-
Ja, wissen wir doch alles schon. Ändert aber nichts daran, wenn man das jeden Monat in einem C++-Forum wiederholt.
Und jetzt?

-
DEvent schrieb:
Dann kann man in den Headern Variablen deklarieren. Wieso ist sowas erlaubt?
Gegenfrage: Wieso sollte man das verbieten?
Man braucht keine namespaces zu benutzen. Wozu sind die dann gut? Das man sie nicht benutzen braucht, fuert entweder dazu, dass jeder eine eigene Praefix-Style zu seinen Typen drannsetzt, oder aber das ich Probleme kriegen kann, obwohl ich alles richtig mache. (QtObject oder CString oder so ein Bloedsinn, wieso nicht einfach namespaces?).
Man braucht nicht, aber man darf (aber einige Bibliotheken sind wohl entstanden, bevor der ANSI-Standard voll ausgearbeitet war.
Dann gibt es soviele Bibliothek-Typen, wie es Systeme und Compiler gibt. In Java habe ich nur die vorkompelierten Class-Dateien. Die werden von jedem Java-Compiler verstanden. Das der ISO Standard keine Angaben zu Bibliotheken macht, fuert doch nur dazu, dass man sich auf den kleinsten Nenner einigen muss. Der kleinste Nenner ist aber leider C-Code. Damit hat man doch die ganzen Vorteile von C++ wieder weggeworfen.
Nein, der kleinste gemeinsame Nenner ist die C++ Standardbiliothek (und die sollte jeder Compiler haben).
-
DEvent schrieb:
Im grunde kann man das ganze abkuezen: Mir gefaelt C++ einfach nicht, weil es viel zu viele Altlasten hat. Deswegen ist auch Java, C#, RubyOnRails usw. im kommen, weil sie eben keine Altlasten haben.
Ich will keine Diskussion diesbezüglich: aber diese Sprachen haben sehr wohl altlasten - die reichen zwar nicht so weit zurück, aber in ein paar jahren sind die altlasten auch wieder ein problem. bei java zB hast du enorme probleme mit der bytecode kompatibilität was neue features betrifft. das erkennt man zB an der generics implementierung.
altlasten hat jede sprache - denn eine trennung der altlasten bedeutet real world code wegzuschmeissen. und da spielen die leute nicht mit.
warum java etc im kommen hat einen anderen grund. php ist zB auch ganz gross und es hat unendliche C altlasten drin

-
Diese ganzen Fakten, wie verschiedene Lib-Typen usw., sind nichts neues und gibts seit 20 Jahren. Also ich frage jetzt einfach mal: warum erzählt ihr uns das?
-
Artchi schrieb:
Diese ganzen Fakten, wie verschiedene Lib-Typen usw., sind nichts neues und gibts seit 20 Jahren. Also ich frage jetzt einfach mal: warum erzählt ihr uns das?
Weil ich hoffe das man diese Nachteile der Sprache endlich verbessert. Denn ich mag eigentlich die Sprache C++. Wenn ich sie nicht moegen wuerde, dann waere sie mir egal und ich wuerde nie wieder darueber ein Wort verlieren.
Nein, der kleinste gemeinsame Nenner ist die C++ Standardbiliothek (und die sollte jeder Compiler haben).
Ich kann also eine Lib schreiben mit Compiler x unter System y, die Klassen exportiert, und diese Klassen dann in System g unter Compiler h wieder importieren?
Gegenfrage: Wieso sollte man das verbieten?
Weil Header eigentlich nur das Interface bekannt geben sollen.
Wenn ich schon dabei bin: Wieso muss man in den Headers auch private-Member bekanntgeben?
-
DEvent schrieb:
...
Mich stoert nicht das include, sondern was dazu gehoert. Dazu gehoeren die include-guards, vergisst man die, gibts Stress. ...
Dann kann man in den Headern Variablen deklarieren. Wieso ist sowas erlaubt?Das liegt (wie eigentlich fast alles, was Javaprogrammierer an C++ bemängeln) doch nur daran, dass #include deutlich mächtiger ist als import. Man hat eben eine Präprozessorprogrammierung, die es in Java nicht gibt. "Automatische include-guards" würden Code wie folgenden unmöglich machen:
//DATA.vals "Hier stehen meine" "20 MB TEST-Daten" "drin"//Modul.cpp char TestData[] = #include "DATA.vals" ; char TestData_Kopie[] = #include "DATA.vals" ;DEvent schrieb:
...
Man braucht keine namespaces zu benutzen.Du monierst die Existenz des globalen Namespace ?
DEvent schrieb:
...
Dann gibt es soviele Bibliothek-Typen, wie es Systeme und Compiler gibt.
...In Java brauche ich auch für jedes System meine eigene Runtime. Wer nicht wirklich kompiliert, sondern nur zur Laufzeit interpretiert, verlagert das Problem eben auf die Laufzeit.
Die mangelnde Vereinheitlichung bzgl. Compiler(versione)n halte ich auch für eine echte Schwäche von C++.DEvent schrieb:
...
Dann die Compiler-Zeit. Auch mit prebuffered Headers dauerte es Ewigkeiten, wenn man mal ein wichtiges Interface geaendert hat....In Java wird ja auch nicht "kompiliert". Verglichen mit dem Job, den C++-Compiler machen (Typsicherheit zur Compilezeit, Optimierung auf gewünschte Plattform, Auslinken, ...) macht der jbuild so gut wie nichts.
Wie oben schon angedeutet: Die meisten Einwände gegen C++ von Javaisten beklagen, dass C++ Dinge kann, mit denen sie nicht klarkommen. Es sind nur in den allerseltensten Fällen Dinge, die C++ NICHT kann, sondern viel öfter ein ZUVIEL.
Viele dieser Dinge sind aber beileibe nicht "überflüssig", sondern ermöglichen oftmals erst die Umsetzung interessanter Programmierkonzepte (z.B. RAII, const-correctness, Metaprogrammierung, ....). In der Vielfalt der Konzepte liegt für mich gerade der Reiz von C++.
Gruß,
Simon2.
-
hääää schrieb:
wär is päle dofg

CStoll schrieb:
die x-te Reinkarnation eines ***** (ich bin nicht ganz sicher, wie die erste Inkarnation hieß, die (x+1)-te ist Undertaker (mit einer Sicherheit von 99,9%)).
Artchi schrieb:
Das ist so ein Typ, der nach jeder Blamage hier wieder mit einem neuen Nickname im Forum auftaucht. Und immer wieder die gleichen Threads startet und versucht es immer wieder. Anscheinend ist er ein bischen *mach_eine_deutliche_handbewegung*
weiß ich doch ich wollts nur nochmal von euch hörn

@Mr.N:
java und c++ sind beide müll weil
echo "hello world"
is viel kürzer !!1einz *mach_eine_deutliche_handbewegung*
-
DEvent schrieb:
Mich stoert nicht das include, sondern was dazu gehoert. Dazu gehoeren die include-guards, vergisst man die, gibts Stress.
Yo, ist eine Altlast die mich auch stört. Eine IDE sollte dies wenigstens unterstützen, was z.B. VC++ auch macht. Erstelle ich eine neue H-Datei, packt VC++ autom. seinen Includeguard rein. Hier sollten IDEs die Sprachdefizite versuchen zu lindern. Aber im Prinzip ist das ein Thema das es seit bestimmt 30 Jahren gibt. (weiß nicht wie alt C ist)
DEvent schrieb:
Dann kann man in den Headern Variablen deklarieren. Wieso ist sowas erlaubt?
Warum nicht?
DEvent schrieb:
Man braucht keine namespaces zu benutzen.
In der hier heiß gelobten SPrache Java braucht man auch keine Packages definieren. Kann genauso zum Namenskonflickt führen. Ist dort auch nur eine freiwillige Angelegenheit.
DEvent schrieb:
Wozu sind die dann gut?
Um Namenskonflickte zu vermeiden.
DEvent schrieb:
Das man sie nicht benutzen braucht, fuert entweder dazu, dass jeder eine eigene Praefix-Style zu seinen Typen drannsetzt, oder aber das ich Probleme kriegen kann, obwohl ich alles richtig mache. (QtObject oder CString oder so ein Bloedsinn, wieso nicht einfach namespaces?).
Puh, ich weiß nicht wie oft ich das noch sagen muß: QObject, CString usw. sind vor dem C++-Standard entstanden. Da gab es offiziell keine Namespaces. Wollen wir jetzt auf Kamellen rumreiten, die vor 10 Jahren galten? Oder wollen wir über den aktuellen Stand reden?
DEvent schrieb:
Dann gibt es soviele Bibliothek-Typen, wie es Systeme und Compiler gibt. In Java habe ich nur die vorkompelierten Class-Dateien. Die werden von jedem Java-Compiler verstanden. Das der ISO Standard keine Angaben zu Bibliotheken macht, fuert doch nur dazu, dass man sich auf den kleinsten Nenner einigen muss.
Das ist so nicht richtig. ISO Standard macht sehr wohl Angaben zu Bibliotheken. Es gibt eine Std-Lib. Das ist Fakt und wurde hier im Forum immer wieder genannt.
DEvent schrieb:
Im grunde kann man das ganze abkuezen: Mir gefaelt C++ einfach nicht, weil es viel zu viele Altlasten hat. Deswegen ist auch Java, C#, RubyOnRails usw. im kommen, weil sie eben keine Altlasten haben.
Dann steig doch auf Java, C# oder Ruby um. Die können doch alle deine Wünsche besser erfüllen. (meine ich ernst!)