[Toybox] Thoughts on seperating shell dependencies and MAYFORK commands?
Rob Landley
rob at landley.net
Wed Feb 21 08:18:12 PST 2024
On 2/21/24 08:29, Mouse wrote:
> I'm not a routine toybox user. But, to the extent that toybox tries to
> be general-purpose, perhaps some comments from general-purpose shell
> use are relevant here.
"Not a question, more of a comment."
>> There used to be a blog that handed out the "unnecessary use of cat"
>> award, because redirects are cheaper.
>
> When they work. I never investigated enough to be in a position to say
> anything definite, but I've seen occasional (emphasis on "occasional")
> cases where cat THING | ... works, but < THING ... doesn't. Maybe all
> such cases represent bugs? Not sure.
You didn't give enough information for me to guess why you couldn't get it to work.
>> But "sed 'pattern' long list of input files" is gonna be faster than
>> "for i in long list of input files; do sed $i; done" even if the
>> shell overhead was literally free, because of the repeated setup code
>> in both OS and the command.
>
> ...again, when both work.
Yes, I know.
> I've done the latter (or more often
> something with xargs) in some cases where the list is so long the
> former would overflow the max arglist size. I've also (though less
> often) had cases where I don't want to wait for the whole list to be
> computed before getting working on the first few items.
It is often possible to rewrite a "fast on single processor when all data is
immediately available" thing for more parallelism or progressive processing of
gradually delivered input, yes. Which gnu/less keeps breaking again every few years:
$ while sleep .5; do echo -n .; done | less
I was specifically thinking of the recent 8a2d19bf12c2 commit to scripts/make.sh
header generation where a single call to sed was faster than even parallel calls
to sed launched from a loop, although what I had to give up along the way was
"knowledge of the filename a given block of data lived in" (maybe awk would have
known but I haven't written one of those yet) and instead switch to using the
#define FOR_blah macros to provide structure names generated from GLOBALS() macros.
Rob
More information about the Toybox
mailing list