Changelog¶
Starting with version 1.8, pybind11 releases use a [semantic versioning](http://semver.org) policy.
Breaking changes queued for v2.0.0 (Not yet released)¶
- Redesigned virtual call mechanism and user-facing syntax (see https://github.com/pybind/pybind11/commit/86d825f3302701d81414ddd3d38bcd09433076bc)
- Remove
handle.call()
method
1.8.1 (July 12, 2016)¶
- Fixed a rare but potentially very severe issue when the garbage collector ran during pybind11 type creation.
1.8.0 (June 14, 2016)¶
- Redesigned CMake build system which exports a convenient
pybind11_add_module
function to parent projects. std::vector<>
type bindings analogous to Boost.Python’sindexing_suite
- Transparent conversion of sparse and dense Eigen matrices and vectors (
eigen.h
) - Added an
ExtraFlags
template argument to the NumPyarray_t<>
wrapper to disable an enforced cast that may lose precision, e.g. to create overloads for different precisions and complex vs real-valued matrices. - Prevent implicit conversion of floating point values to integral types in function arguments
- Fixed incorrect default return value policy for functions returning a shared pointer
- Don’t allow registering a type via
class_
twice - Don’t allow casting a
None
value into a C++ lvalue reference - Fixed a crash in
enum_::operator==
that was triggered by thehelp()
command - Improved detection of whether or not custom C++ types can be copy/move-constructed
- Extended
str
type to also work withbytes
instances - Added a
"name"_a
user defined string literal that is equivalent topy::arg("name")
. - When specifying function arguments via
py::arg
, the test that verifies the number of arguments now runs at compile time. - Added
[[noreturn]]
attribute topybind11_fail()
to quench some compiler warnings - List function arguments in exception text when the dispatch code cannot find a matching overload
- Added
PYBIND11_OVERLOAD_NAME
andPYBIND11_OVERLOAD_PURE_NAME
macros which can be used to override virtual methods whose name differs in C++ and Python (e.g.__call__
andoperator()
) - Various minor
iterator
andmake_iterator()
improvements - Transparently support
__bool__
on Python 2.x and Python 3.x - Fixed issue with destructor of unpickled object not being called
- Minor CMake build system improvements on Windows
- New
pybind11::args
andpybind11::kwargs
types to create functions which take an arbitrary number of arguments and keyword arguments - New syntax to call a Python function from C++ using
*args
and*kwargs
- The functions
def_property_*
now correctly process docstring arguments (these formerly caused a segmentation fault) - Many
mkdoc.py
improvements (enumerations, template arguments,DOC()
macro accepts more arguments) - Cygwin support
- Documentation improvements (pickling support,
keep_alive
, macro usage)
1.7 (April 30, 2016)¶
- Added a new
move
return value policy that triggers C++11 move semantics. The automatic return value policy falls back to this case whenever a rvalue reference is encountered - Significantly more general GIL state routines that are used instead of
Python’s troublesome
PyGILState_Ensure
andPyGILState_Release
API - Redesign of opaque types that drastically simplifies their usage
- Extended ability to pass values of type
[const] void *
keep_alive
fix: don’t fail when there is no patientfunctional.h
: acquire the GIL before calling a Python function- Added Python RAII type wrappers
none
anditerable
- Added
*args
and*kwargs
pass-through parameters topybind11.get_include()
function - Iterator improvements and fixes
- Documentation on return value policies and opaque types improved
1.6 (April 30, 2016)¶
- Skipped due to upload to PyPI gone wrong and inability to recover (https://github.com/pypa/packaging-problems/issues/74)
1.5 (April 21, 2016)¶
- For polymorphic types, use RTTI to try to return the closest type registered with pybind11
- Pickling support for serializing and unserializing C++ instances to a byte stream in Python
- Added a convenience routine
make_iterator()
which turns a range indicated by a pair of C++ iterators into a iterable Python object - Added
len()
and a variadicmake_tuple()
function - Addressed a rare issue that could confuse the current virtual function dispatcher and another that could lead to crashes in multi-threaded applications
- Added a
get_include()
function to the Python module that returns the path of the directory containing the installed pybind11 header files - Documentation improvements: import issues, symbol visibility, pickling, limitations
- Added casting support for
std::reference_wrapper<>
1.4 (April 7, 2016)¶
- Transparent type conversion for
std::wstring
andwchar_t
- Allow passing
nullptr
-valued strings - Transparent passing of
void *
pointers using capsules - Transparent support for returning values wrapped in
std::unique_ptr<>
- Improved docstring generation for compatibility with Sphinx
- Nicer debug error message when default parameter construction fails
- Support for “opaque” types that bypass the transparent conversion layer for STL containers
- Redesigned type casting interface to avoid ambiguities that could occasionally cause compiler errors
- Redesigned property implementation; fixes crashes due to an unfortunate default return value policy
- Anaconda package generation support
1.3 (March 8, 2016)¶
- Added support for the Intel C++ compiler (v15+)
- Added support for the STL unordered set/map data structures
- Added support for the STL linked list data structure
- NumPy-style broadcasting support in
pybind11::vectorize
- pybind11 now displays more verbose error messages when
arg::operator=()
fails - pybind11 internal data structures now live in a version-dependent namespace to avoid ABI issues
- Many, many bugfixes involving corner cases and advanced usage
1.2 (February 7, 2016)¶
- Optional: efficient generation of function signatures at compile time using C++14
- Switched to a simpler and more general way of dealing with function default arguments. Unused keyword arguments in function calls are now detected and cause errors as expected
- New
keep_alive
call policy analogous to Boost.Python’swith_custodian_and_ward
- New
pybind11::base<>
attribute to indicate a subclass relationship - Improved interface for RAII type wrappers in
pytypes.h
- Use RAII type wrappers consistently within pybind11 itself. This fixes various potential refcount leaks when exceptions occur
- Added new
bytes
RAII type wrapper (maps tostring
in Python 2.7) - Made handle and related RAII classes const correct, using them more consistently everywhere now
- Got rid of the ugly
__pybind11__
attributes on the Python side—they are now stored in a C++ hash table that is not visible in Python - Fixed refcount leaks involving NumPy arrays and bound functions
- Vastly improved handling of shared/smart pointers
- Removed an unnecessary copy operation in
pybind11::vectorize
- Fixed naming clashes when both pybind11 and NumPy headers are included
- Added conversions for additional exception types
- Documentation improvements (using multiple extension modules, smart pointers, other minor clarifications)
- unified infrastructure for parsing variadic arguments in
class_
and cpp_function - Fixed license text (was: ZLIB, should have been: 3-clause BSD)
- Python 3.2 compatibility
- Fixed remaining issues when accessing types in another plugin module
- Added enum comparison and casting methods
- Improved SFINAE-based detection of whether types are copy-constructible
- Eliminated many warnings about unused variables and the use of
offsetof()
- Support for
std::array<>
conversions
1.1 (December 7, 2015)¶
- Documentation improvements (GIL, wrapping functions, casting, fixed many typos)
- Generalized conversion of integer types
- Improved support for casting function objects
- Improved support for
std::shared_ptr<>
conversions - Initial support for
std::set<>
conversions - Fixed type resolution issue for types defined in a separate plugin module
- Cmake build system improvements
- Factored out generic functionality to non-templated code (smaller code size)
- Added a code size / compile time benchmark vs Boost.Python
- Added an appveyor CI script
1.0 (October 15, 2015)¶
- Initial release