Ian Henriksen schrieb am 29.07.2015 um 23:56: > On Tue, Jul 28, 2015 at 12:37 PM Robert Bradshaw wrote: >> On Tue, Jul 28, 2015 at 11:18 AM, Ian Henriksen wrote: >>> On Tue, Jul 28, 2015 at 1:36 AM Robert Bradshaw wrote: >>>> On Mon, Jul 20, 2015 at 2:06 PM, Ian Henriksen wrote: >>>>> 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. > > 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.
I'd like to see this feature merged rather sooner than later. Would it help if we only require a type to be there (so that people get the syntax right in their code) but do not validate it for now? Stefan _______________________________________________ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel