Was würdet ihr an C++ verbessern?



  • Auf die schnelle fehlt mir nur ...

    // alte vorgehensweise

    .h

    class Foo
    {
        static int a;
    };
    

    .cpp

    int Foo::a = 0;
    

    // neue vorgehensweise

    .h

    class Foo
    {
        static int a;
    
        static Foo(int a = 0) : a(a)
        {}
    };
    

    .cpp

    // die syntax gilt nicht wenn die klasse einen static constructor hat
    // error static constructor definiert, benutze in zu init...
    int Foo::a = 0;
    


  • Matzer schrieb:

    ipsec schrieb:

    "automatisch deduzierte Templateparameter". Beispiel (Syntax variabel):

    Hm, warum reicht dir nicht:

    template<typename T>
    struct foo{};
    
    foo<decltype(5)> some_foo;
    

    ?

    Dann hat man aber den Wert 5 nicht als Templateparameter. Ich will im Prinzip eine Vereinfachung von foo<int, 5> , foo<double(*)(double), &sin> usw. Damit und mit den Arrays sind dann auch Metastringverarbeitungen möglich. foo<"Hello World!"> ist dann eine Abkürzung für foo<char, 13, "Hello World!"> .



  • Schön wären auch noch Properties. Da sehen zwar viele Nachteile durch Überraschungen ( a.name kann plötzlich die Festplatte formatieren), das trifft aber z.B bei Operatorenüberladung genauso zu. Ich sehe das als Feature, das man sicherlich missbrauchen kann (wie vieles in C++), das aber bei richtiger Anwendung manches eleganter macht.
    Weiter muss man überlegen, wie man Sachen wie a.x += 2 auflöst, wenn x ein Property ist, aber da findet man sicher eine Lösung.



  • + Weg mit den Scheiss Headern
    + Properties
    + Enum Konstanten nur qualifizierbar mit Namespacenamen (gibts vermutlich ab C++0x)
    + Syntaxvereinfachungen (vor allem bei Templates)
    + Hat nix mit der Sprache zu tun, aber gehoert dennoch in ihr Umfeld: Endlich eine gescheite Standard Library mit Threads, XML, Networking etc.



  • Darf man zusammenfassen, dass ihr eine Art syntaktisches C# mit Template-Metaprogrammierung und STL wünscht?

    MfG SideWinder



  • SideWinder schrieb:

    Darf man zusammenfassen, dass ihr eine Art syntaktisches C# mit Template-Metaprogrammierung und STL wünscht?

    Auf keinen Fall! Die C#-Syntax finde ich teilweise nicht gelungen, in fast allen Fällen finde ich die C++-Alternative besser. Auch würde ich z.B. Properties syntaktisch nicht wie in C# umsetzen wollen.



  • ipsec schrieb:

    SideWinder schrieb:

    Darf man zusammenfassen, dass ihr eine Art syntaktisches C# mit Template-Metaprogrammierung und STL wünscht?

    Auf keinen Fall! Die C#-Syntax finde ich teilweise nicht gelungen, in fast allen Fällen finde ich die C++-Alternative besser. Auch würde ich z.B. Properties syntaktisch nicht wie in C# umsetzen wollen.

    Nun aber raus mit der Sprache, Beispiele, Beispiele, Beispiele. Bitte 🤡

    MfG SideWinder



  • properties halte ich für unnütz. machen nur die syntax komplizierter.



  • volkard schrieb:

    properties halte ich für unnütz. machen nur die syntax komplizierter.

    Ist es nicht komplizierter jede Klasse um hunderte Zeilen aufzublasen für:

    class C {
            int _i;
            int _j;
        public:
            inline int getI() { return _i; }
            inline void setI(int i) { return _i = i; }
    
            inline int getJ() { return _j; }
    };
    
    vs
    
    class C {
        property int i;
        property int j { get; }
    }
    

    ? Auch im Hinblick auf Kommentare (oben 3x nötig, unten 1x, etc.)?

    MfG SideWinder



  • this->that schrieb:

    + Weg mit den Scheiss Headern

    Dafür würde ich private 1000 EUR an das Komitee bezahlen, damit die Headers im ISO-C++ deprecated werden! Das Geld wäre gut angelegt, da es mich Nerven und vor allem Zeit für mein restliches Leben sparen würde. Als Firma würde ich mehr investieren. Unglaublich was für ein Haufen unsinnigen Code-Kot man in seinem (kostbaren) C++-Leben schreiben muss. 😡

    this->that schrieb:

    + Enum Konstanten nur qualifizierbar mit Namespacenamen (gibts vermutlich ab C++0x)

    Nur logisch. Das erste mal, als ich Enums nutzen wollte, habe ich das intuitiv gemacht, und der Compiler hatte mich angemotzt. 😡

    this->that schrieb:

    + Hat nix mit der Sprache zu tun, aber gehoert dennoch in ihr Umfeld: Endlich eine gescheite Standard Library mit Threads, XML, Networking etc.

    Die Std-Library gehört mit zum Sprachstandard. Darf man hier ruhig nennen. Threads kommen ja definitiv mit C++0x. Für XML gab es einen Aufruf vom Komitee für den TR2. Wurde aber nichts eingereicht. Networking, da könnte boost.asio ein Kandidat werden. Aber das wird wohl noch 10 Jahre dauern. 😉



  • Ich als C# Nutzer finde Properties aber auch besser

    class CSharp
    {
        public int Zahl { get; private set; } 
    }
    

    Etc...



  • SideWinder schrieb:

    class C {
            int _i;
            int _j;
        public:
            inline int getI() { return _i; }
            inline void setI(int i) { return _i = i; }
    
            inline int getJ() { return _j; }
    };
    
    vs
    
    class C {
        property int i;
        property int j { get; }
    }
    

    ? Auch im Hinblick auf Kommentare (oben 3x nötig, unten 1x, etc.)?

    Hem, ist für mich echt ein konstruiertes Beispiel. Was ist, wenn neben dem reinen return und assignment noch was anderes passieren soll?



  • Regex-Literale. Reguläre Ausdrücke sind sowieso schon schwer zu lesen, da will ich nicht noch jedes zweite Symbol escapen müssen.



  • Artchi schrieb:

    SideWinder schrieb:

    ...

    Hem, ist für mich echt ein konstruiertes Beispiel. Was ist, wenn neben dem reinen return und assignment noch was anderes passieren soll?

    class CSharp
    {
        private int zahl;
        public int PZahl
        {
            get
            {
                return zahl * 5;
            }
            set
            {
                zahl = value * 5;
            }
        }
    }
    

    Letztendlich werden Properties auch zu getter und setter, sehen meiner Ansicht nach aber besser aus.



  • SideWinder schrieb:

    ipsec schrieb:

    SideWinder schrieb:

    Darf man zusammenfassen, dass ihr eine Art syntaktisches C# mit Template-Metaprogrammierung und STL wünscht?

    Auf keinen Fall! Die C#-Syntax finde ich teilweise nicht gelungen, in fast allen Fällen finde ich die C++-Alternative besser. Auch würde ich z.B. Properties syntaktisch nicht wie in C# umsetzen wollen.

    Nun aber raus mit der Sprache, Beispiele, Beispiele, Beispiele. Bitte 🤡

    MfG SideWinder

    Ich will das hier nicht zu einem C#-Bash-Thread machen, nur mal ein Beispiel, was ich bei C++ besser finde: Zugriffsmodifizierer wirken sich auf alle nachfolgenden Elemente aus.

    Bei sowas wie Networking in der Standardbibliothek sehe ich vor allem das Problem der Aktualisierung. Bei boost.asio z.B. werden auch heute noch Bugs gefixt. boost ist auch schnell mal aktualisiert, aber wie oft aktualisiert ihr eure Standardbibliothek? Bei den Containern und Algrithmen kann man nunmal nicht so viel falsch machen. Hinzu kommt, dass man dann jedesmal Jahre warten müsste, bis z.B. ein neues Netzwerkprotokoll in den Standard aufgenommen wurde, während andere Bibliotheken da viel flexibler sind.

    Raw-Strings kommen übrigens mit C++0x.



  • -Standard für socket
    -Standard für ein filesystem
    -Eigene operatoren hinzufügen können



  • ipsec! Der Standard definiert ja nicht die Implementierung einer Bibliothek! Du kannst doch jeder Zeit ein Bugfix-Release einer C++-Std-Lib nutzen. Alle Compiler-Hersteller liefern Bugfixes aus, wenn in deren C++-Standard-Library ein Fehler auftritt. Außerdem müsste die Network-Lib keine Hi Level Protokolle definieren. Aber es wäre einfacher überhaupt Hi Level Protokolle zu implementieren, wenn die Std-Lib wenigstens Low-Level-Protokolle anbietet. Meines Wissens hat boost.asio eh keine Hi Level Protokolle.



  • FreakY<3Cpp schrieb:

    Artchi schrieb:

    SideWinder schrieb:

    ...

    Hem, ist für mich echt ein konstruiertes Beispiel. Was ist, wenn neben dem reinen return und assignment noch was anderes passieren soll?

    class CSharp
    {
        private int zahl;
        public int PZahl
        {
            get
            {
                return zahl * 5;
            }
            set
            {
                zahl = value * 5;
            }
        }
    }
    

    Letztendlich werden Properties auch zu getter und setter, sehen meiner Ansicht nach aber besser aus.

    Hast du dein Beispiel mal ausprobiert?



  • Als erstes würde ich die Syntax komplett ändern. Die Sprache sollte einfach parsbar sein und zwar für Menschen und Maschinen. C++ ist extrem schwer zu parsen und das hat dafür gesorgt, dass es leider bei den Tools gegenüber anderen Sprachen zurück hängt. Vielleicht ändert sich dies jetzt, wenn man mit Clang ein sauber getrenntes Frontend hat. Zumindest sollte man Trigraphs komplett entfernen. Die machen das Parsen derzeit für alle extra schwierig und dabei benutzt die doch keiner mehr (außer vielleicht irgend ein paar eingestaubte IBM Mainfraimler. Aber die werden wohl eh keinen aktuellen C++0x Compiler haben). Idealerweise wäre natürlich ein Parser direkt ein Bestandteil der Standardbib.

    Ein Modulsystem wäre wirklich praktisch. Das include-Zeugs macht das kompilieren unnötig langsam und ist eine unnötige Fehlerquelle.

    Viele Dinge explicit machen und lieber ein implicit einfügen. Automatische Generierung von Copyctor/operator würde ich auch rausnehmen. Man könnte lieber explizit sagen, dass das generiert werden soll.

    Das Typsystem sollte strikter sein und idealerweise ähnlicher zu ADA als zu C. Design-by-Contract wäre vielleicht auch interessant. Oh und Concepts würde ich gerne haben.

    Michael E. schrieb:

    Regex-Literale. Reguläre Ausdrücke sind sowieso schon schwer zu lesen, da will ich nicht noch jedes zweite Symbol escapen müssen.

    User-defined-Literals haben sie wohl wieder abgeschafft :(.



  • Also bei Properties sehe ich ehrlich gesagt den großen Vorteil gegenüber normalen Gettern und Settern nicht.

    ? Auch im Hinblick auf Kommentare (oben 3x nötig, unten 1x, etc.)?

    Wozu sind bei deinem Beispiel Kommentare nötig? Wenn es reine Getter und Setter sind braucht man sie nicht, wenn sie etwas mehr machen, braucht man die Kommentare in jedem Fall, egal ob C#-Getter/Setter oder normale C++ Methoden.

    Viele von den hier gewünschten Features kommen auch mit C++0x, z.B. Dateisystem, Raw-Strings, Threads, etc..
    Es geht also auf jeden Fall in die richtige Richtung.

    -Eigene operatoren hinzufügen können

    Das wäre wirklich sehr schick! Das würde die Entwicklung von EDSLs enorm erleichtern.


Anmelden zum Antworten