Ok then I'll make a PR for that, and see if I find more uses like this that
can be changed.

Ismael Venegas Castelló

*Data Analyst*

Cel. 044 55 6434 0229

[email protected]

Cerro San Francisco 357, C.P. 04200

Campestre Churubusco, Coyoacán

Ciudad de México
<http://t.sidekickopen35.com/e1t/c/5/f18dQhb0S7lC8dDMPbW2n0x6l2B9nMJW7t5XX43Mx_82W1p1tN-8q-fZWW3LPXXH56dKBHf5NSPJF02?t=https%3A%2F%2Frichit.com.mx%2F&si=4656540167962624&pi=a60b85b8-29a2-4387-dac4-d841433d9784>

<https://www.facebook.com/richitsolution>
<http://t.sidekickopen35.com/e1t/c/5/f18dQhb0S7lC8dDMPbW2n0x6l2B9nMJW7t5XX43Mx_82W1p1tN-8q-fZWW3LPXXH56dKBHf5NSPJF02?t=https%3A%2F%2Ftwitter.com%2Frichitsolution&si=4656540167962624&pi=a60b85b8-29a2-4387-dac4-d841433d9784>
  <[email protected]>

Tel. 6718 1818
richit.com.mx

2015-12-28 12:12 GMT-06:00 Stefan Karpinski <[email protected]>:

