Core::File and Core::IODevice were written before the C FILE* family of methods properly supported buffering.
Many programs in the system use Core::File to alternate between reading a file from disk or using stdin. However, Core::File::read_line (which is just the IODevice implementation) never blocks waiting for input. It seems that it's geared towards reading files from disk where you'll definitely reach EOF before there's no more lines to read.
So as a result, if programs use Core::File::standard_input, or use a Core::LineIterator on stdin, they will get a stream of empty strings from it. I know @bugaevc put a lot of effort into re-vamping the FILE* implementation in LibC, but Core::IODevice is based on file descriptors and does its own buffering. It sounds good on the surface to try to port Core::File to use FILE* internally, but at the moment Core::Socket and Core::File share a base class. And you can't use (I think?) a FILE* as a socket.
A few options for refactoring:
getline
.Pay now to fund the work behind this issue.
Get updates on progress being made.
Maintainer is rewarded once the issue is completed.
You're funding impactful open source efforts
You want to contribute to this effort
You want to get funding like this too