Wie nennt ihr den alten Standard vor C++11?



  • TyRoXx schrieb:

    Die "Minen" liegen vor allem im alten Standard und C++11 beseitigt sie.
    Was soll denn an C++11 so gefährlich sein?

    Das gefährliche an Minen ist, dass man sie nicht sieht.

    Ansonsten erinnere ich mich an einen Blogpost auf Sutters Mill in der Artikelreihe über rvalue referenzen und move gezeugse wo er darauf aufmerksam gemacht hat, dass die dabei notwendigen Änderungen im Standard dafür sorgen, dass bestimmte jetzt legale code konstrukte nicht nur nicht mehr funktionieren, sondern auch anstandslos compiliert werden. Leider wurde mir aus den Artikeln nicht ganz klar, was jetzt genau gefährlich ist.

    //edit aber vielleicht sei als Beispiel darauf hingewiesen, dass auto und expression templates älterer Bibliotheken zusammen eine blöde Idee sind. Der Code war unter Umständen niemals darauf ausgelegt einen persistenten Ausdruck zu erzeugen. Genauso wie man jetzt natürlich auch selbst darauf aufpassen muss, dass überall ein auto lauern könnte.



  • otze schrieb:

    //edit aber vielleicht sei als Beispiel darauf hingewiesen, dass auto und expression templates älterer Bibliotheken zusammen eine blöde Idee sind. Der Code war unter Umständen niemals darauf ausgelegt einen persistenten Ausdruck zu erzeugen. Genauso wie man jetzt natürlich auch selbst darauf aufpassen muss, dass überall ein auto lauern könnte.

    Type deduction gab es schon lange vor auto . Was passiert denn, wenn man so ein Expression-Template-Objekt an ein Funktions-Template übergibt? Funktioniert auch nicht wie gewünscht. Sind Templates deswegen Minen?

    Ich kann verstehen, dass man einer neuen Sprache wie C++11 Zeit geben muss, um zu reifen. Aber so eine Angst vor Neuem kann auch nicht die Lösung sein. Je mehr Leute nach den Minen suchen, desto schneller sind alle entschärft.


  • Administrator

    TyRoXx schrieb:

    Ich kann verstehen, dass man einer neuen Sprache wie C++11 Zeit geben muss, um zu reifen. Aber so eine Angst vor Neuem kann auch nicht die Lösung sein. Je mehr Leute nach den Minen suchen, desto schneller sind alle entschärft.

    Helden sind tot. Oder anders ausgedrückt: Man muss auf einem Minenfeld nicht immer gleich der vorderste Mann sein 😉

    Ich sehe das nicht als Angst vor Neuem. Das ist eher eine kluge Entscheidung. Man muss nicht immer gleich auf der Stelle auf die neuste Mode aufspringen. Lieber dem Zeug etwas Zeit geben, dass es reift. Leute wie TyRoXx vorausschicken, damit diese ihre Beine verlieren, und danach deren Erfahrungen auswerten, damit man etwas später deutlich einfacher durch das Minenfeld kommt.

    Grüssli



  • TyRoXx schrieb:

    Was passiert denn, wenn man so ein Expression-Template-Objekt an ein Funktions-Template übergibt?

    Das Selbe. Aber es kommt einfach seltener vor, als pauschalt alles auto zu nennen und zu schreiben auto x = a+b - wobei a und b irgendwelche expression templates sind und a+b etwas ergibt, was problemlos problemlos in ein int konvertierbar ist:

    template <class A, class B>
    class SomeWeirdTemporaryAdditionExpressionTemplate
    {
      /* ... */
      operator int() { /* ... */ }
    };
    
    template <class A, class B>
    SomeWeirdTemporaryAdditionExpressionTemplate<A, B> operator+ (A a&, B b&);
    
    int main()
    {
      A a = /* ... */;
      B b = /* ... */;
      //int x = a + b; //fine!! 
      auto x = a+b; //ouch!! decltype(x) is SomeWeirdTemporaryAdditionExpressionTemplate<A, B>, not int!
    }
    

    Der neue Standard ist nicht perfekt. Es gibt Lösungen für alte Probleme, aber dafür im Austausch neue Probleme, die größtenteils noch zu finden sind. (Für das auto Problem gibts wohl schon einen Proposal für einen operator auto...)



  • Die Diskussion um "C++11-Minen" gabs schon einmal, ich habe dazumals versucht, ein paar Pitfalls zusammenzufassen.

    Natürlich kann man warten, bis andere das Wichtigste herausgefunden haben und dann aus deren Büchern lernen. Aber man kann C++11 auch als Gelegenheit sehen, als Pionier auf unerforschtes Gebiet zu stossen und selbst Erfahrungen zu sammeln. Davon können nicht nur andere C++-Programmierer, sondern auch Compiler und Bibliotheksimplementierungen profitieren. Ausserdem ermöglicht C++11 schöneren Code.

    Für das Typinferenz-Problem ein weiteres Sprachmittel einzuführen, halte ich für unnötig, zumal es nur aus "blinder" (unbewusster) Nutzung von auto resultiert. Leute sollten lieber lernen, adäquat mit Typinferenz umzugehen. In einer Expression-Template-Library könnte man Typen wieder explizit hinschreiben oder auf eine evaluate() -Funktion zurückgreifen.



  • Legacy Code



  • Nexus schrieb:

    Die Diskussion um "C++11-Minen" gabs schon einmal, ich habe dazumals versucht, ein paar Pitfalls zusammenzufassen.

    Uniform initialization kommt mir überflüssig und fehleranfällig vor. Habe sie aber noch nie benutzt, weil Microsoft lieber Augenkrebs als neue Features verbreitet. Clang stürzt sowieso immer ab und GCC kann irgendwie immer genau das nicht, was man gerade braucht (zuletzt override in 4.6).

    pumuckl schrieb:

    Der neue Standard ist nicht perfekt. Es gibt Lösungen für alte Probleme, aber dafür im Austausch neue Probleme, die größtenteils noch zu finden sind. (Für das auto Problem gibts wohl schon einen Proposal für einen operator auto...)

    Und wie sagt man dann, dass man wirklich eine Kopie des Expression Templates haben möchte?

    template <class T, class E>
    struct ExpressionTemplate
    {
    	T operator auto () const
    	{
    		return ...;
    	}
    };
    
    int main()
    {
    	         auto a = (x + y * z); //T = int
    	explicit auto b = (x + y * z);
    
    	static_assert( std::is_same<decltype(a), int>::value);
    	static_assert(!std::is_same<decltype(b), int>::value);
    }
    


  • Sone schrieb:

    pumuckl schrieb:

    Sone schrieb:

    Grasshopper schrieb:

    Aber vielleicht gibt es ja auch welche die den alten Code/Compiler/IDEs mögen

    ÄHHHEEEEMMMM
    Nein.

    Ich denke er meinte damit nicht die reinen Hobbyprogrammierer. 😉

    Wie kann man alte Software mögen? Die ist sehr oft verbuggter und schlechter als die Vorherige.

    Sone.
    Einfach mal die Klappe halten wenn man nix zu sagen hat, nen?



  • Ich kann die Angst vor dem Neuen ja verstehen. Aber wenn Profis aus einem C++ Forum sich nicht trauen eine Erweiterung einzusetzen, dann wirkt dass schon ein wenig komisch.^^

    Da wundert man sich schon, warum die Sprache noch für alles eingesetzt wird. Bei den vielen Fallstricken die ich so lernen muss, wäre es klüger nur den wirklich hochperformanten Teil in C++ zu machen und alles anderen andere Sprachen zu überlassen, oder was sagt euch da eure Logik?



  • Mir kommt die Minenfeldanalogie unpassend vor. So schlimm isses ja nun auch wieder nicht. 😉 Man testet ja kein neues Medikament an sich selbst aus, sondern befindet sich als Informatiker immer noch in einer Strukturwissenschaft, in der sich theoretisch alles logisch ableiten lassen sollte, wenn in dem Fall die Compiler keine Fehler haben und man selbst die Sprache verstanden hat. Wenn man gewisse Dinge noch nicht durchblickt hat, muss man sie ja nicht benutzen. In unserer Firma setzen wir C++11 ein seit die MS-Compiler (ja, leider, wir arbeiten dran) es unterstützen. Klar baut man auch mal Mist, aber ob man mit C++03 nicht anderen gebaut hätte, weiß ich nicht. Den Produktivitätsvorteil durch die neuen Sprachfeatures möchte ich nicht missen, auch wenn ich persönlich bisher nur einen Bruchteil davon wirklich benutze. Einer meiner Kollegen macht da schon kompliziertere Sachen, die ich mir dann freudig lernend angucke. 🙂



  • Grasshopper schrieb:

    Da wundert man sich schon, warum die Sprache noch für alles eingesetzt wird. Bei den vielen Fallstricken die ich so lernen muss, wäre es klüger nur den wirklich hochperformanten Teil in C++ zu machen und alles anderen andere Sprachen zu überlassen, oder was sagt euch da eure Logik?

    Die sagt, dass es da noch mehr Fallstricke gibt.



  • Dobi schrieb:

    Man testet ja kein neues Medikament an sich selbst aus, sondern befindet sich als Informatiker immer noch in einer Strukturwissenschaft, in der sich theoretisch alles logisch ableiten lassen sollte, wenn in dem Fall die Compiler keine Fehler haben und man selbst die Sprache verstanden hat.

    Wer sagt einem denn, dass man das wirklich hat? Es geht ja nicht um die einzelnen features, sondern um ihre Kombination, insbesondere in Hinblick auf Code, der älter ist als der neue Standard und demzufolge keine Rücksicht auf die nuen features nehmen konnte.

    Die Vergangenheit von C++, insbesondere Bücher wie exceptional c++, zeigen doch, dass die Kombination bestimmter Aspekte zu schwer zu durchblickendem Verhalten führt. (zum Beispiel, das exceptionsicherheit + speicherverwaltung nut mit RAII funktioneirt)



  • Ich vermute, wir werden da zu keinem eindeutigen Ergebnis kommen können, weil unsere beiden Standpunkte nur gefühlt sind und wir keine Statistiken haben, die zeigen, mit welcher Taktik man zu besseren Ergebnissen kommt. Das hängt ja eh nicht nur vom jeweiligen Projekt und den Entwicklern ab, sondern auch davon, wie man "besser" definiert. Für dich ist meins eventuell unüberlegte Draufgängerei, und für mich ist deins Rumgepusse, mit dem ich den Spaß an meiner Arbeit verlieren würde, wenn ich dazu gezwungen würde. 😉
    Wenn es für dich nach Minenfeld aussieht, ist es ja nur gut für dich, wenn wir anderen da wie irre reinrennen und alles freiräumen. 😃
    Aber pass auf, dass du nicht zu spät losgehst und wir uneinholbar davon sind. 😛
    Haha, so, nun ist die Analogie auf jeden ausgereizt genug, denke ich. ^_-


  • Administrator

    Grasshopper schrieb:

    Ich kann die Angst vor dem Neuen ja verstehen. Aber wenn Profis aus einem C++ Forum sich nicht trauen eine Erweiterung einzusetzen, dann wirkt dass schon ein wenig komisch.^^

    Das Problem ist, dass es nicht eine Angst vor Neuem ist, daher verstehst du das völlig falsch, habe ich zumindest das Gefühl. Es ist eine Abwägung von Gefahren und möglichen Problemen, welche durch den Wechsel auf die neue Sprache auftauchen könnten. Bzw. es geht vor allem darum, dass es eben unbekanntes Terrain ist. Das ist eine ganz neutrale Abwägung und Risikoeinschätzung.

    Private Projekte schreibe ich mit allen C++11 Mitteln, welche mir zur Verfügung stehen. Aber das ist aus Spass und Freude an der Sache. Bei einem Unternehmen habe ich grosses Verständnis dafür, dass die nicht sofort auf C++11 wechseln und lieber noch etwas warten. Ich nehme an, dass dies bei den "Profis" hier nicht anders sein wird. Bei unwichtigem Zeug, z.B. private Projekte, wird C++11 eingesetzt. Und wo es um die Wurst geht, da wird etwas vorsichtiger gehandelt und mit dem Einsatz von C++11 vorerst noch etwas gewartet.

    @Dobi,
    Das Minenfeld ist wirklich vielleicht etwas falsch gewählt, weil man es mit einer impliziten Gefahr verbindet und bei jedem Schritt in die Luft und daher tödlich enden könnte. Daher wäre ein dunkler Wald oder ein neues Land vielleicht die bessere Analogie. Am besten ist meistens sogar gar keine Analogie, da sie nie richtig passen und immer etwas anders interpretiert werden können.

    Im übrigens noch eine Frage:
    Was hat eine Firma davon, wenn sie möglichst früh auf C++11 setzen? Ich habe so meine Zweifel, dass eine Firma einen grossen Vorsprung herausholen kann, wenn sie möglichst früh von C++03 auf C++11 umsteigt.

    Grüssli



  • Dravere schrieb:

    Was hat eine Firma davon, wenn sie möglichst früh auf C++11 setzen? Ich habe so meine Zweifel, dass eine Firma einen grossen Vorsprung herausholen kann, wenn sie möglichst früh von C++03 auf C++11 umsteigt.

    Je mehr Spaß Entwickler haben, desto produktiver sind sie ... manchmal. 😉



  • Nur weil jemand beruflich 20 Jahre in Excel Daten rein kloppt ist er noch lange kein Profi in Excel. Soll heißen, etwas beruflich zu machen bedeutet noch lange nicht dass man ein Profi darin ist und schon gar kein Experte. Gibt es ein schönes Buch drüber, Titel habe ich leider vergessen^^

    EDIT: Für mich sind halt meine kleinen Projekte viel wichtiger, als irgendwelche Software die irgendwelche Firmen produzieren, ist doch klar.



  • Dravere schrieb:

    Und wo es um die Wurst geht, da wird etwas vorsichtiger gehandelt und mit dem Einsatz von C++11 vorerst noch etwas gewartet.

    Kann ich jetzt nur bedingt bestätigen. Wir setzen in der Firma die Schnittmenge aller C++11-Features ein, die unsere Compiler so bieten, d.h. unsere Bremse ist die Notwendigkeit portabel zu bleiben und IBM's XLC++ 11.1 für AIX. Bedeutet, im aktuellen Release kommt außer auto nicht wirklich viel zum Einsatz. (Aber die Windows Version profitiert z.B. von VS10's Standardbibliothek-Implementierung mit rrefs). Gut dass jetzt XLC++ 12 raus ist mit mehr C++11 Support, dann können die Kollegen im nächsten Release mit dem neuen Compiler mehr C++11 Features nutzen 🙂


  • Administrator

    Grasshopper schrieb:

    Nur weil jemand beruflich 20 Jahre in Excel Daten rein kloppt ist er noch lange kein Profi in Excel. Soll heißen, etwas beruflich zu machen bedeutet noch lange nicht dass man ein Profi darin ist und schon gar kein Experte. Gibt es ein schönes Buch drüber, Titel habe ich leider vergessen^^

    Und worauf willst du damit hinaus? 😕

    Grasshopper schrieb:

    EDIT: Für mich sind halt meine kleinen Projekte viel wichtiger, als irgendwelche Software die irgendwelche Firmen produzieren, ist doch klar.

    Es geht nicht um Software, welche andere produzieren. Sondern darum ob du mit deiner Software Geld verdienst. Solange du Software nur aus Spass an der Sache erstellst, kannst du auch sorglos rumprobieren und deine Zeit darin investieren, wie es dir gerade passt. Wenn es darum geht, dass du deine Software verkaufen willst, Termine in der Entwicklung zwingend einhalten musst und die Mitarbeiter pro Stunde Unsummen kosten, dann wirst du deine Prioritäten verlagern.

    @pumuckl,
    Das ist ja auch keine allgemeingültige Aussage. Jedes Unternehmen wird das selber beurteilen, abschätzen und dann die nötigen Entscheidungen treffen. Ich sage nur, dass ich Verständnis für eine Entscheidung habe, welche sich vorerst noch gegen den Einsatz von C++11 richtet, weil es dafür durchaus Gründe gibt. Wie hoch die Eintrittswahrscheinlichkeit und der mögliche Schaden bei diesen Gründen ist, wird sicher von Unternehmen zu Unternehmen anders eingestuft, weil es anders empfunden wird und auch tatsächlich anders ist.

    Grüssli


Anmelden zum Antworten