On Sat, Jul 10, 2010 at 11:18 PM, Stefan Behnel <stefan...@behnel.de> wrote: > Robert Bradshaw, 11.07.2010 00:00: >> On Sat, Jul 10, 2010 at 2:45 PM, Dag Sverre Seljebotn wrote: >>> On 07/10/2010 09:11 PM, Stefan Behnel wrote: >>>> Robert Bradshaw, 09.07.2010 17:29: >>>> >>>>> For the moment, though, I'm wondering why we even bother letting >>>>> people declare the type as bool--it's not a very useful (Python) type >>>>> to statically declare, but can cause a lot of confusion. >>>>> >>>> Agreed, use cases are hard to come up with. However, given that it's there, >>>> I'd prefer keeping the C++ type in a separate namespace for now and >>>> maybe(!) improve Cython warnings to find common traps when compiling in C++ >>>> mode. >>>> >>> >>> But int and float has the exact same problem! And there we inherited C >>> semantics from Pyrex... >> >> And, for Py2, long has a double meaning as well. There is very little >> use (currently) for declaring things to be Python ints, longs, floats, >> bools. > > Well, 'long' is exactly the reason: Since there are 'int' and 'long' in > Py2, which are completely interchangeable, it's impossible to type a > variable as Python 'int' or 'long' without restricting your code too much. > If you type it as 'int', a C int will behave much better as it accepts both > Python integer types. If there was only Py3 (with only one Python 'int' > type), this problem would have occurred much more often (and I predict that > it will become more apparent when more people start developing Py3 code). > > 'float' is different here as there is no redundant type in Python, but > since 'float' is equivalent to C double, there's no reason not to type your > variable as a C double directly. Also, it'll actually work to declare your > variable as 'float' if you only pass Python floats. But it won't > necessarily do exactly the right thing. > > In general, numeric types are much less of a problem as they have well > defined coercion semantics. The boolean types of C, C++ and Python do not. > > >>> Therefore C++ bool makes sense IMO, to be consistent with int and float >> >> Yep. The main problem that I see is that most of the usecases for bool >> will be wrong, resulting in compiling, running code that does the >> wrong thing. I'd rather not have the type at all. > > Actually, now that I think some more about it - Cython 0.13 moves many > Python types into C space automatically, so we may consider *always* > mapping 'bool' to the native boolean type in the target language. Python's > 'bool' type is compatible with integers anyway, so we could map 'bool' to a > 0/1 restricted bint in C and bool in C++ (assuming appropriate coercion > semantics for C++/Python). > > Ok, the bool type in C++ isn't compatible with integers, but I think that's > only a minor issue. The only case where you'd really see this is when you > try to add a 'bool' to an integer. This has no impact on Python compilation > or pure Python mode, and it's not hard to explain to someone who wraps C++ > that 'bool' is really C++ bool.
Yes, that's what I'm thinking. In the immediate future, should we remove/deprecate the bool as a Python object type? - Robert _______________________________________________ Cython-dev mailing list Cython-dev@codespeak.net http://codespeak.net/mailman/listinfo/cython-dev