Hacker News new | ask | show | jobs
by itvision 698 days ago
Instantly make your C code 200 times slower without any effort!
2 comments

It would actually be interesting to see how much faster dash is than everything else.
From our experience, ksh is generally faster, and dash sits between ksh and bash. One reason is that dash stores variables using a very small hash table with only 37 entries[0] meaning variable access quickly becomes linear as memory usage grows. But even with that, dash is still surprisingly fast -- when compiling `pnut.c` with `pnut.sh`, dash comes in second place:

  ksh93: 31s
  dash:  1m06s
  bash:  1m19s
  zsh:   >15m
[0]: https://git.kernel.org/pub/scm/utils/dash/dash.git/tree/src/...

EDIT: ksh93, not ksh

For me `dash` compiles in just a few seconds. If you link to a 1-line problem (here, #define VTABSIZE 39), then why not boost that to 79 or 113, say, re-compile the shell and re-run your benchmark? Might lead to a change in upstream that could benefit everyone.
Or rework the array so realloc() can expand its size?
Yes.. Another fine idea, just more work than a 2 character edit. :-)
People still use KornShell?
All of Android is still based on a pdksh-derivative known as mksh, which is an enormous install base.

http://www.mirbsd.org/mksh.htm

OpenBSD switched their default shell to their own pdksh-derivative known as oksh.

https://github.com/ibara/oksh

There was an effort to (re)start ksh93 development, but AT&T halted this effort. The bugfixes from the failed effort have moved back into Korn's last release.

https://github.com/ksh93/ksh/tree/dev

Why is Dash frequently touted as so much faster than Bash? What is different?
On rhel9, this is a list of my installed shells. You might notice that dash is smaller than ls (and the rest of the shells).

  $ ll /bin/bash /bin/dash /bin/ksh93 /bin/ls /bin/mksh
  -rwxr-xr-x. 1 root root 1389064 May  1 00:59 /bin/bash
  -rwxr-xr-x. 1 root root  128608 May  9  2023 /bin/dash
  -rwxr-xr-x. 1 root root 1414912 Apr  9 07:26 /bin/ksh93
  -rwxr-xr-x. 1 root root  140920 Apr  8 08:20 /bin/ls
  -rwxr-xr-x. 1 root root  325208 Jan  9  2022 /bin/mksh

  $ rpm -qi dash | tail -4
  Description :
  DASH is a POSIX-compliant implementation of /bin/sh that aims to be as small as
  possible. It does this without sacrificing speed where possible. In fact, it is
  significantly faster than bash (the GNU Bourne-Again SHell) for most tasks.
It is much simpler (and therefore less resource-hungry) than bash.
I think it takes probably some effort, not all C programs will compile on this thing.