Comments (5)
from cpython.
Checked in verbatim.
from cpython.
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.
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.
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 inI'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)
- TSan: data race in pending calls HOT 6
- TSan: data race with PyTypeObject version tag HOT 2
- TSan: data race with _PyThreadState_Attach and _PyThreadState_Detach HOT 2
- TSan: data race accessing socket fd HOT 3
- ``test_capi`` leaks references HOT 4
- Why do we have two counters for function versions? HOT 1
- بيثو HOT 2
- 116 HOT 3
- tarfile.py: TarFile.addfile not adding all files HOT 3
- docs (easy): Add reference to the Python docs theme gh repo
- docs(easy): Document that heap types need to support garbage collection HOT 3
- C API: Add PyType_GetModuleByDef() to the limited C API version 3.13 HOT 6
- `dict` and `dict.update` treat the first argument as a mapping when it has attribute `keys` without attribute `__getitem__` HOT 7
- Rewrite binarysort() HOT 9
- `./Include/cpython/pyatomic_std.h` will not compile HOT 3
- `makesetup` to allow missing ending line break for `Setup` files
- Heap types implemented in C must have Py_TPFLAGS_HAVE_GC and implement tp_traverse HOT 2
- configparser.DuplicateOptionError leaves ConfigParser instance in bad state HOT 1
- json decode error in case of trailing comma is misleading HOT 2
- Error in Modules/zlibmodule.c when compling cpython from source code HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cpython.