Warum hat C++ so eine aufwendige Syntax?



  • Wegen der C++ Syntax gibt es auch keine richtigen Garbagecollector, weil das zu schierig ist.



  • Simon2 schrieb:

    Ich denke, mehr wollte Jester nicht ausdrücken....

    Ich weiß zwar nicht was du meinst, aber lassen wir das doch Jester selber sagen. Es interessiert mich auch, wie die String-Pool-Garantien sind, und wieso ich die nicht in der Dokumentation von java.lang.String finde. 😕

    DEvent schrieb:

    Aber C++ ist wirklich ein wenig gefrickel mit den includes und den Libs und den Makefiles. Wann wird das so elegant wie bei Java, C# oder Ruby geloest? Einfach ein import packet.Klasse; und noch in classpath angeben wo sich die Libs befinden.

    Da gab es einen Vorschlag für C++0x, der wurde aber glaube ich abgelehnt. (Modules)



  • Hamselt schrieb:

    Wegen der C++ Syntax gibt es auch keine richtigen Garbagecollector, weil das zu schierig ist.

    natürlich gibt es für c++ garbagecollectors. die funktionieren auch gut, nur sind sie halt nicht übermäßig beliebt.



  • 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."

    Yo, das weiß ich noch wie heute. Und das ist schon 7 Jahre her!

    DEvent schrieb:

    Aber C++ ist wirklich ein wenig gefrickel mit den includes und den Libs und den Makefiles. Wann wird das so elegant wie bei Java, C# oder Ruby geloest? Einfach ein import packet.Klasse; und noch in classpath angeben wo sich die Libs befinden.

    Yo, wer den offenen ISO-C++-Prozess aufmerksam und interessiert verfolgt, wird die Antwort darauf kennen. :p



  • 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 ?

    Gruß,

    Simon2.



  • Hamselt schrieb:

    Wegen der C++ Syntax gibt es auch keine richtigen Garbagecollector, weil das zu schierig ist.

    Aha? Aber das GC im nächsten C++ Standard enthalten sein wird, ist dir entgangen?



  • CStoll schrieb:

    wie man in Java const-korrekte Programme schreiben kann

    Genau das wollte ich gleich im Java-Forum fragen 🙂

    "Stringpool" war das Wort, was ich hier gesucht hatte:

    KasF schrieb:

    Da "x" sonst irgendwo im Speicher erzeugt werden würde und a und b beide diese Speicherstelle von "x" refernzieren würden.



  • Mr. N schrieb:

    Simon2 schrieb:

    Ich denke, mehr wollte Jester nicht ausdrücken....

    Ich weiß zwar nicht was du meinst, ...

    Wenn Du nicht verstehst, was ICH meine, darfst Du ruhig mich fragen (zumal ich in diesem Fall Jesters Meinung teile): Dein Beispiel war ungeschickt !
    Nicht mehr und nicht weniger: Du hattest einen richtigen Punkt, hast aber ein Beispiel gewählt, in dem dieser Punkt nicht ausreichend (klar) herauskommt.

    Gruß,

    Simon2.



  • Mr. N schrieb:

    DEvent schrieb:

    Aber C++ ist wirklich ein wenig gefrickel mit den includes und den Libs und den Makefiles. Wann wird das so elegant wie bei Java, C# oder Ruby geloest? Einfach ein import packet.Klasse; und noch in classpath angeben wo sich die Libs befinden.

    Da gab es einen Vorschlag für C++0x, der wurde aber glaube ich abgelehnt. (Modules)

    Ne, nicht wirklich. Wurde nicht abgelehnt. Wird nur nicht mehr Thema für den C++0x sein, weil man das alles sonst zeitlich nicht mehr schaffen würde. (gibt wichtigeres für C++0x fertig zu machen)

    Wird für den darauf folgenden Standard ein Thema sein, der Proposal wurde sozusagen auf Wait gesetzt. 😉



  • 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


Anmelden zum Antworten