On Sunday, 16 March 2014 at 18:14:18 UTC, Jakob Ovrum wrote:
On Sunday, 16 March 2014 at 18:06:00 UTC, Vladimir Panteleev
wrote:
On Sunday, 16 March 2014 at 16:58:36 UTC, Andrei Alexandrescu
wrote:
A classic idiom for reading lines and keeping them is
f.byLine.map!(x => x.idup) to get strings instead of the
buffer etc.
The current behavior trips new users on occasion, and the
idiom solving it is very frequent. So what the heck - let's
put that in a function, expose and document it nicely, and
call it a day.
A good name would help a lot. Let's paint that bikeshed!
For the record, if you want to keep all lines in memory
anyway, it's more efficient to just read the whole file at
once then split it with splitLines(), because you avoid doing
one memory allocation per line. The downside is if you want to
keep only some of the lines on the heap in a long-running
program - with this approach, the slices pin the entire file
content.
Reading all at once is also a problem for really big files.
It is no different from:
f.byLine.map!(x => x.idup).array
...which is why I said "if you want to keep all lines in memory
anyway".