> Sure. That avoids unnecessarily copying the array.
>
> On Mon, Dec 28, 2015 at 10:51 AM, Ismael Venegas Castelló <
> [email protected]> wrote:
>
>> Stefan, wouldn't using `sort!` instead of `sort` be better here in this
>> case?:
>>
>> subtypes(m::Module, x::DataType) = sort(collect(_subtypes(m, x)),
>> by=string)
>>
>> subtypes(m::Module, x::DataType) = sort!(collect(_subtypes(m, x)),
>> by=string)
>>
>>
>>
>> El lunes, 28 de diciembre de 2015, 9:25:08 (UTC-6), Stefan Karpinski
>> escribió:
>>>
>>> No, please don't spend time on this. We're not going to change this to
>>> return a heavyweight data structure like a Set when a simple structure like
>>> and Array will do. In mathematics sets are simpler than ordered
>>> collections, but in programming languages the relationship is reversed. In
>>> general data structures like Set are only used when they are necessary,
>>> such as when you need O(1) checking for inclusion. Since there's no such
>>> need here, an array is simpler and better.
>>>
>>> On Mon, Dec 28, 2015 at 2:40 AM, Kevin Squire <[email protected]>
>>> wrote:
>>>
>>>> Hi Ray,
>>>>
>>>> You're probably the first person to make this observation. I can see
>>>> your point, and I don't really have a strong argument or opinion,
>>>> really--the main reason it's sorted is probably because it looks
>>>> nicer--at least if I did write that code, that would  have been my
>>>> reasoning.
>>>>
>>>> If you're up for it, you could change it to create a set and submit a
>>>> pull request. No guarantees it gets accepted, but the likelihood increases
>>>> significantly over not submitting one. :-)
>>>>
>>>> Cheers,
>>>>    Kevin
>>>>
>>>>
>>>> On Sunday, December 27, 2015, Ray Toal <[email protected]> wrote:
>>>>
>>>>> I'm sure the order won't ever change, but I'd still find it odd if the
>>>>> documentation of subtypes were to say
>>>>>
>>>>> "Returns a list of subtypes, sorted by the name of the subtype"
>>>>>
>>>>> because, well, what about namespaces? What about all sorts of Unicode
>>>>> collation definitions that would have to be a part of such a definition?
>>>>>
>>>>> Yes, as much as I would like to just assert that the result of calling
>>>>> subtypes on Type produces the array [DataType, TypeConstructor, Union
>>>>> ] it's just not supposed to be an array, even if today we can
>>>>> guarantee that the array will be sorted, and it is ridiculously unlikely 
>>>>> to
>>>>> change.
>>>>>
>>>>> I just think of unordered collections as sets. I don't think anyone
>>>>> would or should ever write code that takes advantage of the fact that this
>>>>> array is sorted, though. :)
>>>>>
>>>>> Thanks for the responses
>>>>>
>>>>> Ray
>>>>>
>>>>>
>>>>> On Sunday, December 27, 2015 at 5:10:46 PM UTC-8, Kevin Squire wrote:
>>>>>>
>>>>>> Thanks for looking and posting (I've been on my phone).  I think I
>>>>>> might have written that code, actually. ;-)
>>>>>>
>>>>>> Cheers!
>>>>>>    Kevin
>>>>>>
>>>>>> On Sunday, December 27, 2015, Ismael VC <[email protected]> wrote:
>>>>>>
>>>>>>> Kevin I tested in my Win laptop with 0.3.11, 0.4.2, 0.4, 0.5+ also
>>>>>>> the same versions in julia box, and the output is deterministically 
>>>>>>> sorted,
>>>>>>> It seems this has been the way it works for some time now, then I 
>>>>>>> looked at
>>>>>>> the code and it’s indeed sorted (should have done that first! :P ):
>>>>>>>
>>>>>>>    - http://git.io/vEXL9
>>>>>>>
>>>>>>> subtypes(m::Module, x::DataType) = sort(collect(_subtypes(m, x)), 
>>>>>>> by=string)
>>>>>>> subtypes(x::DataType) = subtypes(Main, x)
>>>>>>>
>>>>>>> I would expect a very good reason in order to justify a change for
>>>>>>> this now.
>>>>>>> ​
>>>>>>>
>>>>>>> 2015-12-27 18:06 GMT-06:00 Kevin Squire
>>>>>>>
>>>>>>>> Ray, thanks for the clarification--makes sense. In fact, for
>>>>>>>> introspection code like 'subtypes', performance is probably the wrong
>>>>>>>> argument--it's unlikely that it occurs in performance-critical code. I
>>>>>>>> think it's really that arrays are just simpler.
>>>>>>>>
>>>>>>>> One aesthetic change I could imagine would be to have the results
>>>>>>>> sorted before returning, which would keep the same data structure, but
>>>>>>>> solve your problem, and present the subtypes in a way the user would 
>>>>>>>> likely
>>>>>>>> find more useful.
>>>>>>>>
>>>>>>>> Ismael, it might be a little brittle to depend on the current order
>>>>>>>> (unless it's always sorted now).
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>>    Kevin
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sunday, December 27, 2015, Ismael Venegas Castelló wrote:
>>>>>>>>
>>>>>>>>> You can just do:
>>>>>>>>>
>>>>>>>>> @assert subtypes(Type) == [DataType, TypeConstructor, Union]
>>>>>>>>>
>>>>>>>>> I just tested this:
>>>>>>>>>
>>>>>>>>> julia> @time for i in 1:1000
>>>>>>>>>            @assert subtypes(Type) == [DataType, TypeConstructor,
>>>>>>>>> Union]
>>>>>>>>>        end
>>>>>>>>>   3.025415 seconds (767.00 k allocations: 224.075 MB, 0.49% gc
>>>>>>>>> time)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> El sábado, 26 de diciembre de 2015, 12:52:51 (UTC-6), Ray Toal
>>>>>>>>> escribió:
>>>>>>>>>>
>>>>>>>>>> I noticed that
>>>>>>>>>>
>>>>>>>>>> *julia> **subtypes(Type)*
>>>>>>>>>>
>>>>>>>>>> *3-element Array{Any,1}:*
>>>>>>>>>>
>>>>>>>>>> * DataType      *
>>>>>>>>>>
>>>>>>>>>> * TypeConstructor*
>>>>>>>>>>
>>>>>>>>>> * Union *
>>>>>>>>>>
>>>>>>>>>> and was wondering if there was any significance in the order of
>>>>>>>>>> the subtypes. If not, could the method have produced a Set instead?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>
>

Reply via email to