Somewhat related, for MC calculations have a look at
https://baggepinnen.github.io/MonteCarloMeasurements.jl/latest/
Awesome package which makes it easy to do MC. Your original example becomes:
julia> using MonteCarloMeasurements, Distributions
julia> n = 1000;
julia> p1 = [Particles(n, Uniform(0,1)), Particles(n, Uniform(0,1))]
2-element Array{Particles{Float64,1000},1}:
0.5 ± 0.29
0.5 ± 0.29
julia> p2 = [Particles(n, Uniform(0,1)), Particles(n, Uniform(0,1))];
julia> dist(p1, p2) = sqrt((p1[1]-p2[1])^2 + (p1[2]-p2[2])^2)
dist (generic function with 1 method)
julia> dist(p1,p2)
Particles{Float64,1000}
0.523052 ± 0.25
I think it’s fast too, here the timing on a new laptop:
julia> @btime dist(p1,p2)
9.568 μs (7 allocations: 47.64 KiB)
Particles{Float64,1000}
0.523052 ± 0.25