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