PEP 674: Relationship with the HPy project (#2247)
This commit is contained in:
parent
4b595275e3
commit
6c4dd8ae81
62
pep-0674.rst
62
pep-0674.rst
|
@ -284,6 +284,68 @@ known way to emit a deprecation warning only when a macro is used as a
|
||||||
l-value, but not when it's used differently (ex: as a r-value).
|
l-value, but not when it's used differently (ex: as a r-value).
|
||||||
|
|
||||||
|
|
||||||
|
Relationship with the HPy project
|
||||||
|
=================================
|
||||||
|
|
||||||
|
The HPy project
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The hope with the HPy project is indeed to provide a C API that is close
|
||||||
|
to the original API to make porting easy and have it perform as close to
|
||||||
|
the existing API as possible. At the same time, HPy is sufficently
|
||||||
|
removed to be a good "C extension API" (as opposed to a stable subset of
|
||||||
|
the CPython implementation API) that does not leak implementation
|
||||||
|
details. To ensure this latter property is why the HPy project tries to
|
||||||
|
develop everything in parallel for CPython, PyPy, and GraalVM Python.
|
||||||
|
|
||||||
|
HPy is still evolving very fast. Issues are still being solved while
|
||||||
|
migrating NumPy, and work has begun on adding support for HPy to Cython. Work on
|
||||||
|
pybind11 is starting soon. Tim Felgentreff believes by the time HPy has
|
||||||
|
these users of the existing C API working, HPy should be in a state
|
||||||
|
where it is generally useful and can be deemed stable enough that
|
||||||
|
further development can follow a more stable process.
|
||||||
|
|
||||||
|
In the long run the HPy project would like to become a promoted API to
|
||||||
|
write Python C extensions.
|
||||||
|
|
||||||
|
The HPy project is a good solution for the long term. It has the
|
||||||
|
advantage of being developed outside Python and it doesn't require any C
|
||||||
|
API change.
|
||||||
|
|
||||||
|
The C API is here is stay for a few more years
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
The first concern about HPy is that right now, HPy is not mature nor
|
||||||
|
widely used, and CPython still has to continue supporting a large amount
|
||||||
|
of C extensions which are not likely to be ported to HPy soon.
|
||||||
|
|
||||||
|
The second concern is the inability to evolve CPython internals to
|
||||||
|
implement new optimizations, and the inefficient implementation of the
|
||||||
|
current C API in PyPy, GraalPython, etc. Sadly, HPy will only solve
|
||||||
|
these problems when most C extensions will be fully ported to HPy:
|
||||||
|
when it will become reasonable to consider dropping the "legacy" Python
|
||||||
|
C API.
|
||||||
|
|
||||||
|
While porting a C extension to HPy can be done incrementally on CPython,
|
||||||
|
it requires to modify a lot of code and takes time. Porting most C
|
||||||
|
extensions to HPy is expected to take a few years.
|
||||||
|
|
||||||
|
This PEP proposes to make the C API "less bad" by fixing one problem
|
||||||
|
which is clearily identified as causing practical issues: macros used as
|
||||||
|
l-values. This PEP only requires to update a minority of C extensions,
|
||||||
|
and usually only a few lines need to be changed in impacted extensions.
|
||||||
|
|
||||||
|
For example, numpy 1.22 is made of 307,300 lines of C code, and adapting
|
||||||
|
numpy to the this PEP only modified 11 lines (use Py_SET_TYPE and
|
||||||
|
Py_SET_SIZE) and adding 4 lines (to define Py_SET_TYPE and Py_SET_SIZE
|
||||||
|
for Python 3.8 and older). Porting numpy to HPy is expected to require
|
||||||
|
modifying more lines than that.
|
||||||
|
|
||||||
|
Right now, it's hard to bet which approach is the best: fixing the
|
||||||
|
current C API, or focusing on HPy. It would be risky to only focus on
|
||||||
|
HPy.
|
||||||
|
|
||||||
|
|
||||||
Rejected Idea: Leave the macros as they are
|
Rejected Idea: Leave the macros as they are
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue