Implement PEP 793 – PyModExport
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 36k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Feature or enhancement
Proposal:
See PEP 793. I'll copy the abstract for reference:
In this PEP, we propose a new entry point for C extension modules, by which one can define a module using an array of
PyModuleDef_Slotstructures without an enclosingPyModuleDefstructure. This allows extension authors to avoid using a statically allocatedPyObject, lifting the most common obstacle to making one compiled library file usable with both regular and free-threaded builds of CPython.To make this viable, we also specify new module slot types to replace
PyModuleDef’s fields, and to allow adding a token similar to thePy_tp_tokenused for type objects.We also add an API for defining modules from slots dynamically.
The existing API (
PyInit_*) is soft-deprecated. (That is: it will continue to work without warnings, and it’ll be fully documented and supported, but we plan to not add any new features to it.)
- Initial implementation (#140556)
- Docs:
- Reference docs (#141197)
- Soft-deprecate
PyInit_*(#141197) - Better explanation of module state (#141197)
- Give an example for tokens (#141197)
- Soft-deprecate
- What's New
-
a notice for(edit: This shouldn't have changed/broken more than usual.)DYNLOADFILEusers?
-
- Porting guide HOWTO
- Document that the export hook runs without GIL in FT builds (see
#141780) (#151661)
- Document that the export hook runs without GIL in FT builds (see
- Tutorial update (#142314)
- Mentions in
PyImport_AppendInittab& friends (#151661) - Make sure references to new API are linked:
-
PyMod_ExecinPyImport_CreateModuleFromInitfuncdocs is linked (#141197) -
PyMODEXPORT_FUNCin blurb for#141672 -
blurb for#141780
-
- Reference docs (#141197)
-
xxlimited.cupdate (#142827)- Remove/replace
_Py_OPAQUE_PYOBJECTinxxlimited.c(by 3.15.0 beta)
- Remove/replace
Optional stretch goals:
- Remove the
PyInitfunction fromLib/test/test_cext/extension.c(https://github.com/python/cpython/pull/141511) - Speed & size improvements
-
importdl: load the DLL once -
boolfor the GIL flag (#141519)
-
- No longer require
spec.nameinPyModule_FromSlotsAndSpec - No longer require static allocation for
Py_mod_methods - Add a
PyModule_GetStateWithToken()function
Has this already been discussed elsewhere?
No response given
Links to previous discussion of this feature:
No response
Linked PRs
- gh-140556
- gh-141056
- gh-141197
- gh-141511
- gh-141519
- gh-142583
- gh-142827
- gh-144340
- gh-149397
- gh-149785
- gh-151661
- gh-152064
- gh-157493
- gh-157494
- gh-157539
- gh-157560
See also:
- gh-141672
- gh-142314
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Xem xét đề xuất PEP 793 và các stretch goal còn chưa được đánh dấu, đặc biệt là Lib/test/test_cext/extension.c và mục importdl. Trước tiên, hãy kiểm tra phần triển khai và tài liệu được liên kết, sau đó xác định một mục tiêu cụ thể còn lại cùng các bài kiểm thử hoặc điểm vào hiện có của mục tiêu đó; được xem là hoàn thành khi mục tiêu đó đã được triển khai và được bao phủ bởi tài liệu hoặc các bài kiểm thử liên quan.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- c, python
- Lĩnh vực
- backend-api-design
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 20/100