Open
Description
I see why the pure
keyword was added, but having pure=false
contradicts Julia's behavior, which assumes mapped functions are pure. For instance:
julia> using SparseArrays
julia> A = sparse([1, 1, 2, 3], [1, 3, 2, 3], [3, 1, 2, 3])
3×3 SparseMatrixCSC{Int64, Int64} with 4 stored entries:
3 ⋅ 1
⋅ 2 ⋅
⋅ ⋅ 3
julia> map(x -> x^2 + rand(), A)
3×3 SparseMatrixCSC{Float64, Int64} with 9 stored entries:
9.54687 0.85208 1.86548
0.85208 4.31839 0.85208
0.85208 0.85208 9.26578
This default behavior is also inconsistent with most programmers' expectations, as map
is a functional construct and therefore tends to assume side-effect free functions. This could lead to bugs; it also means that any code using map
on a vector of unknown type can't take advantage of the performance enhancements provided by PooledArrays, since pure
is not a keyword for the map method in base. As a result, I propose defaulting to pure=true
.
Metadata
Metadata
Assignees
Labels
No labels