Version 2.10.1
This is the first version to fully support embedding the newly released Python 3.11.
Changes:
- Allow
pybind11::capsule
constructor to take null destructor pointers. #4221 embed.h
was changed so thatPYTHONPATH
is used also with Python 3.11 (established behavior). #4119- A
PYBIND11_SIMPLE_GIL_MANAGEMENT
option was added (cmake, C++ define), along with many additional tests intest_gil_scoped.py
. The option may be useful to try when debugging GIL-related issues, to determine if the more complex default implementation is or is not to blame. See #4216 for background. WARNING: Please be careful to not create ODR violations when using the option: everything that is linked together with mutual symbol visibility needs to be rebuilt. #4216 PYBIND11_EXPORT_EXCEPTION
was made non-empty only under macOS. This makes Linux builds safer, and enables the removal of warning suppression pragmas for Windows. #4298
Bug fixes:
- Fixed a bug where
UnicodeDecodeError
was not propagated from variouspy::str
ctors when decoding surrogate utf characters. #4294 - Revert perfect forwarding for
make_iterator
. This broke at least one valid use case. May revisit later. #4234 - Fix support for safe casts to
void*
(regression in 2.10.0). #4275 - Fix
char8_t
support (regression in 2.9). #4278 - Unicode surrogate character in Python exception message leads to process termination in
error_already_set::what()
. #4297 - Fix MSVC 2019 v.1924 & C++14 mode error for
overload_cast
. #4188 - Make augmented assignment operators non-const for the object-api. Behavior was previously broken for augmented assignment operators. #4065
- Add proper error checking to C++ bindings for Python list append and insert. #4208
- Work-around for Nvidia's CUDA nvcc compiler in versions 11.4.0 - 11.8.0. #4220
- A workaround for PyPy was added in the
py::error_already_set
implementation, related to PR #1895 released with v2.10.0. #4079 - Fixed compiler errors when C++23
std::forward_like
is available. #4136 - Properly raise exceptions in contains methods (like when an object in unhashable). #4209
- Further improve another error in exception handling. #4232
get_local_internals()
was made compatible withfinalize_interpreter()
, fixing potential freezes during interpreter finalization. #4192
Performance and style:
- Reserve space in set and STL map casters if possible. This will prevent unnecessary rehashing / resizing by knowing the number of keys ahead of time for Python to C++ casting. This improvement will greatly speed up the casting of large unordered maps and sets. #4194
- GIL RAII scopes are non-copyable to avoid potential bugs. #4183
- Explicitly default all relevant ctors for pytypes in the
PYBIND11_OBJECT
macros and enforce the clang-tidy checksmodernize-use-equals-default
in macros as well. #4017 - Optimize iterator advancement in C++ bindings. #4237
- Use the modern
PyObject_GenericGetDict
andPyObject_GenericSetDict
for handling dynamic attribute dictionaries. #4106 - Document that users should use
PYBIND11_NAMESPACE
instead of usingpybind11
when opening namespaces. Using namespace declarations and namespace qualification remain the same aspybind11
. This is done to ensure consistent symbol visibility. #4098 - Mark
detail::forward_like
as constexpr. #4147 - Optimize unpacking_collector when processing
arg_v
arguments. #4219 - Optimize casting C++ object to
None
. #4269
Build system improvements:
- CMake: revert overwrite behavior, now opt-in with
PYBIND11_PYTHONLIBS_OVERRWRITE OFF
. #4195 - Include a pkg-config file when installing pybind11, such as in the Python package. #4077
- Avoid stripping debug symbols when
CMAKE_BUILD_TYPE
is set toDEBUG
instead ofDebug
. #4078 - Followup to #3948, fixing vcpkg again. #4123