carlobaldassi / ArgParse.jl

Package for parsing command-line arguments to Julia programs.
Other
236 stars 36 forks source link

ArgParse modifies global random state? #121

Closed veddox closed 6 months ago

veddox commented 1 year ago

I've just noticed that calling parse_args() changes the state of the GLOBAL_RNG:

julia> using ArgParse, Random

julia> Random.seed!(1)
TaskLocalRNG()

julia> rand()
0.07336635446929285 # <- expected value when seeding the GLOBAL_RNG with 1

julia> Random.seed!(1)
TaskLocalRNG()

julia> s = ArgParseSettings()
ArgParseSettings(
  ...
  )

julia> rand()
0.07336635446929285 # <- this is still correct

julia> Random.seed!(1)
TaskLocalRNG()

julia> parse_args(s)
Dict{String, Any}()

julia> rand()
0.6702639583444937     # <- not the expected value

Is there a reason for this? Since ArgParse doesn't even import Random, I don't understand why this happens, but it's giving me some problems with my own code.

veddox commented 1 year ago

I think this has to do with a Julia issue, where the state of the RNG is changed when a new task is spawned: https://github.com/JuliaLang/julia/pull/49110

ArgParse does work with tasks (see here), so this is probably the root cause of the issue. If so, it should be fixed with Julia 1.10.

carlobaldassi commented 6 months ago

Indeed this was fixed in Julia