On Fri, Aug 19, 2016 at 10:01 PM, Erik Schnetter <schnet...@gmail.com> wrote:
> On Fri, Aug 19, 2016 at 9:53 AM, Yichao Yu <yyc1...@gmail.com> wrote: > >> >> On Fri, Aug 19, 2016 at 9:01 PM, Oliver Schulz < >> oliver.sch...@tu-dortmund.de> wrote: >> >>> Hi Eric, >>> >>> nice - this is exactly what I meant. I wonder if Julia Symbols >>> themselves could become like this in the future. >>> >> >> As jameson said already, isbits or not is irrelevant here and we are >> working towards making non isbits type inlinable. >> >> The ValueSymbol type is also not a true isbits type, you can't save it to >> sysimg or use it with mmap array for example (well, you can, but you won't >> get the answer you want) >> > > Okay, call it `pointerfree` then. > Well, the point is that it doesn't have all the necessary probably assumed by other part of the system. `isbits` is an acronym of `pointerfree`. > > -erik > > > Cheers, >>> >>> Oliver >>> >>> >>> On 17.08.2016 18:44, Erik Schnetter wrote: >>> >>>> See <https://github.com/eschnett/ValueSymbols.jl> for what I had in >>>> mind. >>>> >>>> -erik >>>> >>>> On Wed, Aug 17, 2016 at 10:32 AM, Yichao Yu <yyc1...@gmail.com >>>> <mailto:yyc1...@gmail.com>> wrote: >>>> >>>> >>>> >>>> On Wed, Aug 17, 2016 at 10:19 PM, Oliver Schulz >>>> <oliver.sch...@tu-dortmund.de <mailto:oliver.sch...@tu-dortmund.de >>>> >> >>>> >>>> wrote: >>>> >>>> Hi Yichao >>>> >>>> I get that - I was just curious why (and I guess there's likely >>>> a very good reason for it). My intuition would be that a >>>> non-GCed interned string type could be represented by a bitstype >>>> (i.e. a pointer or index to the string table). So I was >>>> surprised that Symbol is an object reference and wanted to >>>> understand this a bit better. >>>> >>>> >>>> It's a pointer to managed memory with tag that's all what's needed >>>> for it to be a !pointerfree type. There are way more things that we >>>> don't GC and it has nothing to do with whether it's a isbits type or >>>> not. >>>> >>>> >>>> >>>> >>>> Cheers, >>>> >>>> Oliver >>>> >>>> >>>> On Wednesday, August 17, 2016 at 3:35:41 PM UTC+2, Yichao Yu >>>> wrote: >>>> >>>> >>>> > PS: Yes, symbols in Julia should be bitstypes. >>>> >>>> No, it's a object reference and isn't a `isbits()` type. >>>> >>>> >>>> >>>> On Wed, Aug 17, 2016 at 8:26 AM, Cedric St-Jean >>>> <cedric...@gmail.com> 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> wrote: >>>> >>>> Hello Andreas, >>>> >>>> consider iterating over a Dict{Symbol,Int64}: >>>> >>>> | >>>> d =Dict(:foo =>42,:bar =>77) >>>> >>>> forx ind 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? >>>> >>>> >>>> >>>> >>>> >>>> -- >>>> Erik Schnetter <schn...@gmail.com> >>>> http://www.perimeterinstitute.ca/personal/eschnetter/ >>>> <http://www.perimeterinstitute.ca/personal/eschnetter/> >>>> >>>> >>>> >>>> >>>> >>>> >>>> -- >>>> Erik Schnetter <schnet...@gmail.com <mailto:schnet...@gmail.com>> >>>> http://www.perimeterinstitute.ca/personal/eschnetter/ >>>> >>> >>> >> > > > -- > Erik Schnetter <schnet...@gmail.com> http://www.perimeterinstitute. > ca/personal/eschnetter/ >