What changed in eigen from 3 to 5

2 releases numbered after 3.4.1 up to and including 5.0.1, stable releases only. 3.4.1 and 5.0.1 are the newest stable releases of 3 and 5 we track; this page follows them as new ones ship.

17 changes across 2 releases

Changed 9

5.0.0

  • Eigen 5.X.X requires C++14; set -std=c++14 or later when building with GNU-compatible compilers
  • CMake build system has been modernized and older properties have been removed
  • Eigen::all and Eigen::last have been moved to Eigen::placeholders::all and Eigen::placeholders::last
  • Direct inclusion of internal headers under ../src/.. paths will result in a compilation error
  • Scalar non-vectorized comparisons now return masks with values of Scalar(1) rather than having all bits set
  • BLAS return types have been changed to void instead of int for compatibility with other BLAS implementations
  • Eigen::aligned_allocator no longer inherits from std::allocator due to changes in the standard and use of allocate_at_least
  • Euler angles are now returned in a more canonical form, potentially resulting in a change of behavior
  • Eigen's random number generation has changed, resulting in a change of behavior
Fixed 5

5.0.1

  • Dirty git state
  • Failing geo_homogeneous tests
  • Alignment issues
  • Missing C++20 <version> header
  • BLAS/LAPACK build on windows
Removed 2

5.0.0

  • Macros such as EIGEN_HAS_CXX11 have been removed
  • All LGPL-licensed code has been removed, including Constrained Conjugate Gradient
Deprecated 1

5.0.0

  • Runtime SVD options for computing thin/full U/V have been deprecated in favor of compile-time options

Original release notes, newest first

The list above is our reading of these notes; the originals from libeigen are here, one fold per release.

5.0.1

A few bug-fixes from the master branch, including

  • Dirty git state [#2995]
  • Failing geo_homogeneous tests [#2977]
  • Alignment issues [#2982, #2984]
  • Missing C++20 <version> header [#2986]
  • BLAS/LAPACK build on windows [#2980]

See the full lists of addressed bugs and merge requests for more details.

View originalPermalink

5.0.0
Summary

Eigen 5.0 provides many new features, performance enhancements, and bugfixes throughout Eigen’s core template expression infrastructure and linear algebra facilities. The full set of changes and related issues are too large to list here, but can be accessed via the release milestone %"5.0".

This is the last major release to support the C++14 language standard. The master branch and subsequent releases will require support for C++17.

Versioning

This release marks a transition to Semantic Versioning. Previously, Eigen used a WORLD.MAJOR.MINOR scheme. From now on, version numbers will follow the MAJOR.MINOR.PATCH format, indicating breaking changes, new features, and bug fixes, respectively. The WORLD version will remain 3 for this and subsequent releases for posterity. See the table below:

╔═════════╦═════╦═════╗
║ Release ║ 3.4 ║ 5.0 ║
╠═════════╬═════╬═════╣
║ WORLD   ║  3  ║  3  ║
║ MAJOR   ║  4  ║  5  ║
║ MINOR   ║  0  ║  0  ║
║ PATCH   ║  -  ║  0  ║
╚═════════╩═════╩═════╝
Breaking changes
  • Eigen 5.X.X requires C++14. When building with GNU-compatible compilers, set -std=c++14 or later. As part of this change, some macros such as EIGEN_HAS_CXX11 have also been removed.
  • The CMake build system has been modernized and older properties have been removed - projects relying on CMake may need to update their configurations [!485].
  • All LGPL-licensed code has been removed (i.e. Constrained Conjugate Gradient) [!1197]. These were "unsupported" anyways, and weren't widely used.
  • Due to name conflicts with other projects, Eigen::all and Eigen::last have been moved to Eigen::placeholders::all and Eigen::placeholders::last [!649].
  • Any direct inclusion of an internal header (i.e. under a ../src/.. path) will result in a compilation error [!631].
  • Runtime SVD options for computing thin/full U/V have been deprecated: use compile-time options instead [!826].
  • Scalar (i.e. non-vectorized) comparisons now return masks with values of Scalar(1) rather than having all bits set to avoid undefined behavior [!1862].
  • BLAS return types have been changed for Eigen BLAS to void instead of int for compatibility with other BLAS implementations [!1497].
  • Eigen::aligned_allocator no longer inherits from std::allocator due to a change in the standard and the use of allocate_at_least [!1795].
  • Euler angles are now returned in a more canonical form, potentially resulting in a change of behavior [!1301, !1314].
  • Eigen's random number generation has changed, resulting in a change of behavior. Please do not rely on specific random numbers from Eigen - these were never guaranteed to be consistent across Eigen versions, nor are they generally consistent across platforms [!1437].

View originalPermalink