Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: preliminary patch for zsh/random module




On 10/24/2022 8:20 AM, Clinton Bunch wrote:
On 10/23/2022 11:47 PM, Bart Schaefer wrote:
On Sun, Oct 23, 2022 at 7:57 PM Clinton Bunch <cdb_zsh@xxxxxxxxxxx> wrote:
On 10/23/2022 9:01 PM, Bart Schaefer wrote:
* Typo in the introductory comment.
I'm pretty sure I've since found and changed all the instances of
Zoltan's name.
I was referring to the spelling of "randome".

Actual question:  What's the use case for returning or printing a
block of random bytes?  Why does this need to be a builtin?
Mostly because I see constructs like read -k6 -u3 3</dev/urandom
... because?

I did it to seed rand48.  Roman did it to generate a 32-bit random integer.  Both of which are obsoleted by other parts of this module.

I'm sure there are other reasons someone might want to read more or less than 4 bytes of random data.  One that comes to mind is generating a password in a platform-independent way without assuming perl or python.

Here's an example:

randpw () {
        local chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890@#%&()"
        local tmp
        local -i num
        num=${1:-10}
        getrandom -l $num -s tmp
        for i in {1..${#tmp}..2}
        do
                print -n ${chars["16#${tmp[$i,$i+1]}"%${#chars}+1]}
        done
        echo
}



it would be nice to initialize an array with random numbers without
having to use a loop to access SRANDOM n times.
But you're not filling an array with random numbers, you're filling a
string (scalar) with random bytes.
Actually, it does both.

Suggestion:  Treat SRANDOM like SECONDS, in that you can change the
type from integer to floating-point.  Then maybe the zrandom() math
function isn't needed?
That would seem confusing to me, and too easy to forget which state you
left it in.
You make it local so you're not leaving it.

() {
  print $SECONDS;
  () {
   local -F SECONDS
   print $SECONDS
  }
  print $SECONDS
}
56
0.0000050000
56
Still seems like something you do because you can rather than because it's intuitive to the user.  Also, your example assumes you'd only want to do this in a function (or wrap it in an anonymous function just for this purpose)

zrandom was meant to be a replacement for rand48
OK.





Messages sorted by: Reverse Date, Date, Thread, Author