Wozu std::quoted?



  • Es gibt ja voraussichtlich std::quoted im C++14-Standard, bei dem man Strings vom ersten " bis zum zweiten " gelesen werden (und \" übersprungen wird). Natürlich kann man die Zeichen " und \ beliebig ändern.

    Das ist wieder ein völlig neues Pattern in den iostreams, bisher gab es dafür Manipulatoren. (Man hat scheinbar eingesehen, dass die nichts taugen.)

    Nun ist die Frage, wozu man das braucht? Im Proposal ist die Rede von "XML and CSV formats", aber in beiden Fällen ist quoted völlig nutzlos. In XML wird das Attribut entweder von ' oder " umschlossen, ich muss also erst das Umschliessungszeichen auslesen bevor ich weiss, was die Begrenzung ist. Und dann will ich will den Input noch normalisieren, d.h. Whitespace-Sequenzen durch einzelne Leerzeichen ersetzen und Escape-Sequenzen auflösen. Also nicht gut für XML. Und in CSV darf der String kein Newline enthalten, das kann ich mit quoted aber nicht ausschliessen.

    Also hat quoted keinen Einsatzzweck und folgt nicht dem allgemeinen IOSchrott-Style. Wozu braucht man das dann 😕


  • Mod

    Macht es nicht allgemein das Serialisieren von Strings einfacher?



  • quota schrieb:

    iostream ist Schrott, wie Du ja bereits vermutet oder angedeutet hast. Historisch gewachsen. Nett, um Anfänger mit "außergewöhnlichen Konzepten" üben zu lassen. Anno dazumal war iostream genial und granatengeil. Naja, vielleicht meistens zehnmal so lahm wie printf() und nie schneller als dreimal so lahm. Außerdem waren deshalb minimale Programme in C nur 4k groß und die entsprechenden C++-Programme 500k groß.

    Eine gescheite lib wäre praktisch schon immer in C++ möglich gewesen ( cout<<hex(5)<<… ), mit jedem Update wurde sie dringender ( int i=readInt(cin) ), es wurde kathastrophal ( int i=read<int>(cin) ), ach, das macht mir nichts mehr aus. Wenn ich was verkaufen will, dann setzt es nicht mehr auf iostream auf, sondern auf meine kleine minimale Ersatzbibliothek, die halt nur genau das tun kann, was sie soll. Schnickschnack können Anwenderklassen tun.



  • Arcoth schrieb:

    Macht es nicht allgemein das Serialisieren von Strings einfacher?

    Das ist die Idee dahinter. Aber dafür wäre binarystring (Format Länge + Inhalt) schneller und quote_escaped (das auch '\n', '\x00' erlaubt) oder quote_htmlescaped praktischer.

    quote so wie es ist würde ich nicht verwenden. Für ein textbasiertes Format hat man Probleme sobald irgendwelche nicht-Druckbaren Zeichen vorkommen.


Anmelden zum Antworten