Alternativen zu den std-IOStreams



  • knivil schrieb:

    Und wie hast du sonst so C++ gelernt?

    Mal abgesehen von meinem ersten Buch: Talks von Sutter, Meyers & Co., Blogposts derselben, und ein paar EBooks.

    knivil schrieb:

    Btw. Buch: Da gibt es kaum Alternativen zu Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference. Damit ist die Auswahl an Buechern ueberschaubar. Gibt es etwas aktuelleres (gut sollte es auch sein)?

    Du kannst mir einfach nicht erzaehlen, dass eine API, fuer die ich ein 640-Seitiges Buch lesen muss, gut sein kann. Auf der Seitenanzahl bringe ich ein C++-Tutorial fuer Umsteiger unter.

    @templer: Das riecht ein bisschen nach D, wenn ich mich nicht taeusche 🙂
    Sieht gut aus 👍



  • templer schrieb:

    irgendeine solche Lib da ist, denn eigentlich ist es ja ziemlich naheliegend.

    for (auto p : splitEach(byLine(stdin), '='))
      println(p.first, " = ", p.second);
    

    sagen wir mal, ich habe einen hash in einem vector<unsigned char> und will ihn als hex-string ausgeben.
    wie stellste dir deine syntax vor?



  • for (auto p : splitEach(byLine(stdin), '='))
      println(p.first, " = ", p.second);
    

    Und das soll genau was machen?

    fuer die ich ein 640-Seitiges Buch lesen muss

    Fuer dich sind wahrscheinlich nur die ersten 100 relevant.



  • Liest von stdin zeilenweise Wertepaare getrennt durch = ein und gibt sie wieder aus. 😉



  • volkard schrieb:

    templer schrieb:

    irgendeine solche Lib da ist, denn eigentlich ist es ja ziemlich naheliegend.

    for (auto p : splitEach(byLine(stdin), '='))
      println(p.first, " = ", p.second);
    

    sagen wir mal, ich habe einen hash in einem vector<unsigned char> und will ihn als hex-string ausgeben.
    wie stellste dir deine syntax vor?

    Spielst du auf den Thread an, den ich nur kurz überflogen habe?

    Etwa so:

    copy(seperatedBy(transform(ints, fill(to_hex, '0', 2)), ' '), stdout);
    


  • Kellerautomat schrieb:

    Liest von stdin zeilenweise Wertepaare getrennt durch = ein und gibt sie wieder aus. 😉

    Und bei 3 Gleichheitszeichen?



  • knivil schrieb:

    for (auto p : splitEach(byLine(stdin), '='))
      println(p.first, " = ", p.second);
    

    Und das soll genau was machen?

    byLine liest eine range und gibt eine range of ranges aus. liest hier einen stream und zeilenb aus. optimalerweise ohne was zu kopieren.
    splitEach ist ein Filter, der tut jedes reinkommende Ding splitten.
    Also hübsch lesbar ist das für mich, keine Frage.



  • volkard schrieb:

    optimalerweise ohne was zu kopieren.

    Genau, das ist alles lazy. Wenn man einen strikten string will, muss man das explizit sagen.



  • knivil schrieb:

    Fuer dich sind wahrscheinlich nur die ersten 100 relevant.

    Mhh, und dann kommt's drauf an, ob man für 100 Seiten eher 3 Tage braucht oder eher 3 Jahre.



  • knivil schrieb:

    Kellerautomat schrieb:

    Liest von stdin zeilenweise Wertepaare getrennt durch = ein und gibt sie wieder aus. 😉

    Und bei 3 Gleichheitszeichen?

    Schlag mir lieber eine Alternative zu den IOStreams vor, als mich ueber fremden Beispielcode auszufragen.



  • Welche Plattform?



  • templer schrieb:

    Etwa so:
    [cpp]copy(seperatedBy(transform(ints, fill(to_hex, '0', 2)), ' '), stdout);[/cpp]

    Hier hauts seperatedBy und ' ' leider auseinander. Auch verliert es ein wenig n Lesbarkeit.

    (Haut sie auch auseinander, auch schwer lesbar, aber transform ist so komisch.)

    copy(seperatedBy(fill(to_hex(ints),0,2)),' '), stdout);
    


  • Und was hat das mit Streams zu tun? Nach deiner Beschreibung sieht das mehr wie eine Bibliothek aus, um Iteratoren zu kombinieren.



  • dot schrieb:

    Welche Plattform?

    Plattformunabhaengig natuerlich 😉
    Aber wenns nicht anderes geht, dann zumindest Windows und OS X.



  • templer schrieb:

    Ich bin gerade dabei, eine auf Range-Basis zu entwickeln, mit mehreren Layern und mit variadischen Templates (deshalb C++11). Dabei wird auch gleich std::string/std::wstring/std::xyzstring ersetzt. Muss halt durchgeplant sein, verschiedene Encodings, einfache Erweiterbarkeit, deshalb zieht sich das ganze mit meiner Implementierung.

    Baust du auf der C-Standardbibliothek auf, oder welchen Teil schreibst du neu?



  • Wenn du zu dumm für C++ bist, dann beende dieses Leiden und hör auf, mit C++ und uns mit dem Mist auf die Nerven zu gehen. Niemand zwingt dich, in C++ zu programmieren, es gibt genug Alternativen, wenn du mit C++ nicht zufrieden bist. Dass I/O-Stream so aussieht, es es aussieht, hat seine Gründe, die du einfach (noch) nicht verstanden hast.



  • knivil schrieb:

    Und was hat das mit Streams zu tun? Nach deiner Beschreibung sieht das mehr wie eine Bibliothek aus, um Iteratoren zu kombinieren.

    Damur will er wohl html-Request parsen können ohne einmal eigenen Speicher zu allokieren, sondern er bekommt nur "strings", die auf fremdspeicher zeigen, hioer den lesepuffer von cin. das parsen war eigentlich stream-aufgabe.
    entsprechend will er umgekehrt wieder zusammenstreamen können, ohne was zu kopieren.

    und andersrum dann wieder auch
    sql=SL("select * from tbl where user='")+user+SL("' and time='")+today+SL("'");
    ohne daten anzufassen. erst sql.str() würde die sachen zusammenkopieren und nur einmal malloc/new aufrufen.



  • Jodocus schrieb:

    Wenn du zu dumm für C++ bist, dann beende dieses Leiden und hör auf, mit C++ und uns mit dem Mist auf die Nerven zu gehen. Niemand zwingt dich, in C++ zu programmieren, es gibt genug Alternativen, wenn du mit C++ nicht zufrieden bist. Dass I/O-Stream so aussieht, es es aussieht, hat seine Gründe, die du einfach (noch) nicht verstanden hast.

    Schoen dass du von deiner Ueberlegenheit so ueberzeugt bist. Hast du auch was konstruktives beizutragen? Wenn nicht, tu mir den Gefallen und verzieh dich aus meinem Thread.



  • Kellerautomat schrieb:

    dot schrieb:

    Welche Plattform?

    Plattformunabhaengig natuerlich 😉
    Aber wenns nicht anderes geht, dann zumindest Windows und OS X.

    Nun, plattformunabhängig wären z.B. die Standard C++ Streams. Ansonsten halt eben WinAPI und auf OSX Cocoa oder POSIX...



  • Jodocus schrieb:

    Wenn du zu dumm für C++ bist, dann beende dieses Leiden und hör auf, mit C++ und uns mit dem Mist auf die Nerven zu gehen.

    Sei nicht gleich so intolerant. Es hat durchaus seine Berechtigung, über gewisse APIs der C++-Standardbibliothek zu diskutieren. Auch wenn "unter aller Sau" wohl nicht der richtige Ausdruck ist und nur Leute wie dich provoziert.

    Jodocus schrieb:

    Dass I/O-Stream so aussieht, es es aussieht, hat seine Gründe, die du einfach (noch) nicht verstanden hast.

    Bei gewissen Teilen ist das Design aber einfach nur uralt.


Anmelden zum Antworten