Was würdet ihr an C++ verbessern?
-
Nexus schrieb:
Dem Erdboden gleichmachen
- Exception Specifications
export
Die beiden Wünsche wurden dir mit C++0x erfüllt
-
Nexus schrieb:
volkard schrieb:
Zuweisungsoperatoren und Kopierkonstruktoren würden niemals automatisch erzeugt.
Das fändest du tatsächlich besser?
Ja. Ich mache es immer sofort aus. Und mache es erst wieder an, wenn ich es brauche.
Vielleicht abgeschwächtere Version: Sobald der Benutzer einen Destruktor definiert, werden sie nicht mehr automatisch erzeugt.Aber ich will eher weniger Regeln als mehr.
-
ipsec schrieb:
"automatisch deduzierte Templateparameter". Beispiel (Syntax variabel):
Hm, warum reicht dir nicht:
template<typename T> struct foo{}; foo<decltype(5)> some_foo;
?
-
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ürfoo<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 wiea.x += 2
auflöst, wennx
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.