Comment on PEP-0238
bokr at accessone.com
Wed Jul 4 15:25:51 EDT 2001
On Fri, 29 Jun 2001 02:10:09 GMT, "Robert J. Harrison"
<rjh at 3-cities.com> wrote:
>From recent discussion it is not clear to me if
>PeP 0238 (http://python.sourceforge.net/peps/pep-0238.html)
>has gained favor, or not.
>Two comments. First, its major emphasis is on benefitting
>inexperienced programmers, but, by being inconsistent with
>other mainstream languages, it is not clear to me that it
>is actually a benefit for them. It is certainly not a
>benefit for experiencd programmers that routinely
>switch between Python and other languages. Second, even
>if the change of behavior for divide (/) is accepted, I
>see no point in introducing the // operator. A plethora
>of infrequently used operators will make Python more
>Perl-like. Better an explicit 'cast' to integer.
1) I like the current overloading of "/"
2) I think 'type' is a misnomer re float
3) I suspect the subject of coercions and conversions
will churn on a while before a really clean rationale
1) I like being able to write integer expressions concisely. I like it
that +-*/% operating with integers results in integers (and is
presumably implemented with efficient CPU features not using
floating point anywhere).
I do think of integers as a special subset of real numbers, but
I don't want them treated as real when I want to do integer
If novices need help with the concepts of integer operations,
a 10-minute interactive tutorial should be enough. It would
be a disservice to them to present numbers as if integers were
not special in any way. What the best notation is is a different
issue. Personally, I prefer an overloaded '/' to a special '//',
and I don't mind adding a decimal point to indicate non-integer.
2) To me, floating point is a special representation format for
a special subset of rational numbers. One could argue that it
should be treated as a hidden implementation issue whether and
how floating point hardware is used to represent numbers of
whatever type. I.e., you could have the concept of an optimal
number representation which varied dynamically as values changed
for a 'number' or 'real' type.
PEP 240 (Adding a Rational Literal to Python) might then be
a PEP to choose the appropriate optimal representation for ddd.ddd,
and the type could be number or real, deprecating float.
If you wanted to extend the idea of optimal representation even
further (where optimality preserves exactness?) you could consider
what I'd call deferred-evaluation-literal-expressions (DELEs).
A possible representation would be a tuple identifying an operation
and arguments. The rational type is an example of sorts:
('/',numerator,denominator). ('**',2,('/',1,3)) would let you
represent the cube root of 2 exactly. And so forth.
BTW, if Python numbers get an exact/inexact attribute as in scheme,
I hope Python doesn't arbitrarily force exact=false on all numbers
represented in floating point.
3) In numeric as opposed to strictly integer context, I would think
the goal is to preserve exactness. I think I would be for
PEP 237 (Unifying Long Integers and Integers) on that basis.
Conceivably there might be a coercion from floating point
(rational) to integer-pair rational to preserve exactness, but
there are so many ways to represent numbers that maybe they should
all be hidden from the language definition.
More information about the Python-list