On Tuesday, March 3, 2015 at 4:42:05 PM UTC-5, Sean Marshallsay wrote:
>
> Sorry about that. Is there some work going into making `type` densely 
> packed or am I way off base here?
>

It's simply not possible to have `type` be densely packed because it is 
mutable and has reference semantics. Unlike immutables, which are 
identified purely by their contents, types can be thought of as containers 
whose contents may change over time.  You can't densely pack these 
containers, because densely packing requires *copying* the contents. 
 That's okay for immutables (since an immutable is its contents, and its 
contents cannot change), but it's not okay for types.  Here's a simple 
example for why this cannot work:

julia> x = B(1,2)
B(1.0,2.0)

# Lets put this container into an array
julia> a = [x]
1-element Array{B,1}:
 B(1.0,2.0)

# Now x and a[1] both refer to the *same* container
julia> x.x = 3; a
1-element Array{B,1}:
 B(3.0,2.0)

# We can even push the same container as the second element:
julia> push!(a, x)
2-element Array{B,1}:
 B(3.0,2.0)
 B(3.0,2.0)

# Now x, a[1] and a[2] all refer to the same container
# If the value 3.0 were stored inline, this wouldn't be possible:
julia> x.x = 4; a
2-element Array{B,1}:
 B(4.0,2.0)
 B(4.0,2.0)

Reply via email to