On Thu, Jun 2, 2011 at 2:42 PM, mark florisson
<markflorisso...@gmail.com> wrote:
> On 2 June 2011 23:31, Robert Bradshaw <rober...@math.washington.edu> wrote:
>> On Thu, Jun 2, 2011 at 2:18 PM, Dag Sverre Seljebotn
>> <d.s.seljeb...@astro.uio.no> wrote:
>>> On 06/02/2011 06:39 PM, Robert Bradshaw wrote:
>>>>
>>>> In looking at merging fused types, it's time to nail down the syntax.
>>>> The current implementation is
>>>>
>>>>     ctypedef cython.fused_type(list, dict, object) fused_t
>>>>
>>>> This requires an addition to the grammer to allow the "call" syntax in
>>>> a type declaration, as well as special casing to make it allowed only
>>>> in a typedef. What about
>>>>
>>>>     cython.fused_type[list, dict, object].
>>>>
>>>> One advantage is that indexing is already valid in type declarations,
>>>> and its the typical syntax for parameterized types. Thoughts? Any
>>>> other ideas?
>>>
>>> I don't really like overloading [] even more, and I think () (or, perhaps,
>>> 'fused_type([list, dict, object])').
>>>
>>> But I don't feel very strongly about it.
>>>
>>> If you only want this allowed in typedefs, then, being puristic, I think
>>> that really a "fused type" is really different from a ctypedef, and that it
>>> would warrant something like a new keyword.
>>>
>>> cdef fusedtype [list, dict, object] fused_t
>>>
>>> That's rather horrible, but you get the gist. The thing is, once you use a
>>> ctypeudef, you really should allow
>>>
>>> def f(fused_type(float, double) x, fused_type(float, double) y): ...
>>>
>>> but then, how many fused types do you have, one or two?
>>
>> Two, and you can't refer to them. Such anonymous types could be handy
>> for one-off functions, e.g.
>>
>>    def f(fused_type[list, dict, object] x): ...
>>
>> but maybe that's not needed.
>>
>>> So this makes it seem to me that using ctypedef is a rather horrible hack.
>>
>> Yeah, this is the crux of the issue. (To be clear, Mark's
>> implementation is good, it's our syntax that's hacky). It's perhaps
>> less ugly than
>> introducing a new keyword. A crazy idea:
>>
>> cdef fused floating_t:
>>    float
>>    double
>>    long double
>>
>> (in analogy with how we declare types like structs and enums).
>
> I like that syntax, the bad thing about ctypedef for me is that
> everything goes on one line, at which point you have to start breaking
> them if they get too long (which can happen quite easily with lenghty
> names like 'long double complex'), which looks awkward.
>
> So much for trying to reduce grammar changes, though :)

Well, it introduces a new kind of node, rather than the kind of funny
interaction/restriction with typedef, which got me thinking about this
in the first place. Of course then you can't create an anonymous one
for use in a function (which may be viewed as a feature or a defect).

- Robert
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to