Okay thanks. But Is it not true that, if I pass the immutable Point type or an array of the same to various functions, then Julia compiler will pass it by copying instead of passing it by reference ?
>From the documentation: *"An object with an immutable type is passed around (both in assignment statements and in function calls) by copying, whereas a mutable type is passed around by reference."* One the other hand a mutable types will be passed by reference. Doesn't that suggest that an immutable type (singular or array) may actually be worse in this scenario ? On Tuesday, January 26, 2016 at 12:03:19 AM UTC-8, Mauro wrote: > > > I assume from mutate you mean not changing type of the sub-variable (e.g > > "vstate" above) ? I plan to change the values inside that vector but the > > vector itself, both in length and type, will remain constant. > > Yes, then I'd use immutable. However, I don't think it will improve > performance over mutable (as long as you don't replace the array may be > worse). > > > Nitin > > > > On Monday, January 25, 2016 at 10:23:21 PM UTC-8, Yichao Yu wrote: > >> > >> On Tue, Jan 26, 2016 at 12:46 AM, Nitin Arora <[email protected] > >> <javascript:>> wrote: > >> > I have couple of questions ( maybe dumb :-) ) regarding composite > types: > >> > > >> > 1) For a vector of composite type defined as: > >> > > >> > immutable Point{T<:AbstractFloat} > >> > vstate :: Vector{T} # is a vector of length 6 which will be > updated > >> > during code execution > >> > ct :: Vector{T} # is a vector of length 4 which will be > updated > >> > during code execution > >> > id :: Int64 # is a constant input > >> > end > >> > N = 1000 > >> > MyPoints = Array(Point,N) > >> > > >> > is it more useful / recommended to use immutable or mutable composite > >> types > >> > ? I am mainly concerned with memory allocation and performance while > >> > accessing MyPoints. > >> > >> Use immutable if you don't need to mutate it. > >> > >> > > >> > 2) If we have a immutable composite type as: > >> > immutable Body{T} > >> > μ :: T > >> > end > >> > > >> > immutable PRB{T} #constant, doesn't change once set > >> > bodlist :: Vector{T} #vector of another immutable type > >> > end > >> > b = Body(1.0) > >> > prb = PRB([b]) > >> > > >> > and we access the variables as follows, results in memory allocation: > >> > > >> > @time b.μ > >> > > >> > 0.000002 seconds (5 allocations: 176 bytes) > >> > > >> > @time prb.bodlist[1].μ > >> > > >> > 0.000004 seconds (6 allocations: 192 bytes) > >> > > >> > > >> > why is there a memory allocation every-time I access these variables > ? > >> (both > >> > for nested and the un-nested case) > >> > >> And don't use @time in global scope like this. > >> > >> > > >> > thanks for all the help, > >> > Nitin > >> >
