Skip to content

Version 2.10.1

Compare
Choose a tag to compare
@henryiii henryiii released this 31 Oct 19:01
· 231 commits to master since this release
v2.10.1
80dc998

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 that PYTHONPATH 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 in test_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 various py::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 with finalize_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 checks modernize-use-equals-default in macros as well. #4017
  • Optimize iterator advancement in C++ bindings. #4237
  • Use the modern PyObject_GenericGetDict and PyObject_GenericSetDict for handling dynamic attribute dictionaries. #4106
  • Document that users should use PYBIND11_NAMESPACE instead of using pybind11 when opening namespaces. Using namespace declarations and namespace qualification remain the same as pybind11. 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 to DEBUG instead of Debug. #4078
  • Followup to #3948, fixing vcpkg again. #4123