Skip to content

Version 2.10.0

Compare
Choose a tag to compare
@henryiii henryiii released this 16 Jul 02:33
· 391 commits to master since this release
v2.10.0
aa304c9

Removed support for Python 2.7, Python 3.5, and MSVC 2015. Support for MSVC 2017 is limited due to availability of CI runners; we highly recommend MSVC 2019 or 2022 be used. Initial support added for Python 3.11.

New features:

  • py::anyset & py::frozenset were added, with copying (cast) to std::set (similar to set). #3901
  • Support bytearray casting to string. #3707
  • type_caster<std::monostate> was added. std::monostate is a tag type that allows std::variant to act as an optional, or allows default construction of a std::variant holding a non-default constructible type. #3818
  • pybind11::capsule::set_name added to mutate the name of the capsule instance. #3866
  • NumPy: dtype constructor from type number added, accessors corresponding to Python API dtype.num, dtype.byteorder, dtype.flags and dtype.alignment added. #3868

Changes:

  • Python 3.6 is now the minimum supported version. #3688 #3719
  • The minimum version for MSVC is now 2017. #3722
  • Fix issues with CPython 3.11 betas and add to supported test matrix. #3923
  • error_already_set is now safer and more performant, especially for exceptions with long tracebacks, by delaying computation. #1895
  • Improve exception handling in python str bindings. #3826
  • The bindings for capsules now have more consistent exception handling. #3825
  • PYBIND11_OBJECT_CVT and PYBIND11_OBJECT_CVT_DEFAULT macro can now be used to define classes in namespaces other than pybind11. #3797
  • Error printing code now uses PYBIND11_DETAILED_ERROR_MESSAGES instead of requiring NDEBUG, allowing use with release builds if desired. #3913
  • Implicit conversion of the literal 0 to pybind11::handle is now disabled. #4008

Bug fixes:

  • Fix exception handling when pybind11::weakref() fails. #3739
  • module_::def_submodule was missing proper error handling. This is fixed now. #3973
  • The behavior or error_already_set was made safer and the highly opaque "Unknown internal error occurred" message was replaced with a more helpful message. #3982
  • error_already_set::what() now handles non-normalized exceptions correctly. #3971
  • Support older C++ compilers where filesystem is not yet part of the standard library and is instead included in std::experimental::filesystem. #3840
  • Fix -Wfree-nonheap-object warnings produced by GCC by avoiding returning pointers to static objects with return_value_policy::take_ownership. #3946
  • Fix cast from pytype rvalue to another pytype. #3949
  • Ensure proper behavior when garbage collecting classes with dynamic attributes in Python >=3.9. #4051
  • A couple long-standing PYBIND11_NAMESPACE __attribute__((visibility("hidden"))) inconsistencies are now fixed (affects only unusual environments). #4043
  • pybind11::detail::get_internals() is now resilient to in-flight Python exceptions. #3981
  • Arrays with a dimension of size 0 are now properly converted to dynamic Eigen matrices (more common in NumPy 1.23). #4038
  • Avoid catching unrelated errors when importing NumPy. #3974

Performance and style:

  • Added an accessor overload of (object &&key) to reference steal the object when using python types as keys. This prevents unnecessary reference count overhead for attr, dictionary, tuple, and sequence look ups. Added additional regression tests. Fixed a performance bug the caused accessor assignments to potentially perform unnecessary copies. #3970
  • Perfect forward all args of make_iterator. #3980
  • Avoid potential bug in pycapsule destructor by adding an error_guard to one of the dtors. #3958
  • Optimize dictionary access in strip_padding for numpy. #3994
  • stl_bind.h bindings now take slice args as a const-ref. #3852
  • Made slice constructor more consistent, and improve performance of some casters by allowing reference stealing. #3845
  • Change numpy dtype from_args method to use const ref. #3878
  • Follow rule of three to ensure PyErr_Restore is called only once. #3872
  • Added missing perfect forwarding for make_iterator functions. #3860
  • Optimize c++ to python function casting by using the rvalue caster. #3966
  • Optimize Eigen sparse matrix casting by removing unnecessary temporary. #4064
  • Avoid potential implicit copy/assignment constructors causing double free in strdup_gaurd. #3905
  • Enable clang-tidy checks misc-definitions-in-headers, modernize-loop-convert, and modernize-use-nullptr. #3881 #3988

Build system improvements:

  • CMake: Fix file extension on Windows with cp36 and cp37 using FindPython. #3919
  • CMake: Support multiple Python targets (such as on vcpkg). #3948
  • CMake: Fix issue with NVCC on Windows. #3947
  • CMake: Drop the bitness check on cross compiles (like targeting WebAssembly via Emscripten). #3959
  • Add MSVC builds in debug mode to CI. #3784
  • MSVC 2022 C++20 coverage was added to GitHub Actions, including Eigen. #3732, #3741

Backend and tidying up:

  • New theme for the documentation. #3109
  • Remove idioms in code comments. Use more inclusive language. #3809
  • #include <iostream> was removed from the pybind11/stl.h header. Your project may break if it has a transitive dependency on this include. The fix is to "Include What You Use". #3928
  • Avoid setup.py <command> usage in internal tests. #3734