[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash exorcism experiment ('bug' 762923 & 763012)



On Fri, 2014-10-03 at 09:20 -0700, Russ Allbery wrote:
> Russell Stuart <russell-debian@stuart.id.au> writes:
> > I looks to me like you are re-writing history.
> 
> I'm not sure how you meant this, but to note, this sentence made me very
> sad, since it felt like you believe I'm being intentionally dishonest with
> you.  I'm really not, although I'm not sure how to convince you of that.

You convinced me I was wrong a few sentences later.

> I thought that's what you were getting at when talking about
> testing

Not really.  I'm about documentation reflecting reality.  Think of
putting an electrical component whose documentation says its 200 degrees
on a motherboard, only to find it fails at 190.  When you ask why, is
"well we design it for 200, but only test it to 180" a satisfying
answer?

You have convinced me that in this case it's going to have to be that
way, so my prejudices notwithstanding.  I've rationalised the pain away
by deciding it's no so bad as any competent programmer could see that is
it only tested to 190 regardless of what the standards say.

> Oh!  I didn't realize or internalize that you were proposing switching the
> default shell to posh from dash.  Yes, that would certainly improve our
> compliance with Policy considerably.

It's attractive because makes Policy more relevant - but only because of
that.  Now that I think about it, switching pbuilder to posh would be
almost as good.  Any additional pain would not be worth the effort.

If Debian was going to switch to another shell, I'd vote for the one in
busybox.  That's because on desktop machines it doesn't matter, but on
embedded architectures it does - and they use busybox.  So switching to
busybox would extend Debian's reach.

> If the speed is comparable

Here are two benchmarks.  I did others. These demonstrate the extremes:

        $ time dash -c 'i=0; while [ $i -lt 10000000 ]; do echo -n; i=$(($i + 1)); done'
        real	0m16.695s
        user	0m16.684s
        sys	0m0.000s
        $ time posh -c 'i=0; while [ $i -lt 10000000 ]; do echo -n; i=$(($i + 1)); done'
        real	0m41.899s
        user	0m41.872s
        sys	0m0.000s
        $ time busybox sh -c 'i=0; while [ $i -lt 10000000 ]; do echo -n; i=$(($i + 1)); done'
        real	0m27.938s
        user	0m25.160s
        sys	0m2.760s
        $ time bash -c 'i=0; while [ $i -lt 10000000 ]; do echo -n; i=$(($i + 1)); done'
        real	1m7.971s
        user	1m7.928s
        sys	0m0.000s
        
        $ time dash -c 'x="aaaaaaaaaaaaaaa"; t() { local x=$1; echo $x; }; while [ "${x%b}" = "${x}" ]; do y=; while :; do z="${x#b}"; [ "$z" != "$x" ] || break; y=a$y x=$z; done; x=$(t ${y}b${x#a}); done'
        real	0m1.577s
        user	0m0.204s
        sys	0m0.500s
        $ time posh -c 'x="aaaaaaaaaaaaaaa"; t() { local x=$1; echo $x; }; while [ "${x%b}" = "${x}" ]; do y=; while :; do z="${x#b}"; [ "$z" != "$x" ] || break; y=a$y x=$z; done; x=$(t ${y}b${x#a}); done'
        real	0m2.232s
        user	0m0.316s
        sys	0m0.536s
        $ time busybox sh -c 'x="aaaaaaaaaaaaaaa"; t() { local x=$1; echo $x; }; while [ "${x%b}" = "${x}" ]; do y=; while :; do z="${x#b}"; [ "$z" != "$x" ] || break; y=a$y x=$z; done; x=$(t ${y}b${x#a}); done'
        real	0m2.104s
        user	0m0.284s
        sys	0m0.516s
        $ time bash -c 'x="aaaaaaaaaaaaaaa"; t() { local x=$1; echo $x; }; while [ "${x%b}" = "${x}" ]; do y=; while :; do z="${x#b}"; [ "$z" != "$x" ] || break; y=a$y x=$z; done; x=$(t ${y}b${x#a}); done'
        real	0m4.849s
        user	0m0.892s
        sys	0m0.740s
        $

It looks like moving to dash sped Debian up a little.

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: