Re: [Cython] can we deprecate for-from loops?
On 2015-10-12 04:57, Kevin Norris wrote: IMHO, either it should be un-deprecated in the documentation[1], or the compiler should start issuing warnings and eventually errors. You can't have it both ways. Either it's deprecated or it isn't. +1 ___ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel
Re: [Cython] can we deprecate for-from loops?
On Sun, Oct 11, 2015 at 3:31 PM, Greg Ewing wrote: > Stefan Behnel wrote: >> >> Hi! >> >> The syntax construct "for i from 0 <= i < 10" has been silently outdated >> for years. Can we start issuing a warning that normal range() loops are >> preferred? > > > I'd be in favour of replacing it with just 'for 0 <= i < 10', > but -1 on removing it altogether. > > I introduced it in Pyrex for a reason -- to clearly express > iterations over ranges of integers with arbitrary combinations > of open/closed endpoints, I agree that it expresses intent clearer than the range(...) construct. > for use in conjunction with C code. > I believe that reason is still valid. I'm not sure why "in conjunction with C code" makes any difference to the argument, now that the basic range loop produces the same code in Cython. Put another way, does its clarity merit a PEP to introduce this syntax into Python? If not, it's hard to justify in Cython given that it is a fully redundant addition to the language. - Robert ___ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel
Re: [Cython] can we deprecate for-from loops?
When the step size is a variable, the range statement falls back to a Python for loop since the direction of the loop is unknown. The "i from a <= i < b by c" syntax specifies the direction, so it is turned into a C for loop. The difference is performance could be substantial. This produces a Python for loop: def python_loop(Py_ssize_t a, Py_ssize_t b, Py_ssize_t c): cdef Py_ssize_t i for i in range(a, b, c): pass This produces a C for loop: def c_loop(Py_ssize_t a, Py_ssize_t b, Py_ssize_t c): cdef Py_ssize_t i for i from a <= i < b by c: pass On Mon, Oct 12, 2015, at 08:37 AM, Robert Bradshaw wrote: > On Sun, Oct 11, 2015 at 3:31 PM, Greg Ewing > wrote: > > Stefan Behnel wrote: > >> > >> Hi! > >> > >> The syntax construct "for i from 0 <= i < 10" has been silently outdated > >> for years. Can we start issuing a warning that normal range() loops are > >> preferred? > > > > > > I'd be in favour of replacing it with just 'for 0 <= i < 10', > > but -1 on removing it altogether. > > > > I introduced it in Pyrex for a reason -- to clearly express > > iterations over ranges of integers with arbitrary combinations > > of open/closed endpoints, > > I agree that it expresses intent clearer than the range(...) construct. > > > for use in conjunction with C code. > > I believe that reason is still valid. > > I'm not sure why "in conjunction with C code" makes any difference to > the argument, now that the basic range loop produces the same code in > Cython. Put another way, does its clarity merit a PEP to introduce > this syntax into Python? If not, it's hard to justify in Cython given > that it is a fully redundant addition to the language. > > - Robert > ___ > 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
Re: [Cython] can we deprecate for-from loops?
On Mon, Oct 12, 2015 at 11:40 AM, Josh Ayers wrote: > When the step size is a variable, the range statement falls back to a > Python for loop since the direction of the loop is unknown. The "i from > a <= i < b by c" syntax specifies the direction, so it is turned into a > C for loop. The difference is performance could be substantial. > > This produces a Python for loop: > > def python_loop(Py_ssize_t a, Py_ssize_t b, Py_ssize_t c): > cdef Py_ssize_t i > for i in range(a, b, c): > pass I thought we had fixed that... apparently not. Doable (e.g. multiply a, b, c, and then i by the sign of c, checking for 0 of course) but messy. > This produces a C for loop: > > def c_loop(Py_ssize_t a, Py_ssize_t b, Py_ssize_t c): > cdef Py_ssize_t i > for i from a <= i < b by c: > pass Ah, there is a slight semantic difference: this will be an infinite for...from loop if c is not positive (and a < b), but an empty for...in loop for range. However, there's another catch: for...from can be used with non-integral values (doubles, pointers, ...) Unless we wanted to introduce, say, something like cython.crange it may be more painful to force users to express that as while loops. I was hoping to get rid of it, but now I'm not sure it'd be that easy. > On Mon, Oct 12, 2015, at 08:37 AM, Robert Bradshaw wrote: >> On Sun, Oct 11, 2015 at 3:31 PM, Greg Ewing >> wrote: >> > Stefan Behnel wrote: >> >> >> >> Hi! >> >> >> >> The syntax construct "for i from 0 <= i < 10" has been silently outdated >> >> for years. Can we start issuing a warning that normal range() loops are >> >> preferred? >> > >> > >> > I'd be in favour of replacing it with just 'for 0 <= i < 10', >> > but -1 on removing it altogether. >> > >> > I introduced it in Pyrex for a reason -- to clearly express >> > iterations over ranges of integers with arbitrary combinations >> > of open/closed endpoints, >> >> I agree that it expresses intent clearer than the range(...) construct. >> >> > for use in conjunction with C code. >> > I believe that reason is still valid. >> >> I'm not sure why "in conjunction with C code" makes any difference to >> the argument, now that the basic range loop produces the same code in >> Cython. Put another way, does its clarity merit a PEP to introduce >> this syntax into Python? If not, it's hard to justify in Cython given >> that it is a fully redundant addition to the language. >> >> - Robert >> ___ >> 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