Thanks. I just opened an issue to improve the docs https://github.com/JuliaLang/julia/issues/14801
On Tuesday, January 26, 2016 at 12:23:30 AM UTC-8, Mauro wrote: > > I think the only time performance of immutables can be better than > mutables, is when they are also isbits. This is the case when all the > fields of an immutable are isbits. Note that the compiler if free to > either copy or reference immutables as the are immutable. > > On Tue, 2016-01-26 at 09:19, Nitin Arora <nitin...@gmail.com <javascript:>> > wrote: > > 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 <nitin...@gmail.com > >> >> <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 > >> >> > >> >