Warum sind die Standardbibliotheken so unleserlich programmiert?



  • So unleserlich finde ich den Code gar nicht. Okay, der Stil ist vielleicht etwas gewöhnungsbedürftig (eingerückte {}-Blöcke, Klammern um return -Ausdrücke), aber immerhin kommentieren sie beim MSVC++ noch. Die Bezeichner aus dem Beispiel sind im Grossen und Ganzen auch eher verständlich.

    Obfuscator... klingt mir ehrlich gesagt etwas nach Verschwörungstheorie.



  • Warum sollten die Entwickler der Standardlibrary "Angst" um ihren Code haben?
    Macht doch keinen Sinn.



  • Nexus schrieb:

    So unleserlich finde ich den Code gar nicht. Okay, der Stil ist vielleicht etwas gewöhnungsbedürftig (eingerückte {}-Blöcke, Klammern um return -Ausdrücke), aber immerhin kommentieren sie beim MSVC++ noch. Die Bezeichner aus dem Beispiel sind im Grossen und Ganzen auch eher verständlich.

    Wenn bei uns in der Firma jmd. solche Bezeichner verwenden würde, dann wäre ein ernstes Gespräch fällig!
    Wenn ich in 10 Jahren als Programmierer eines gelernt habe, dann dass ein Bezeichner der "eh halbwegs verständlich ist, wenn man mal drüber nachdenkt" kaum besser ist, als ein total zufällig gewählter.

    Zeit will ich als Programmierer darauf verwenden das Programm als ganzes zu verstehen. Nicht darauf, die Bedeutung kryptischer Bezeichner zu erraten.



  • So unleserlich finde ich den Code gar nicht

    Würde ich auch sagen - ok, mag nicht als Musterbeispiel für verständlichen Code gelten, aber die Obfuscator-Theorie halte ich für übertrieben.
    Wenn man die ganzen Unterstriche entfernt und die Einrückung anpasst, sieht es schon viel besser aus:

    Pairib insert(const value_type& Val)
    {    // try to insert node with value _Val
        Nodeptr Trynode = Root();
        Nodeptr Wherenode = Myhead;
        bool Addleft = true;    // add to left of head if tree empty
        while (!Isnil(Trynode))
        {    // look for leaf to insert before (_Addleft) or after
            Wherenode = Trynode;
            Addleft = _DEBUG_LT_PRED(this->comp, 
                this->Kfn(Val), Key(Trynode));
            Trynode = Addleft ? Left(Trynode) : Right(Trynode);
        }
        if (this->Multi)
            return Pairib(Insert(Addleft, Wherenode, Val), true);
    


  • hustbaer schrieb:

    Wenn bei uns in der Firma jmd. solche Bezeichner verwenden würde, dann wäre ein ernstes Gespräch fällig!

    Das glaube ich dir gerne. Ich persönlich programmiere ja auch nicht so. Aber ich wollte eher darauf hinaus, dass man bei Bezeichnern wie _Nodeptr , _Root , _Insert noch halbwegs erahnen kann, was gemeint ist (okay, bei _Xran wirds dann schon schwieriger... :)). Ich weiss auch nicht, welchen Code-Richtlinien die MSVC++-Standardbibliotheksentwickler unterlagen, aber zu sagen der Code sei "obfuscated" scheint mir dann doch etwas übertrieben.



  • Nexus schrieb:

    Ich weiss auch nicht, welchen Code-Richtlinien die MSVC++-Standardbibliotheksentwickler unterlagen, aber zu sagen der Code sei "obfuscated" scheint mir dann doch etwas übertrieben.

    Hat nichts mit MSVC zu tun. Das ist doch die Library-Implementierung von Dinkumware.

    Übrigens, bei mir im beruflichen Umfeld gibt es viele, die vorangehende Unterstriche bei Java-Bezeichnern (Klassen-Attribute) benutzen! Allerdings mit einem Kleinbuchstaben:

    private String _name;
    


  • Icematix schrieb:

    Warum sollten die Entwickler der Standardlibrary "Angst" um ihren Code haben?
    Macht doch keinen Sinn.

    Macht insofern Sinn, dass das C++ Konsortium nur Laufzeitverhalten vorschreibt, es aber bessere und schlechtere Implementationen gibt. Im Grunde ist das das einzige Kriterium, das eine Implementation von der anderen unterscheidet, wenn alle gleich gut wären hätte man nach der ersten aufhören können, weitere zu entwickeln. Warum sollte Dinkumware Arbeit in Code investieren, den STLport/Apache STDCXX genausogut liefern, und das sogar kostenlos?
    Über den Begriff Obfuscator kann man natürlich streiten, ab wann ist ein Obfuscator ein Obfuscator? Reicht es aus, wenn er nur Kommentare entfernt oder muss er erst Variablen-/Funktionsnamen durch kryptische Zeichenketten ersetzen?
    Vielleicht wäre gestrippt der bessere Ausdruck gewesen.



  • Also an Obfuscating glaube ich auch nicht. Das lässt sich ja sehr einfach mit einem Refactoring Tool so hinbiegen, wie man möchte.
    Wenn ein bekannter Compilerhersteller Implementierungen von Dinkumware unrechtmässig benutzen würde, dann würden die das relativ schnell merken. Sind ja nicht so viele und daher bezweifle ich, dass das der Grund ist, vor allem, weil Umbennen der Bezeichner keine grosse Sache ist.
    Wenn, dann müssten die Algorithmen selbst so umgebaut werden, dass sie nicht gleich sind und dann muss man sie selbst implementieren und dann wären wir wieder am Anfang und selbst implementieren darf jeder..



  • Klar, Obfußkatet und dann mit Kommendahren. 🙄 Ohne _ und ?: wäre es einfach kein richtiger C++Steil.



  • Gambler schrieb:

    Klar, Obfußkatet und dann mit Kommendahren. 🙄 Ohne _ und ?: wäre es einfach kein richtiger C++Steil.

    Dein Text ist auch obfuscated.


  • Mod

    Icematix schrieb:

    Gambler schrieb:

    Klar, Obfußkatet und dann mit Kommendahren. 🙄 Ohne _ und ?: wäre es einfach kein richtiger C++Steil.

    Dein Text ist auch obfuscated.

    Vielleicht. Möglicherweise ist der Sinn aber auch einfach genauso verschwommen wie der Text.


  • Administrator

    camper schrieb:

    Icematix schrieb:

    Gambler schrieb:

    Klar, Obfußkatet und dann mit Kommendahren. 🙄 Ohne _ und ?: wäre es einfach kein richtiger C++Steil.

    Dein Text ist auch obfuscated.

    Vielleicht. Möglicherweise ist der Sinn aber auch einfach genauso verschwommen wie der Text.

    Somit wurde der Sinn "Obfußkatet" (boah, die Schreibeweis muss ich mir merken!) 🤡

    Ich denke eher, dass sie einen schrecklicken Codestil haben. Es ist absolut lesbar, wenn man sich mal an den Stil gewöhnt hat, aber es ist gar nicht mein favorisierter Stil 🙂

    Grüssli



  • Dravere schrieb:

    "Obfußkatet"

    Obfußskated? 😉

    Oder gar gleich "obfuskadiert" für unsere Deutsch-Fanatiker. Wenn man "Delegaten" sagen kann, kann man auch "obfuskadieren"/"obfuskadiert" sagen 😃 *duck und weg*
    EDIT die 3.: oder müsste das dann "obfuskiert" heissen?



  • Nexus schrieb:

    hustbaer schrieb:

    Wenn bei uns in der Firma jmd. solche Bezeichner verwenden würde, dann wäre ein ernstes Gespräch fällig!

    Das glaube ich dir gerne. Ich persönlich programmiere ja auch nicht so. Aber ich wollte eher darauf hinaus, dass man bei Bezeichnern wie _Nodeptr , _Root , _Insert noch halbwegs erahnen kann, was gemeint ist (okay, bei _Xran wirds dann schon schwieriger... :)). Ich weiss auch nicht, welchen Code-Richtlinien die MSVC++-Standardbibliotheksentwickler unterlagen, aber zu sagen der Code sei "obfuscated" scheint mir dann doch etwas übertrieben.

    Hab ich auch nicht. Aber stimmt schon. Der Code ist weder obfuscated noch gut leserlich. Liegt irgendwo dazwischen.
    Viel besser leserlich als weite Teile des Linux Source-Codes auf jeden Fall.


Anmelden zum Antworten