Skip to content

Removing old buffer support #85275

Closed
Closed

Description

@methane
BPO 41103
Nosy @vstinner, @encukou, @methane, @ambv, @hroncok, @miss-islington
PRs
  • bpo-41103: Remove old buffer protocol support #21117
  • bpo-41103: Resurrect the old buffer protocol. #27437
  • [3.10] bpo-41103: Resurrect the old buffer protocol. (GH-27437) #27441
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = 'https://github.com/encukou'
    closed_at = None
    created_at = <Date 2020-06-24.13:43:42.640>
    labels = ['expert-C-API', '3.10', '3.11']
    title = 'Removing old buffer support'
    updated_at = <Date 2021-08-05.08:33:02.859>
    user = 'https://github.com/methane'

    bugs.python.org fields:

    activity = <Date 2021-08-05.08:33:02.859>
    actor = 'petr.viktorin'
    assignee = 'petr.viktorin'
    closed = False
    closed_date = None
    closer = None
    components = ['C API']
    creation = <Date 2020-06-24.13:43:42.640>
    creator = 'methane'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 41103
    keywords = ['patch']
    message_count = 12.0
    messages = ['372251', '372391', '381854', '381865', '381873', '398459', '398460', '398467', '398476', '398477', '398560', '398974']
    nosy_count = 7.0
    nosy_names = ['vstinner', 'petr.viktorin', 'methane', 'lukasz.langa', 'hroncok', 'miss-islington', 'tarun.johar']
    pr_nums = ['21117', '27437', '27441']
    priority = 'normal'
    resolution = 'wont fix'
    stage = 'resolved'
    status = 'open'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue41103'
    versions = ['Python 3.10', 'Python 3.11']

    Linked PRs

    Activity

    1. ambv commented on Jul 29, 2021

      @ambv
      Contributor

      New changeset ce5e1a6 by Inada Naoki in branch 'main':
      bpo-41103: Resurrect the old buffer protocol. (GH-27437)
      ce5e1a6

    2. ambv commented on Jul 29, 2021

      @ambv
      Contributor

      New changeset 6b922da by Miss Islington (bot) in branch '3.10':
      bpo-41103: Resurrect the old buffer protocol. (GH-27437) (GH-27441)
      6b922da

    3. ambv commented on Jul 30, 2021

      @ambv
      Contributor

      Resolved as "wontfix" due to presence in the stable ABI.

    4. encukou commented on Aug 5, 2021

      @encukou
      Member

      These should be removed from the *limited API*, but stay for the stable ABI.
      (PEP-652 mentions this can happen but doesn't give details, which will be a bit tricky. These are good candidates for figuring out the process.)

      I assigned this to myself; I'll try to get to it for 3.11.

      What is the benefit of removing this? Is copy pasting the compatibility layer to (possibly many) different projects worth the "cleanup"?

      Yes. PyObject_AsReadBuffer is dangerous *in general*, but in certain specific cases where you're relying on CPython implementations details it can work. For example, borrowing a buffer from a *string* or *array* will work on CPython, and I don't see that changing any time soon. So, using PyObject_AsReadBuffer is still tech debt, but for some projects that's OK.

      All this should be documented in the release notes, though, so the projects know what they're doing. (And the release notes should be written *with the change*, not later, so projects testing early can read them.)

    5. reopened this on Aug 5, 2021
    6. reopened this on Aug 5, 2021
    7. transferred this issue fromon Apr 10, 2022
    8. added
      3.12only security fixes
      interpreter-core(Objects, Python, Grammar, and Parser dirs)
      and removed
      3.11only security fixes
      on Jun 7, 2022
    9. added
      3.13only security fixes
      and removed
      3.12only security fixes
      on May 13, 2023
    10. vstinner commented on Jun 1, 2023

      @vstinner
      Member

      I closed my issue #105186 as a duplicate of this one. Copy of my message.


      Would it be ok to remove the legacy "buffer" API in Python 3.13, scheduled for October 2024? I'm talking about functions:

      • PyObject_AsCharBuffer()
      • PyObject_CheckReadBuffer()
      • PyObject_AsReadBuffer()
      • PyObject_AsWriteBuffer()

      This API is deprecated since Python 3.0 and is older than the new Py_buffer API. The Py_buffer API is safer: it has a PyBuffer_Release() method to notify when the consumer is done: the resource can be released. The Py_buffer API is now commonly used.

      In June 2020, there was a first attempt to remove these functions in issue #85275: commit 6f8a6ee. It caused too many troubles and had to be reverted the following year (commit ce5e1a6, July 2021). The removed functions were still used by at least 6 projects:

      The webassets project was also mentioned, but I'm not sure that its failure is related to these removal: see https://bugzilla.redhat.com/show_bug.cgi?id=1899555 I cannot find these functions in https://github.com/Kronuz/pyScss code right now.

      Sadly, the 4 functions are part of the stable ABI and have to be kept there. I'm only asking to remove them in the C API. The issue #88775 was complaining that the functions were removed wheareas they are part of the stable ABI.

    11. encukou commented on Jun 1, 2023

      @encukou
      Member

      Sorry I didn't get to this.
      Removing them from public API, including the limited API, is AFAIK fine. But

      Sadly, the 4 functions are part of the stable ABI and have to be kept there

      Please keep (or add) tests for them, so they don't regress.

    12. vstinner commented on Jun 1, 2023

      @vstinner
      Member

      I propose to only remove them in the C API, but still export them in the stable ABI. That's what @methane's PR #105137 does.

    13. added a commit that references this issue on Jun 2, 2023
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    Labels

    3.13only security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)topic-C-API

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions