[NREPL-18] Flush *out*/*err* after N characters Created: 18/Apr/12 Updated: 20/Jun/12 Resolved: 20/Jun/12
|Reporter:||Colin Jones||Assignee:||Chas Emerick|
|Patch:||Code and Test|
Not sure how this should be configured, but it would be nice if doing something like (println large-seq-here) would flush output automatically after some number of characters. This is so that output could stream constantly across the nrepl connection instead of waiting for the entire output to send as one message (assuming no manual flushes).
|Comment by Colin Jones [ 28/Apr/12 1:31 PM ]|
There is a precedent for this, in the sense that many output buffers have some fixed size, and they are flushed when that size has been reached (e.g. http://www.gnu.org/software/libc/manual/html_node/Flushing-Buffers.html, http://docs.oracle.com/javase/6/docs/api/java/io/BufferedWriter.html)
We had talked about potential worries / headaches, where users may get partial lines printed at a time. But after more thought about it, I'm thinking we may be OK: concurrent out/err writes can already interleave in interesting ways, and depending on the placement of (flush) calls (explicitly or implicitly) to make them more atomic is something I'd already have expected to be fragile. Maybe others will see things I don't, though.
The implementation I have uses 1024 as the default, but that's pretty arbitrary. A less dynamic way of setting the limit would be also be fine with me, though since we're already in I/O-land, I'd assume performance isn't going to be bound by the dynamic var lookup.
|Comment by Colin Jones [ 17/Jun/12 6:09 PM ]|
Any thoughts on this one? It would be great to be able to print big seqs incrementally.
|Comment by Chas Emerick [ 20/Jun/12 7:39 AM ]|
Sorry for the delay, this fell through the cracks.
Looks good to me, except: can we make the "buffer size" an argument to the session middleware fn? That's where people will want to be able to customize it, if ever.
Commit and close this at will.
|Comment by Colin Jones [ 20/Jun/12 11:14 PM ]|
Done, thanks a bunch!