Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[C API] Add explicit support for Cython to the C API #89410

Open
markshannon opened this issue Sep 20, 2021 · 8 comments
Open

[C API] Add explicit support for Cython to the C API #89410

markshannon opened this issue Sep 20, 2021 · 8 comments
Labels
topic-C-API type-feature A feature request or enhancement

Comments

@markshannon
Copy link
Member

BPO 45247
Nosy @scoder, @vstinner, @markshannon, @serhiy-storchaka

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 = None
closed_at = None
created_at = <Date 2021-09-20.10:59:47.125>
labels = ['expert-C-API', 'type-feature']
title = '[C API] Add explicit support for Cython to the C API'
updated_at = <Date 2022-02-23.15:21:36.827>
user = 'https://github.com/markshannon'

bugs.python.org fields:

activity = <Date 2022-02-23.15:21:36.827>
actor = 'vstinner'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['C API']
creation = <Date 2021-09-20.10:59:47.125>
creator = 'Mark.Shannon'
dependencies = []
files = []
hgrepos = []
issue_num = 45247
keywords = []
message_count = 7.0
messages = ['402224', '403812', '403819', '403821', '403823', '403894', '413804']
nosy_count = 4.0
nosy_names = ['scoder', 'vstinner', 'Mark.Shannon', 'serhiy.storchaka']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = 'enhancement'
url = 'https://bugs.python.org/issue45247'
versions = []

@markshannon
Copy link
Member Author

As the C API has evolved it has grown features in an ad-hoc way, driven by the needs to whoever has bothered to add the code.

Maybe we should be a bit more principled about this. Specifically we should make sure that there is a well defined interface between CPython and the other major components of the Python ecosystem.
The obvious places to start are with Cython and Numpy.

This issue deals specifically with Cython. I will leave it to someone who know more about Numpy to open an issue for Numpy.

Matching Cython issue: cython/cython#4382

This issue is an attempt to stop the annual occurrence of bugs like https://bugs.python.org/issue43760#msg393401

@markshannon markshannon added topic-C-API type-feature A feature request or enhancement labels Sep 20, 2021
@vstinner
Copy link
Member

We need to add C API to abstract access to structures used by Cython:

@vstinner vstinner changed the title Add explicit support for Cython to the C API. [C API] Add explicit support for Cython to the C API Oct 13, 2021
@markshannon
Copy link
Member Author

I disagree. All that is doing is locking in the current poor interface.

We do need to extend the C API for these uses, yes. But we need an API that addresses Cython's needs directly and at a higher level.

For example, Cython often wants to insert a frame into the call stack for debugging and introspection.

Rather than have Cython laboriously create a Python frame with fake code object, etc., it would make much more sense for us to offer an API to insert a "native" frame into the stack and update the line number.

E.g. something like:

int PushNativeFrame(const char *filename);
void PopNativeFrame(void);
int CurrentNativeFrame_SetLineNumber(int lineno);

We might even want to use such an API ourselves in some modules.

@vstinner
Copy link
Member

Rather than have Cython laboriously create a Python frame with fake code object, etc., it would make much more sense for us to offer an API to insert a "native" frame into the stack and update the line number.

I agree with that.

@serhiy-storchaka
Copy link
Member

I agree with Mark. Instead of exposing internal details in low-level API we should add more high-level API to satisfy concrete needs. It will give us more freedom of changing internals in future.

@vstinner
Copy link
Member

My first attempt: Add PyThreadState_EnterTracing() and PyThreadState_LeaveTracing()
#28542

It adds an abstraction on accesses to PyThreadState.tracing and PyThreadState.cframe.use_tracing members.

@vstinner
Copy link
Member

I created bpo-46836: "[C API] Move PyFrameObject to the internal C API".

@vstinner
Copy link
Member

I closed #107076 as a duplicate of this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic-C-API type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

3 participants