On Tue, Jul 28, 2015 at 12:37 PM Robert Bradshaw <rober...@gmail.com> wrote:

> On Tue, Jul 28, 2015 at 11:18 AM, Ian Henriksen
> <insertinterestingnameh...@gmail.com> wrote:
> >
> > On Tue, Jul 28, 2015 at 1:36 AM Robert Bradshaw <rober...@gmail.com>
> wrote:
> >>
> >> Sorry for not getting back sooner... responses below.
> >>
> >> On Mon, Jul 20, 2015 at 2:06 PM, Ian Henriksen
> >> <insertinterestingnameh...@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.
>
> I think this falls into the "explicit is better than implicit" bucket.
> That and getting obscure template errors that could have been caught
> at Cython compile time will be very nice.
>
> >> > 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.
>
> Sounds good.
>
> There's also the question of default arguments. Let's adopt the [type
> T = *] syntax for that.
>
> >> > I'd greatly appreciate any input on the best syntax for either
> use-case.
> >> >
> >> > Regards,
> >> >
> >> > -Ian Henriksen
> >> >
> >> > _______________________________________________
> >> > cython-devel mailing list
> >> > cython-devel@python.org
> >> > https://mail.python.org/mailman/listinfo/cython-devel
> >> >
> >> _______________________________________________
> >> cython-devel mailing list
> >> cython-devel@python.org
> >> https://mail.python.org/mailman/listinfo/cython-devel
> >
> >
> > _______________________________________________
> > cython-devel mailing list
> > cython-devel@python.org
> > https://mail.python.org/mailman/listinfo/cython-devel
> >
> _______________________________________________
> cython-devel mailing list
> cython-devel@python.org
> https://mail.python.org/mailman/listinfo/cython-devel


Yep, I can see why that syntax makes sense. I'm a little worried I may not
be able
to finish adding all of this in the near future. Adding all the of this type
checking for templates goes a long way toward implementing the full syntax
for
declaring them. That said, it seems sensible to catch errors early if
possible.

Thanks!
-Ian Henriksen
_______________________________________________
cython-devel mailing list
cython-devel@python.org
https://mail.python.org/mailman/listinfo/cython-devel

Reply via email to