Git Product home page Git Product logo

Comments (5)

tmick avatar tmick commented on June 1, 2024

from cpython.

freddrake avatar freddrake commented on June 1, 2024

Checked in verbatim.

from cpython.

tim-one avatar tim-one commented on June 1, 2024

Accepted & passed back to Trent. We *have* to check this one in, so David Ascher can eliminate all the tedious semaphore debug code you so tediously repaired <wink>.

from cpython.

tmick avatar tmick commented on June 1, 2024

I confirm that, to the best of my knowledge and belief, this
contribution is free of any claims of third parties under
copyright, patent or other rights or interests ("claims"). To
the extent that I have any such claims, I hereby grant to CNRI a
nonexclusive, irrevocable, royalty-free, worldwide license to
reproduce, distribute, perform and/or display publicly, prepare
derivative versions, and otherwise use this contribution as part
of the Python software and its related documentation, or any
derivative versions thereof, at no cost to CNRI or its licensed
users, and to authorize others to do so.

I acknowledge that CNRI may, at its sole discretion, decide
whether or not to incorporate this contribution in the Python
software and its related documentation. I further grant CNRI
permission to use my name and other identifying information
provided to CNRI by me for use in connection with the Python
software and its related documentation.

from cpython.

tmick avatar tmick commented on June 1, 2024

This is a revival submission. This got discussed (at least by Tim and I) and
then it died.

Background:

The common technique for printing out a pointer has been to cast to a long
and use the "%lx" printf modifier. This is incorrect on Win64 where casting
to a long truncates the pointer. The "%p" formatter should be used instead.

before (with a debugging printf of my own):

>>> class spam: pass
...
>>> repr(spam)
real pointer value is 000003FFFFC58340   # my own printf in the class_repr fn
'<class __main__.spam at ffc58340>'
>>>

after:

>>> class spam: pass
...
>>> repr(spam)
'<class __main__.spam at 000003FFFFC58340>'
>>>

The problem as stated by Tim:

Unfortunately, the C committee refused to define what %p conversion "looks
like" -- they explicitly allowed it to be implementation-defined. Older
versions of Microsoft C even stuck a colon in the middle of the address (in
the days of segment+offset addressing)!

The result is that the hex value of a pointer will maybe/maybe not have a 0x
prepended to it.

[Tim answers some question of mine about this problem]

> I.e. does Python promise the repr output to look EXACTLY the way it does?

No.

> Will reasonable code out there break?

Probably, but not much. I'm sure much more code will break due to 1.6
dropping the trailing "L" on str(long), for example.

> ...
> Given that %p is "implementation defined" do you see this patch
> going in

I'd put it in, if I were Guido.

From here is Guido's call, I guess. So here is the patch (again).

Notes on the patch:

There are two main classes of changes:

  • in the various repr() functions that print out pointers
  • debugging printf's in the various thread_*.h files (these are why the
    patch is large)

from cpython.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.