Wie lange hat es gedauert bis ihr alle Aspekte von C++ verinnerlicht hattet?



  • Eisflamme schrieb:

    Ich denke, ich schließe mich Pi an.

    Wie bitte? Ich hab hier doch bisher nicht mal gepostet. 😃
    Aber offenbar gehe ich euch schon so sehr ab, dass ihr mich überall seht. 🙂



  • dot schrieb:

    Deine geschätzten Destruktoren (aka RAII) werden mit C++11 rvalue References erst so richtig toll... 😉

    Die sind schon seit 20 Jahren richtig toll. Rvalue References sind eine kleine Verbesserung. Ich fand C++ schon vor C++11 richtig toll.



  • tntnet schrieb:

    dot schrieb:

    Deine geschätzten Destruktoren (aka RAII) werden mit C++11 rvalue References erst so richtig toll... 😉

    Die sind schon seit 20 Jahren richtig toll. Rvalue References sind eine kleine Verbesserung. Ich fand C++ schon vor C++11 richtig toll.

    Ich fand C++ auch vor C++11 richtig toll, aber rvalue References sind viel mehr als nur eine kleine Verbesserung. Imo sind sie vielleicht das C++11 Feature, das den Umgang mit der Sprache am stärksten verändert hat/verändern wird. Wenn ich nur ein Feature von C++11 behalten dürfte, wären es vermutlich rvalue References...



  • Ich muss mich dot anschließen. Vor C++11 fand ich C++ quasi unbenutzbar. Jetzt ist es mit Abstand meine Lieblingssprache. Und RValue Referenzen haben den größten Beitrag dazu geleistet. Wenn C++ dieses Feature nicht hätte, wären wohl C oder C#/Java meine Favoriten, je nach Anwendungsbereich.



  • Auch auf die Gefahr hin jetzt gleich wieder einen dummen Spruch gedrückt zu kriegen, hat jemand kurz einen Link zu den Auswirkungen der RValue-Referenzen? Ich verstehe das Grundprinzip und dass dadurch die Performance deutlich steigen müsste. Geht es schon darum oder was ist euer Kernpunkt?



  • Eisflamme schrieb:

    Ich verstehe das Grundprinzip und dass dadurch die Performance deutlich steigen müsste. Geht es schon darum oder was ist euer Kernpunkt?

    Nun Performance ist durchaus ein Teil. Der Punkt ist halt, dass du nur mit rvalue Referenzen ordentlich handles (wohin auch immer, Pointer, Sockets, Dateien, Verbindungen sonstwo hin, Shader Objekte ...) kapseln kannst, ohne Entweder mit RAII zu brechen, die Objekte unkopierbar zu machen, oder auf reference counting umzusteigen. Es Verbindet die Einfachheit von C (Pointer kopieren ist ja kein Problem) mit der Sicherheit von C++, dass alles automatisch geschlossen wird, ohne oder mit kaum Performanceeinbußen. (Kaum, da das eine Handle ja auf "invalid" gesetzt werden muss. Keine Ahnung ob und wann das weg optimiert wird, aber in jedem Fall wird es kaum Einfluss auf die Performance haben, im Gegensatz zu reference counting oder sonstigen Scherzen.)



  • @Eisflamme: Ich finde diese Serie von Artikeln fuer den Einstieg ziemlich gut: http://thbecker.net/articles/rvalue_references/section_01.html



  • 314159265358979__ schrieb:

    Eisflamme schrieb:

    Ich denke, ich schließe mich Pi an.

    Wie bitte? Ich hab hier doch bisher nicht mal gepostet. 😃
    Aber offenbar gehe ich euch schon so sehr ab, dass ihr mich überall seht. 🙂

    Ok, jetzt kriege ich wirklich einen Anfall.
    Bist du gebannt? Ich hab dich durchs halbe Internet getrackt! 😡



  • Sone schrieb:

    314159265358979__ schrieb:

    Eisflamme schrieb:

    Ich denke, ich schließe mich Pi an.

    Wie bitte? Ich hab hier doch bisher nicht mal gepostet. 😃
    Aber offenbar gehe ich euch schon so sehr ab, dass ihr mich überall seht. 🙂

    Ok, jetzt kriege ich wirklich einen Anfall.
    Bist du gebannt? Ich hab dich durchs halbe Internet getrackt! 😡

    Ich glaube, dass Kellerautomat PI ist. 🕶



  • Eisflamme schrieb:

    Auch auf die Gefahr hin jetzt gleich wieder einen dummen Spruch gedrückt zu kriegen, hat jemand kurz einen Link zu den Auswirkungen der RValue-Referenzen? Ich verstehe das Grundprinzip und dass dadurch die Performance deutlich steigen müsste. Geht es schon darum oder was ist euer Kernpunkt?

    Abgesehen von dem von Kellerautomat verlinkten Artikel, ist auch dieser hier noch sehr empfehlenswert: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/

    Performancepotential ist imo nur ein Nebeneffekt von rvalue references. Der wichtigste Aspekt ist, dass du damit, wie cooky451 schon angedeutet hat, Dinge ausdrücken kannst (move Semantik), die du zuvor einfach nicht richtig ausdrücken konntest. std::auto_ptr ist das beste Beispiel für den gescheiterten Versuch, ownership transfer ohne C++11 zu implementieren...



  • Sone schrieb:

    Bist du gebannt? Ich hab dich durchs halbe Internet getrackt! 😡

    Na besonders weit scheinst du ja nicht gekommen zu sein. 😃



  • Ich glaube, dass schrieb:

    Sone schrieb:

    314159265358979__ schrieb:

    Eisflamme schrieb:

    Ich denke, ich schließe mich Pi an.

    Wie bitte? Ich hab hier doch bisher nicht mal gepostet. 😃
    Aber offenbar gehe ich euch schon so sehr ab, dass ihr mich überall seht. 🙂

    Ok, jetzt kriege ich wirklich einen Anfall.
    Bist du gebannt? Ich hab dich durchs halbe Internet getrackt! 😡

    Ich glaube, dass Kellerautomat PI ist. 🕶

    Näh, Kellerautomat ist nicht so unnötig.

    cooky451 schrieb:

    Sone schrieb:

    Bist du gebannt? Ich hab dich durchs halbe Internet getrackt! 😡

    Na besonders weit scheinst du ja nicht gekommen zu sein. 😃

    Nein, da haste Recht, ich hab nur folgende Sites gefunden:

    http://www.sploder.com/games/members/314159265358979/
    http://forum.die-staemme.de/showthread.php?168898-314159265358979
    http://www.spieleprogrammierer.de/user/5061-paprikachu/
    http://www.herocraftonline.com/main/threads/paprikachu.11143/

    Und eine auf tumblr, aber die ist gerade irgendwie off.



  • Wo es gerade um RValue References geht: Gibt es eigentlich irgendwo ein Quiz, mit dem man sich die einzelnen Aspekte abfragen kann? 😃



  • Okay, Ownership-Transfer gefällt mir, da versteh ich, wieso sich ein Fass öffnet.

    Ich denke nur gerade drüber nach, wieso das jetzt für Handles im Speziellen toll ist. Wenn die auf irgendetwas zeigen, kann man es kopieren, das ist schön. Aber wann käme ich denn auf die Idee ein Handle zu moven? Oder geht es nicht darum, sondern um das Objekt dahinter, was gemoved wird? Aber wieso ist das hilfreich?

    Jedoch: ich lese diese Artikel, sobald ich dazu komme, vermutlich wird mir das dann eh klar. Danke!



  • Eisflamme schrieb:

    Aber wann käme ich denn auf die Idee ein Handle zu moven?

    Was passiert, wenn du ein Handle kopierst? Du hast auf einmal zwei Objekte, mit dem selben Handle...wer von den beiden gibt das Objekt nun wann genau frei?



  • Der letzte schaltet immer das Licht aus! Oder es gibt Ärger! :=)



  • Decimad schrieb:

    Natürlich das letzte! :=)

    Nunja, ein Weg, um das zu erreichen, wäre reference counting. Reference counting ist allerdings mit signifikantem Overhead verbunden und der Fall, dass man tatsächlich shared ownership hat, ist, zumindest meiner Erfahrung nach, extrem selten. Normalerweise gibt es immer nur einen Besitzer und rvalue references erlauben es, genau dieses Konzept korrekt abzubilden...



  • Okay, also haben die Handles in dem Fall shared ownership, aber wie löst man das mit RValue-Referenzen? Wenn ich eine Kopie erstelle, habe ich doch dasselbe Problem. Oder erlaubt man keine Kopien, dafür aber Moves? Aber cooky meinte ja, man müsse Kopien nicht verbieten.



  • Implementier mal deine Version von unique_ptr, das ist im Prinzip genau das Konzept. 😉



  • Eisflamme schrieb:

    Okay, also haben die Handles in dem Fall shared ownership, aber wie löst man das mit RValue-Referenzen? Wenn ich eine Kopie erstelle, habe ich doch dasselbe Problem. Oder erlaubt man keine Kopien, dafür aber Moves? Aber cooky meinte ja, man müsse Kopien nicht verbieten.

    Man muss das Kopieren nicht verbieten. Ein Typ, der copyable und moveable ist, ist wohl in der Regel der klassische Fall, wo move Semantik als Performanceoptimierung eingesetzt wird (move aus temporärem Objekt). Interessant wird es eben, wenn ein Typ moveable aber nicht copyable ist. C++11 erlaubt es einem damit, explizit auszudrücken und auch statisch zu forcieren, dass eine Ressource zu jedem Zeitpunkt immer nur einen Besitzer haben kann (ich kann explizit aus einem Objekt in ein andere moven, aber nicht ein Objekt in ein anderes kopieren)...


Anmelden zum Antworten