> unless they just became numbers to index into a global array somewhere
I had assumed that this is basically what Symbols (being interned strings) are. > Maybe you can solve the CategorizedPoint problem by using an @enum. For a fixed set of categories, of course, but not otherwise. > Stack-allocating non-bits-type immutables is on the roadmap to 1.0 I know - but what if I want to put the CategorizedPoint values into an array? :-) On Wednesday, August 17, 2016 at 2:27:09 PM UTC+2, Cedric St-Jean wrote: > > Good points. > > Given that symbols have a name which is a string, I don't see how they > could be a bits-type unless they just became numbers to index into a global > array somewhere...... i.e. a pointer. Stack-allocating non-bits-type > immutables is on the roadmap to 1.0, so that should solve your problems. > > Maybe you can solve the CategorizedPoint problem by using an @enum. > > On Wed, Aug 17, 2016 at 6:48 AM, Oliver Schulz <oliver...@tu-dortmund.de > <javascript:>> wrote: > >> Hello Andreas, >> >> consider iterating over a Dict{Symbol,Int64}: >> >> d = Dict(:foo => 42, :bar => 77) >> for x in d println("$(typeof(x)), $(isbits(x))") end >> >> >> During iteration, a lot of stack allocated "Pair{Symbol,Int64}" objects >> are created. That is very bad for performance. >> >> immutable CategorizedPoint >> x::Float64 >> y::Float64 >> category::Symbol >> end >> >> >> Also, consider a (hypothetical) data type for categorized points (with a >> finite number of categories - but extensible, so that Symbol is a better >> fit than using an enum): >> >> immutable CategorizedPoint >> x::Float64 >> y::Float64 >> category::Symbol >> end >> >> I would definitely want this to be a bits-type, and not have every >> instance heap-allocated. >> >> >> Cheers, >> >> Oliver >> >> >> On Wednesday, August 17, 2016 at 11:44:13 AM UTC+2, Andreas Lobinger >> wrote: >>> >>> Hello colleague, >>> >>> On Wednesday, August 17, 2016 at 11:12:51 AM UTC+2, Oliver Schulz wrote: >>>> >>>> Sure - I was assuming that as Symbol (as an interned string) is >>>> basically just a pointer. So comparisons are O(1), etc. What I'd like to >>>> understand is, why can't it be a bitstype? Currently, it's not, so Symbol >>>> cannot be used in a lightweight (i.e. stack-allocated) immutable type. I >>>> assume there's a good reason for it, I just want to understand why. >>>> >>> >>> Could you make an example how you would like to use Symbol in >>> lightweight types? >>> >>> >