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



  • camper schrieb:

    Die Antwort impliziert, dass es auch noch eine (abweichende) de jure-Seite gibt. Damit ist das unbedingte Nein aber nicht angebracht.

    Das unbedingte Nein bezog sich auf die Irrelevanz der Verbreitung von C++11-Kenntnis. Dabei macht gerade diese Verbeitung der Kenntnis zusammen mit der Verbreitung der Verfügbarkeit aus, was der Durchschnittsentwickler unter "C++" ohne weitere Qualifikation (98/03/0x/11/.....) versteht.

    Grasshopper schrieb:

    Ich dachte immer es gibt mehr Hobbyprogrammierer als die die es beruflich machen

    Die beiden schließen sich nicht aus - ich behaupte mal, dass die große Mehrheit hier (auch) Hobbyprogrammierer ist. Weil ein professioneller Programmierer, der hier mehr Zeit verbringt als alle paar wochen mal eine Frage zu stellen, schon recht nerdig sein muss. Und so jemand ist eben meist auch Hobbyprogrammierer.

    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. 😉



  • 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 schrieb:

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

    Nur, weil etwas schon in einer neueren Version verfügbar ist, bedeutet das nicht, dass das alte damit plötzlich grauenhaft geworden ist und man es gar nicht mehr mag.



  • Sone schrieb:

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

    1. "sehr oft" != "immer auf jeden Fall"
    2. Alte Software ist manmal weniger von Features überladen als neue.
    3. Neue Software hat manchmal Features nicht mehr, die in alter vorhanden war.

    Beispiel: Office 2003 vs. Office 2007. Ziemlich heftige Überarbeitung der GUI. Einzelne Tastenkürzel funktonieren nicht mehr wie vorher. Wer mehrere Jahre mit 2003 gearbeitet hat kriegts Kotzen wenn er aus Versehen 2007 installiert hat.

    Beispiel: VS2010 vs. VS2005, jeweils Express Edition. 2005er hatte ein Feature "attach to process". 2010 hats nicht mehr, zumindest ists in den Menüs nicht mehr aufzufinden. Ätzend. Wers nicht kennt: damit hängt man den Debugger nachträglich an einen bereits laufenden Prozess. Für Nach-der-Schule-am-Spiele-PC-Hobby-Programmierer 1-Mann-Projekt-Hobby-Programmierer mag das keinen großen Zweck haben, die tippen einmal auf F5 und los gehts. Wenn man aber in einer größeren Software mit mehreren Komponenten in eigenen Prozessen nach 2 Tagen auf einmal komisches Verhalten hat, möchte man gerne schnell den Debugger rein hängen und gucken was die Situation in jedem der Prozesse ist. Ist auf jeden Fall einfacher als die einzelnen Prozesse in der vorgeschriebene Reihenfolge innerhalb von 2 Sekunden (Kommunikations-Timeouts...) zu starten, davon den vierten und sechsten jeweils im eigenen Debugger und dann 2 Tage warten. Oder drei. Oder ne Woche...



  • Da du es wieder schön herablassend erwähnst hast, werde ich die Wortschöpfung in meine Signatur packen, nur muss ich die Schule leider austauschen.

    Ich meine das "Nach-der-Schule-am-Spiele-PC-Hobby-Programmierer"...köstlich wie erhaben manche Menschen sind.



  • Grasshopper schrieb:

    Da du es wieder schön herablassend erwähnst hast,

    Oh, das war durchaus nicht herablassend gemeint, ich wollte damit wirklich niemandem auf den Schlips treten, sorry. Der Großteil der reinen Hobbyprogrammierer hier im Forum ist aber tatsächlich Schüler/Student. Davon abgesehen war ich selber viele Jahre ein Nach-der-Schule/Uni-am-Spiele-PC-Hobby-Programmierer und bin jetzt auch immernoch Hobby-Programmierer, wo ich die Unterschiede zum Job numal feststelle. Echt nicht bös gemeint.



  • Ok, schon gut. Ist nicht immer leicht, nur aus dem geschriebene Wort alles raus zu lesen. Ne, ich bin kein Kind/Student mehr, der stundenlang Computerspiele spielt. Ich bin mittlerweile über vierzig, Familienvater und von Beruf Elektroniker und wollte schon immer mal C++ lernen.



  • Grasshopper:
    Respekt! Als Schüler/Student hat man alle Zeit der Welt C++ zu lernen. Das mit 40, Job und Kind(ern) durchzuziehen zeugt von gutem Willen und Ansporn. 🙂



  • Danke für die Blumen. Erst einmal stehe ich bei C++ noch ganz am Anfang, zweitens bin ich derzeit für längere Zeit krank geschrieben. Zeit ist also kein Problem. Wenn ich wieder fit bin, wird das sicherlich nicht mehr so einfach wie jetzt, aber so wie es ausschaut dauert das noch ein paar Monate.



  • Grasshopper schrieb:

    Ich habs verstanden, danke. Man bin ich froh nicht mit altem Zeugs oder Code programmieren zu müssen, ich beneide euch nicht 😃

    Dm muss ich stark widersprechen. Ich habe kein Problem damit, keinen C++11 Compiler zu verwenden. Sicher, ein paar Features sind cool und würden manche Dinge schöner machen, aber Schönheit ist nicht das Bottleneck. Das Bottleneck ist, dass kein Feature einer Programmierspache, und insbesondere C++, frei von Möglichkeiten ist, dem Programmierer das Bein wegzuschißen. Der defensive Programmierstil, der in diesem Forum propagiert wird, unter anderem RAII und ähnliches ist ja nur ein Folge davon, dass den Leuten über die Jahre hinweg die Projekte unter den Füßen wegimplodiert sind.

    C++11 ist Pionierland. Nicht nur das: es ist ein unerschlossenes Minenfeld. Und ich lasse da lieber zuerst andere rein rennen.



  • otze schrieb:

    C++11 ist Pionierland. Nicht nur das: es ist ein unerschlossenes Minenfeld. Und ich lasse da lieber zuerst andere rein rennen.

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


  • Administrator

    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?

    Wollen wir wetten, dass hat man beim C++03 und C++98 Standard auch gesagt. Oder meinst du die Minen waren gleich bekannt, nachdem der C++03 Standard verabschiedet wurde? 😉

    C++11 muss noch erforscht werden. Er existiert aktuell in erster Linie auf dem Papier. Die Fehler der Sprache kommen erst heraus, wenn sie auch effektiv eingesetzt wird.

    Grüssli



  • 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?


Anmelden zum Antworten