carlobaldassi/ArgParse.jl

ArgParse modifies global random state?

Closed this issue · 2 comments

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

I think this has to do with a Julia issue, where the state of the RNG is changed when a new task is spawned: JuliaLang/julia#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.

Indeed this was fixed in Julia