[Python-ideas] Python Numbers as Human Concept Decimal System

Guido van Rossum guido at python.org
Fri Mar 7 03:09:02 CET 2014


Mark, it feels like you do not understand Python well enough to be able to
make sweeping proposals about its reform. Hopefully the responses you are
getting will help you make more informed proposals in the future.


On Thu, Mar 6, 2014 at 2:23 PM, Mark H. Harris <harrismh777 at gmail.com>wrote:

>
>
> On Thursday, March 6, 2014 11:48:53 AM UTC-6, Guido van Rossum wrote:
> {snip}
>
>  hi Guido,  thanks for your responses, your candor, and your kindness;  I
> think
> dialogue will work, and I promise to keep the rhetoric to a bare minimum,
> if at all.    :)
>
> There really are only two questions I am going to try to answer here, and
> some of
> the answer goes back to Stefan's (and others) questions as well, so I hope
> its helpful.
>
>
>
>> So, by context you really seem to be referring to some specific state of
>> the program. Perhaps you are even talking about extending the existing
>> notion of numeric context used by Python's Decimal type. But it's not very
>> clear because "you change the context" is also a common term for changing
>> the topic of a discussion.
>>
>
>        This is what I mean by "context," for this entire discussion,
> mostly having to do with
> Decimal and the "context manager" and these two lines:
>
>        getcontext()
>
>        with localcontext(ctx=None) as context_manager
>
>        Allow me to back up a bit...  the pdeclib module was not difficult
> for me because of the
> mathematics (no brag) I can code transcendental functions in my sleep. The
> hard part of
> that project last week was coming to grips with the context manger, and
> the parameterization
> of context attributes in the Decimal class. Back in the day when I did
> this work for Rexx at IBM
> I used NUMERIC DIGITS and NUMERIC FUZZ  to emulate (in a crude way) what
> Decimal is
> doing correctly with its context, with the context manager. I credit Oscar
> Benjamin for helping
> me get up to speed with this concept (and I am so glad he did too, because
> its key for this
> entire discussion.
>
>        Before we go on, allow me to explain my italics of *Number  *and
> *PythonNumber.*  These are
> each an abstract base class.  They are a class that is never instantiated,
> but from which all
> other "numbers" are derived as objects.   (more below)
>
>
>> I'm sorry, but I am *still* unsure about what you mean by "context".
>> Python does not need a context object to switch between complex and real
>> number processing -- it's all done through operator overloading.
>>
>
>        (more on this below, but I am thinking beyond overloading/
>  actually, virtual functions and templates)
>
>
>> Actually, modern Python is considered object-oriented.
>>
>
>        Thank you.  This has everything to do with this discussion, but
> allow me to take a humorous
> break and relate an anecdote... I have had numerous discussions with T.R.
> and C.A and S.D. and
> others where in the end python was object based.  Ha!   Nope, you have
> seen it right here, the
> BDfL says its "object oriented," and that's the end of the argument!
> (ok, tiny rhetoric)
>
>>
>> Unifying the
>>> number system on a computer does not have to be grounded in paradigms
>>> that serviced the
>>> industry (and academy) for the past 40 years;
>>>
>>       {snip}
>
>>
>> Now you've got a specific proposal and we can discuss pros and cons. This
>> is a topic that comes up occasionally and it is indeed a pretty interesting
>> trade-off. I suspect the large (and fast-growing) SciPy community would
>> prefer to keep binary floating point, because that's what their libraries
>> written in Fortran or C++ want, and extra binary/decimal conversions at the
>> boundaries would just slow things down. But I'm really speculating here --
>> maybe they don't need high-performance conversion between binary and
>> decimal, since (perhaps) they may do their bulk I/O in C++ anyway. Or maybe
>> it varies per application.
>>
>
>        Here is the main response for this discussion, and I will endeavor
> to keep the
> rhetoric down, I promise.
>        This may even be easier to accomplish in 3.x without breaking
> anyone, or any third party software either; depends
>
>        In my view numbers are objects (like circles, squares and
> triangles; in polymorphism discussions).
> Numbers are nothing more than objects which have "contexts" just like
> circles and squares and triangles
> are nothing more than objects that have "contexts". In the following
> discussion think in terms of object
> oriented (as in Grady Booch) rather than any specific language--- and
> certainly not python syntax.  um,
> think C++ for now, if you must think of any.  A  *Number  *is an abstract
> base class with "context" attributes
> and pure virtual functions--- it will never be instantiated---and  *PythonNumber
>  *will derive from that; also
> an abstract base class.   Here is the Class hierarchy I am proposing:
>
> *Number*
>
>        *PythonNumber*
>
>               Decimal
>
>                      Real         <======= this is the  default
>
>               BinaryIEEE85
>
>                      Real_b
>
>                &c (...)   omitted for clarity
>
>                Complex
>
>                        Quaternion
>
>                 Rational
>
>                         Fraction
>
>                 &c--------------------------------------------------
>
>        Well, there it is.   The idea is that any function or method that
> takes a  *Number* reference
> or a  *PythonNumber  *reference does not have to interrogate what type of
> *Number* it is... it just
> works (why?) glad you asked, because of polymorphism and a three pointer
> hop down a virtual
> function table!
>        If a function or method gets a *Number *parm in as in
>  method(num)    then to get the pretty
> print representation of the number  is simply    num.pretty_print(),   or
> to get an evaluation
> of the number is   num.eval(), or to get the string rep of the number is
>  num.str()...  and on and on.
> The point is that other parts of the system no longer need to know what
> "type" of number object
> it is,  the right code gets called because of virtual functions, operator
> overloading, and the beautiful
> virtual function table (all under the covers, not MAGIC, but polymorphism).
>        Python at present is disjointed when it comes to number as a
> concept. In my view numbers
> need to be objects, and the Class hierarchy (see my simplified version
> above) needs to unify numbers
> across the python boards (so to speak) so that "types" are only important
> to the implementors, and
> so that adding new "types" is easy, concise, and coherent.
>
>        I realize that this suggestion is over the top in terms of size and
> weight (Stefan's concern above).
> But not really, when you think of conceptualizing the unification of
> numbers  under *Number  *and
> *PythonNumber *.  There may be other kinds of numbers too, besides
> these...  like maybe *GmpyNumber*
> of *BC_Number*, or others.
>
>        The bottom line is that we have an object oriented language in
> front of us that has the
> software engineering advantages which would allow this kind of hierarchy
> and conceptualization
> of a unified number system.  Let's leverage our technology for mutual
> advantage across python
> communities?
>
> Thanks for your consideration,
>
> Sincerely,
>
> Kind regards,
>
> marcus
>



-- 
--Guido van Rossum (python.org/~guido)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20140306/3be4381e/attachment-0001.html>


More information about the Python-ideas mailing list