Was würdet Ihr an C++ ändern, wenn Ihr keine Rücksicht auf Kompatibilität, Geld, Zeit, Arbeit, etc. nehmen müssten?



  • net schrieb:

    fliesskommakonstante als hexzahl? das ist total abgefahren 👍
    sowas wird man wohl in 100 jahren nicht gebrauchen...

    Du musst es ja wissen. 🙄



  • camper schrieb:

    net schrieb:

    @topic: ich würde referenzen abschaffen, pointer reichen voll und ganz

    dann schaffst du auch operatoren überladung ab.

    auch das, der übersichtlichkeit wegen. sowas wie 'object.add()' ist viel eindeutiger. bestes negativbeispiel sind ja << und >> bei den streams, welche ja urspünglich bit-shift operatoren sind, aber da eine andere bedeutung haben. damit man so'n unfug gar nicht erst machen kann, kennt z.b. java auch keine operatorenüberladung.
    hehe, das fällt schon auf - viele verbesserungen laufen auf sowas wie java hinaus 😃



  • net schrieb:

    camper schrieb:

    net schrieb:

    @topic: ich würde referenzen abschaffen, pointer reichen voll und ganz

    dann schaffst du auch operatoren überladung ab.

    auch das, der übersichtlichkeit wegen. sowas wie 'object.add()' ist viel eindeutiger.

    Wieso das? Wenn ich zB zwei (mathematische) Vektoren habe und rechne

    a = a + b;
    // bzw
    a += b;
    

    ist das einfacher und intuitiver als

    a.add(b);
    

    Operatorüberladung (sowie Referenzen) abzuschaffen ist imo Unsinn. Wer sowas nicht nutzen will, braucht es ja auch nicht.



  • groovemaster schrieb:

    Wieso das? Wenn ich zB zwei (mathematische) Vektoren habe und rechne

    a = a + b;
    // bzw
    a += b;
    

    ist das einfacher und intuitiver als

    a.add(b);
    

    was macht das '+'? addiert es immer zwei elemente der vektoren oder hängt es den einen vektor an den anderen dran?

    groovemaster schrieb:

    Operatorüberladung (sowie Referenzen) abzuschaffen ist imo Unsinn. Wer sowas nicht nutzen will, braucht es ja auch nicht.

    manchmal muss man es. gibt viele libs die das einsetzen



  • net schrieb:

    sowas wie 'object.add()' ist viel eindeutiger.

    Beliebter Java Fehler:

    a.add(b);

    ups. falsch. add addiert b zu a und liefert das ergebnis ohne a zu verändern.
    wäre mit + nicht passiert.

    + ist natürlich genauso eindeutig wie eine methode 'plus', dh, wenn du die Methode plus zum dividieren verwendest, würdest du sagen 'doofer programmierer' und nicht 'doof dass man methoden selber benennen kann', oder?

    macht
    vec.add(otherVec);
    jetzt eine addition von allen werten, da vec[0]+=otherVec[0] usw. oder hängt es otherVec an vec an?
    wer kann das schon sagen. genauso bei +
    es ergibt sich aus der api. bei einer guten api wird man das nicht verwechseln.

    ein
    a.add(b)
    ist aber immer zweideutig
    natürlich kann man sagen, dass es sich aus der api ergibt, aber zB bei vec+otherVec kann ich immer zu einer methode append() wechseln, aber was amche ich bei a.add(b)? da kann ich nicht zu etwas anderem wechseln, um besser auszudrücken ob ich + oder += meine.

    mal von so perversitäten wie
    a.add(b.multiply(c.divide(4)));



  • PD schrieb:

    @irgendwer:
    Das es dafür keinen technischen grund gibt ist nicht ganz wahr. Irgendwo brauchen Operatoren wie sizeof() auch ihre Infos ^^ Das bedeutet der Typ muss bekannt sein. Wenn man nun in seinem Hauptprogramm eine andere definition hätte (auf grund der fehlenden privates) als z.B. in seiner lib würde sizeof() wahrscheinlich mucken ^^ Und allgemein die Speicherverwaltung wäre ziemlich übel dran.

    Wer lesen kann ist im Vorteil : Ich schrieb über private Methoden welche nichts an der Größe ändern.



  • Artchi schrieb:

    Und warum sollte z.B. regex auf std::string verzichten? Das willst du doch eigentlich damit andeuten?

    Warum sollte es z.B. Regex nicht auf jedem System geben? Selbst jeder PDA hat Leistung und Speicher ohne Ende. Verstehe den Grund nicht, warum man noch die Minimalisten-Tour bei C++ fahren soll?

    weil die industrie noch viele minnimalistensysteme einsetzt die mit c++ programmiert werden?
    und die zahl der embedded systeme is eher am steigen als am zurückgehn

    du darfst nich nur den consumer markt sehn



  • this sollte in self umbenannt werden, und der typ von self sollte nicht T* sondern T& sein.



  • otze schrieb:

    this sollte in self umbenannt werden,

    lieber ocaml syle, da kann man this selber benennen 🙂



  • Shade Of Mine schrieb:

    macht
    vec.add(otherVec);
    jetzt eine addition von allen werten, da vec[0]+=otherVec[0] usw. oder hängt es otherVec an vec an?
    wer kann das schon sagen. genauso bei +

    im prinzip haste schon recht, man kann beides übelst missbrauchen. der nachteil an überladenen operatoren ist nur einfach die schlechtere lesbarkeit. ein unscheinbares a+b irgendwo im quelltext könnte man für 'ne addition halten d.h. es sieht total harmlos aus und wirkt etwas irreführend.

    Sovok schrieb:

    Artchi schrieb:

    Und warum sollte z.B. regex auf std::string verzichten? Das willst du doch eigentlich damit andeuten?
    Warum sollte es z.B. Regex nicht auf jedem System geben? Selbst jeder PDA hat Leistung und Speicher ohne Ende. Verstehe den Grund nicht, warum man noch die Minimalisten-Tour bei C++ fahren soll?

    weil die industrie noch viele minnimalistensysteme einsetzt die mit c++ programmiert werden?

    naja, aber solche libs wären sicher optional. wenn man keine regex-library mit linkt dann gibt's das eben nicht.



  • net schrieb:

    ein unscheinbares a+b irgendwo im quelltext könnte man für 'ne addition halten [...]

    Und das sollte es ja auch sein, selbst bei Überladungen. Nur eine unscheinbare Addition ..

    Nebenbei bemerkt vermisse ich in C++ etwas mehr Anpassung an dlls. Dann noch ein paar Kleinigkeiten, wie eine typsichere
    Ellipse, oder Verkettungen von Konstruktoren, etc ..



  • ikona schrieb:

    net schrieb:

    ein unscheinbares a+b irgendwo im quelltext könnte man für 'ne addition halten [...]

    Und das sollte es ja auch sein, selbst bei Überladungen. Nur eine unscheinbare Addition ..

    ja, warum suche ich jetzt schon 5 stunden diesen fehler? es kann doch nicht an einer einfachen addition liegen 😃



  • net schrieb:

    ikona schrieb:

    net schrieb:

    ein unscheinbares a+b irgendwo im quelltext könnte man für 'ne addition halten [...]

    Und das sollte es ja auch sein, selbst bei Überladungen. Nur eine unscheinbare Addition ..

    ja, warum suche ich jetzt schon 5 stunden diesen fehler? es kann doch nicht an einer einfachen addition liegen 😃

    features rauszunehmen weil programmierer sie schlecht anwenden halt ich aber ned für sinnvoll
    nen bug den ich wegen einer operatorüberladung nich gefunden hab hatt ich noch nie

    bei punkttransformationen z.b. sind die operatoren göttlich

    net schrieb:

    naja, aber solche libs wären sicher optional. wenn man keine regex-library mit linkt dann gibt's das eben nicht.

    der aktuelle stand bei c++ is eher, dass ich z.b. kein stdlib hab (string,vector) weil das system kein ordentliches filesystem hat und somit fstream nich portabel is
    ich kenn die stdlib intern nich so genau aber die scheint ja nich sonderlich modular zu sein

    wenn also unser jetziges system nich optimal is sollte es eher überarbeitet werden, bevor man was neues hinzufügt



  • Sovok schrieb:

    net schrieb:

    naja, aber solche libs wären sicher optional. wenn man keine regex-library mit linkt dann gibt's das eben nicht.

    der aktuelle stand bei c++ is eher, dass ich z.b. kein stdlib hab (string,vector) weil das system kein ordentliches filesystem hat und somit fstream nich portabel is

    eigentlich kann man auf minimalsystemen alles vergessen, was dynamischen speicher braucht. ...und c++ ohne 'new' ist nur noch zur hälfte zu gebrauchen



  • Yo, Minimal-Systeme programmiert man (wenn man eine Hochsprache benutzen will) doch eher in C oder in J2ME?



  • Warum noch Herumdoktern an einer Missratenen Sprache wie C++, wo es doch so schöne Sprachen wie C# oder Python gibt?

    BTW: Schon mal die Mehrfachvererbung in Python angeschaut? Die Implementierung der Mehrfachvererbung in C++ ist ein einziger Witz 👎



  • Artchi schrieb:

    Yo, Minimal-Systeme programmiert man (wenn man eine Hochsprache benutzen will) doch eher in C oder in J2ME?

    Was ist mit der Spieleprogrammierung?
    Da sollte man doch auch nicht gerade mit Speicher (Ich sag nur Resources) und CPU/GPU-Leistung durch die Gegend schläudern.

    Sovok schrieb:

    bei punkttransformationen z.b. sind die operatoren göttlich

    Habs zwar noch nicht probiert, aber ich kann mir das schon sehr gut im Zusammenhang mit Kreutzprodukten (Vektoren) und Matrizen vorstellen!
    Wie sähe das denn sonst aus?

    Matrix EineMatrix(...);
    Matrix EineMatrix2(....);
    Matrix EineMatrix3(EineMatrix.BuildSquare...(EineMatrix2));
    

    ??? 😕

    @Thread: Ich ware auf jeden Fall für einen erweiterten Standard,
    also mit GUI, Sockets und Threads.



  • net schrieb:

    was macht das '+'? addiert es immer zwei elemente der vektoren oder hängt es den einen vektor an den anderen dran?

    Genau das meinte ich mit intuitiv. Du denkst einfach zu kompliziert, weil du wahrscheinlich schon zu viele Schweinereien unbewusst wahrgenommen hast.
    + ist ein mathematischer Ausdruck, der für Addition verwendet wird. Wenn da also a + b steht, heisst das, dass 2 Vektoren addiert werden. Und Vektoraddition ist eindeutig definiert, schau mal in deinem Mathe Lehrbuch nach. Was soll daran also unklar sein?
    Eine andere Sache ist es, wenn Operatoren missbraucht werden. Da wären wir also wieder bei std::string. Wer sich einmal mit Operatorenüberladung angefreundet hat, schreibt halt lieber s1 += s2 statt s1.append(s2). Leider wird hier Operator + (bzw +=) missbraucht und somit geht das intuitive Verständnis verloren. Nur was soll man machen? Einen neuen Operator für Konkatenation einführen? Das ruft natürlich wieder die Kritiker auf den Plan, die schon jetzt sagen, dass zu viele Operatoren vorhanden sind.

    Und weil wir gerade beim Thema Operatoren sind, für C++ würde ich mir noch rotate left und rotate right Operatoren wünschen, evtl. <<< bzw >>>. 🙂



  • audacia schrieb:

    Rauswerfen? Sicher? Dir ist klar, welcher Basis sich C++ entzöge?

    Du bist sicher, dass du das Thema gelesen hast? Hier geht es nicht um realistische oder politisch kluge Entscheidungen, sonst hätte ichs an das ISO-Kommitee geschrieben.

    audacia schrieb:

    Ich glaube, du brauchst eine andere Programmiersprache.

    Ich will eine freie, imperative, nicht krankhaft OO-fixierte Programmiersprache mit möglichst wenig/null Abstraktionsoverhead und - du wirst es nicht glauben - da ist C++ tatsächlich meine Lieblingssprache und ich weiß nicht, was dagegen spricht, dass sie mit den aufgelisteten Features noch besser wäre. Vermutlich wäre sie nur einfach nicht so elitär verkrüppelt und kryptisch wie sie es heute ist, aber das ist ja auch was wert 👍


  • Mod

    Eine möglichkeit, kurzschlussauswertung von operatoren oder funktionen zu ermöglichen wäre gelegentlich nützlich - einige operatoren werden ja oft nur deshalb nicht überladen weil diese kurzschlussauswertung dann nicht möglich wäre, etwa so:

    class A;
    bool operator&&(const A& lhs, deferred const A& rhs)
    {
    // der ausdruck für rhs ist hier noch nicht ausgewertet und auch nicht im scope
       if ( ... ) ..  // irgendwas das nur von lhs abhängt
       const A& rhs = deferred; // den ausdruck für rhs auswerten und rhs initialisieren
    // ...
    }
    

Anmelden zum Antworten