Title: Helpers for getting references to singletons · Issue #91927 · python/cpython · GitHub
Open Graph Title: Helpers for getting references to singletons · Issue #91927 · python/cpython
X Title: Helpers for getting references to singletons · Issue #91927 · python/cpython
Description: Feature or enhancement There are lots of places where a new reference to a singleton is needed. This is done in a variety of ways: 1. obj = Py_NewRef(Py_None); 2. obj = Py_None; Py_INCREF(obj); 3. Py_INCREF(Py_None); obj = Py_None; 4. ob...
Open Graph Description: Feature or enhancement There are lots of places where a new reference to a singleton is needed. This is done in a variety of ways: 1. obj = Py_NewRef(Py_None); 2. obj = Py_None; Py_INCREF(obj); 3. ...
X Description: Feature or enhancement There are lots of places where a new reference to a singleton is needed. This is done in a variety of ways: 1. obj = Py_NewRef(Py_None); 2. obj = Py_None; Py_INCREF(obj); 3. ...
Opengraph URL: https://github.com/python/cpython/issues/91927
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Helpers for getting references to singletons","articleBody":"**Feature or enhancement**\r\n\r\nThere are lots of places where a new reference to a singleton is needed. This is done in a variety of ways:\r\n\r\n```\r\n1. obj = Py_NewRef(Py_None);\r\n\r\n2. obj = Py_None;\r\n Py_INCREF(obj);\r\n\r\n3. Py_INCREF(Py_None);\r\n obj = Py_None;\r\n\r\n4. obj = Py_None;\r\n Py_INCREF(Py_None);\r\n\r\n5. obj = (Py_INCREF(Py_None), Py_None);\r\n```\r\n\r\nThe proposal is to add another way that can hopefully become idiomatic:\r\n\r\n```\r\n6. obj = Py_RefNone();\r\n```\r\n\r\nThe following singletons are considered:\r\n- `None`\r\n- `NotImplemented`\r\n- `Ellipsis`\r\n- `False`\r\n- `True`\r\n\r\nIn the internal API, helpers for the following singletons can be added:\r\n- The strings returned by `_Py_ID` and `_Py_STR`\r\n- The integers 0 and 1\r\n\r\n**Pitch**\r\n\r\nOne advantage of using the new helpers is that it abstracts away the necessity to increment the reference count if [immortal instances](https://github.com/python/cpython/pull/19474) are implemented.\r\n\r\nAlternatively, if immortal instances aren't implemented and all singletons are made per-interpreter, it will slightly reduce the performance overhead by making sure that the singletons are only looked up once (compared to patterns 3, 4, and 5, where the singletons are obtained twice).\r\n\r\n**Previous discussion**\r\n\r\n\u003c!--\r\n New features to Python should first be discussed elsewhere before creating issues on GitHub,\r\n for example in the \"ideas\" category (https://discuss.python.org/c/ideas/6) of discuss.python.org,\r\n or the python-ideas mailing list (https://mail.python.org/mailman3/lists/python-ideas.python.org/).\r\n Use this space to post links to the places where you have already discussed this feature proposal:\r\n--\u003e\r\n\r\n\r\n\u003c!--\r\nYou can freely edit this text. Remove any lines you believe are unnecessary.\r\n--\u003e\r\n","author":{"url":"https://github.com/hvenev","@type":"Person","name":"hvenev"},"datePublished":"2022-04-25T19:42:05.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/91927/cpython/issues/91927"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:bad34f69-1205-2763-6eb6-2e2824402f3e |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AC30:323DD4:266D305:34352A7:696ADCBD |
| html-safe-nonce | 788e18c98f35ec50ba763324067d06e72975a700be1f9758924604fc74f62d61 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQzMwOjMyM0RENDoyNjZEMzA1OjM0MzUyQTc6Njk2QURDQkQiLCJ2aXNpdG9yX2lkIjoiNDEzODMzMDU4NzgwNzgwMDUwOSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | e8eca7d2fa3231396ff3c09a26844ff3349802a3a8058d96484353b067e11870 |
| hovercard-subject-tag | issue:1214962467 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/91927/issue_layout |
| twitter:image | https://opengraph.githubassets.com/47aafc2c1bcf36fb7616282cac7a28742c1627adaa777c58656e7af72982714a/python/cpython/issues/91927 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/47aafc2c1bcf36fb7616282cac7a28742c1627adaa777c58656e7af72982714a/python/cpython/issues/91927 |
| og:image:alt | Feature or enhancement There are lots of places where a new reference to a singleton is needed. This is done in a variety of ways: 1. obj = Py_NewRef(Py_None); 2. obj = Py_None; Py_INCREF(obj); 3. ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | hvenev |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5f99f7c1d70f01da5b93e5ca90303359738944d8ab470e396496262c66e60b8d |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 524a93f2c1f36522a3b4be4c110467ee4172245d |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width