Alternativen zu den std-IOStreams
-
Hallo Leute,
Ich glaube, wir sind uns alle einig, dass die aktuelle Standard IOStream-Library unter aller Sau ist. Gibt es dazu eigentlich irgendwelche brauchbaren Alternativen? Boost.IOStreams ist zwar nett, aber ich haette gerne etwas, das von Grund auf neu und ordentlich designt wurde, und zwar so, dass es mit der C-Library mithaelt, wenn nicht sogar schneller ist.
Gruesse,
Der Kellerautomat
-
> Ich glaube, wir sind uns alle einig, dass die aktuelle Standard IOStream-Library unter aller Sau ist.
Ich zumindest schon mal nicht.
Die IO-Streams sind sehr wohl sauber definiert. Ich kenne keine andere Sprache, die eine solche wohlüberlegte I/O-Library (im Standard) hat. Sie umfasst Locales, allerlei Formatierung, ist leicht erweiterbar, ...
Was stört dich?
-
Just another Troll. Warum antworten?
wir sind uns alle einig
Nein, ich bin anderer Meinung.
aktuelle Standard IOStream-Library unter aller Sau ist
Du hast nur keine Ahnung.
nicht sogar schneller ist
Und wie kommst du darauf, dass iostreams langsam sind?
-
Stimmt, ich muss erst ein fettes Buch lesen, um ueberhaupt halbwegs zu verstehen, wie ich meinen eigenen Stream baue. Wenn das gutes Design fuer euch ist, dann habt ihr keine Ahnung...
-
Allgemeines C++-Geflame bitte traditionell im C-Forum oder passend im RundUmDieProgramierung.
-
Kellerautomat schrieb:
Stimmt, ich muss erst ein fettes Buch lesen, um ueberhaupt halbwegs zu verstehen, wie ich meinen eigenen Stream baue. Wenn das gutes Design fuer euch ist, dann habt ihr keine Ahnung...
Und wie hast du sonst so C++ gelernt? 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)?
Wenn das gutes Design fuer euch ist, dann habt ihr keine Ahnung...
Und hast du Ahnung von den Problemen. Schau dir doch andere Fortgeschrittene Technologie an: AsyncIO, Multithreading, ... Raketen die zum Mond fliegen, Haskell. Unterm Dreck kommt halt nur Fels und der ist hart, steinhart. Kein Bock, dann bleib im Nichtschwimmerbecken!
-
Kellerautomat schrieb:
Ich glaube, wir sind uns alle einig, dass die aktuelle Standard IOStream-Library unter aller Sau ist.

Es gibt zwar ein paar Alternativen (die besser sind), aber die würde ich nicht empfehlen, weil wirklich toll sind sie auch nicht.
Eigentlich ist es erst mit C++11 möglich geworden eine ernsthafte Alternative zu entwickeln. 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.
Fakt ist aber, dass wirklich nette Designs möglich sind, die auch für Anfänger geeignet sind. Ist letztendlich hoffentlich nur eine Frage der Zeit bis irgendeine solche Lib da ist, denn eigentlich ist es ja ziemlich naheliegend.
for (auto p : splitEach(byLine(stdin), '=')) println(p.first, " = ", p.second);
-
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.