Skip to content

Version 2.8.0

Compare
Choose a tag to compare
@henryiii henryiii released this 04 Oct 21:18
· 554 commits to master since this release
97976c1

New features:

  • Added py::raise_from to enable chaining exceptions. #3215
  • Allow exception translators to be optionally registered local to a module instead of applying globally across all pybind11 modules. Use register_local_exception_translator(ExceptionTranslator&& translator) instead of register_exception_translator(ExceptionTranslator&& translator) to keep your exception remapping code local to the module. #2650
  • Add make_simple_namespace function for instantiating Python SimpleNamespace objects. #2840
  • pybind11::scoped_interpreter and initialize_interpreter have new arguments to allow sys.argv initialization. #2341
  • Allow Python builtins to be used as callbacks in CPython. #1413
  • Added view to view arrays with a different datatype. #987
  • Implemented reshape on arrays. #984
  • Enable defining custom __new__ methods on classes by fixing bug preventing overriding methods if they have non-pybind11 siblings. #3265
  • Add make_value_iterator(), and fix make_key_iterator() to return references instead of copies. #3293
  • Improve the classes generated by bind_map: #3310
    • Change .items from an iterator to a dictionary view.
    • Add .keys and .values (both dictionary views).
    • Allow __contains__ to take any object.
  • pybind11::custom_type_setup was added, for customizing the PyHeapTypeObject corresponding to a class, which may be useful for enabling garbage collection support, among other things. #3287

Changes:

  • Set __file__ constant when running eval_file in an embedded interpreter. #3233
  • Python objects and (C++17) std::optional now accepted in py::slice constructor. #1101
  • The pybind11 proxy types str, bytes, bytearray, tuple, list now consistently support passing ssize_t values for sizes and indexes. Previously, only size_t was accepted in several interfaces. #3219
  • Avoid evaluating PYBIND11_TLS_REPLACE_VALUE arguments more than once. #3290

Fixes:

  • Bug fix: enum value's __int__ returning non-int when underlying type is bool or of char type #1334
  • Fixes bug in setting error state in Capsule's pointer methods. #3261
  • A long-standing memory leak in py::cpp_function::initialize was fixed. #3229
  • Fixes thread safety for some pybind11::type_caster which require lifetime extension, such as for std::string_view. #3237
  • Restore compatibility with gcc 4.8.4 as distributed by ubuntu-trusty, linuxmint-17. #3270

Build system improvements:

  • Fix regression in CMake Python package config: improper use of absolute path. #3144
  • Cached Python version information could become stale when CMake was re-run with a different Python version. The build system now detects this and updates this information. #3299
  • Specified UTF8-encoding in setup.py calls of open(). #3137
  • Fix a harmless warning from CMake 3.21 with the classic Python discovery. #3220
  • Eigen repo and version can now be specified as cmake options. #3324

Backend and tidying up:

  • Reduced thread-local storage required for keeping alive temporary data for type conversion to one key per ABI version, rather than one key per extension module. This makes the total thread-local storage required by pybind11 2 keys per ABI version. #3275
  • Optimize NumPy array construction with additional moves. #3183
  • Conversion to std::string and std::string_view now avoids making an extra copy of the data on Python >= 3.3. #3257
  • Remove const modifier from certain C++ methods on Python collections (list, set, dict) such as (clear(), append(), insert(), etc...) and annotated them with py-non-const.
  • Enable readability clang-tidy-const-return and remove useless consts. #3254 #3194
  • The clang-tidy google-explicit-constructor option was enabled. #3250
  • Mark a pytype move constructor as noexcept (perf). #3236
  • Enable clang-tidy check to guard against inheritance slicing. #3210
  • Legacy warning suppression pragma were removed from eigen.h. On Unix platforms, please use -isystem for Eigen include directories, to suppress compiler warnings originating from Eigen headers. Note that CMake does this by default. No adjustments are needed for Windows. #3198
  • Format pybind11 with isort consistent ordering of imports #3195
  • The warnings-suppression "pragma clamp" at the top/bottom of pybind11 was removed, clearing the path to refactoring and IWYU cleanup. #3186
  • Enable most bugprone checks in clang-tidy and fix the found potential bugs and poor coding styles. #3166
  • Add clang-tidy-readability rules to make boolean casts explicit improving code readability. Also enabled other misc and readability clang-tidy checks. #3148
  • Move object in .pop() for list. #3116