[Cython] Non-type template parameters

Ian Henriksen insertinterestingnamehere at gmail.com
Tue Jul 28 20:18:42 CEST 2015


On Tue, Jul 28, 2015 at 1:36 AM Robert Bradshaw <robertwb at gmail.com> wrote:

> Sorry for not getting back sooner... responses below.
>
> On Mon, Jul 20, 2015 at 2:06 PM, Ian Henriksen
> <insertinterestingnamehere at gmail.com> wrote:
> > Hi all,
> > I've spent a little time working on adding support for non-type
> > template parameters. In doing this, it has been very easy to add
> > support for doing something like the following:
> >
> > cdef extern from "add_const.hpp" nogil:
> >     int myfunc1[i](int)
> > def test():
> >     print myfunc1[2](a)
> >
> > The downside of this is that it does not let the Cython compiler
> > distinguish between different kinds of template parameters.
> >
> > Stricter checking could be added using a syntax like this:
> >
> > cdef extern from "add_const.hpp" nogil:
> >     int myfunc1[int i](int)
> > def test():
> >     print myfunc1[2](a)
> >
> > The downsides here are that the syntax doesn't really match the
> > existing template syntax. It will also complicate the Cython codebase
> > since we'll have to go to greater lengths to allow or disallow all the
> > different special cases for templates.
> >
> > Which version would be preferable?
>
> I think I'd prefer the [int i] syntax. Hopefully it shouldn't
> complicate things too much.
>

Okay, I think I see a way to make that work. On the other hand, since there
weren't any replies here, I've already nearly finished implementing the
first
syntax. I'll spend another hour or two finishing it off later today and
submit a PR
so you can look it over. I originally favored the first syntax because it
minimizes
the number of fancy template features (SFINAE, for example) we have to worry
about on the Cython end. I'm still open to discuss it though.


>
> > On a similar note, for variadic templates, would we prefer something
> > like
> >
> > cdef extern from "my_variadic.hpp" nogil:
> >     T myfunc2[T,...](T, ...)
> >
> > or something like:
> >
> > cdef extern from "my_variadic.hpp" nogil:
> >     T myfunc2[T, Types...](T, Types... args)
> >
> > Again, the latter syntax is more explicit, but it will require much more
> > complicated code in Cython. It also doesn't match the existing syntax
> > very well. The former syntax matches the existing syntax for templates
> > better, but will make it hard for Cython to raise errors early on in
> > compilation.
>
> Hmm... this is a tougher call. Let's go with the former for now.
>

I like the former a lot more. It will keep the syntax simpler on our end
and I
haven't been able to find any case that it doesn't cover. This will also be
significantly easier to implement. I'll take a look at it soon.
Thanks!
-Ian Henriksen


>
> > I'd greatly appreciate any input on the best syntax for either use-case.
> >
> > Regards,
> >
> > -Ian Henriksen
> >
> > _______________________________________________
> > cython-devel mailing list
> > cython-devel at python.org
> > https://mail.python.org/mailman/listinfo/cython-devel
> >
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> https://mail.python.org/mailman/listinfo/cython-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cython-devel/attachments/20150728/d15c5b98/attachment.html>


More information about the cython-devel mailing list