Difference between revisions of "C++20"

From Inkscape Wiki
Jump to navigation Jump to search
(Mark coroutines as unsupported)
(Update to reflect latest CI changes, add new information)
Line 32: Line 32:
|}
|}


As of 6 September 2023, the CI runners for:
References:
 
* General: https://en.cppreference.com/w/Template:cpp/compiler_support/20
* Apple Clang: https://developer.apple.com/documentation/xcode-release-notes
 
As of 27 March 2024, the CI runners for the various supported platforms are
* Linux:
* Linux:
** appimage:linux GNU 10.5 (Building on "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version!) Note: Gtkmm4 is not available in Ubuntu 20.04 or 22.04!
** appimage:linux: GNU 13.2.0 (building on Ubuntu 23.10)
** inkscape:linux GNU 11.4.0
** inkscape:linux: Same as above
* Windows
* Windows
** inkscape:windows:build Gnu 13.1.0
** inkscape:windows:build: GNU 13.2.0 (temporarily disabled since GTK4 port)
** inkscape:windows:dist Same as above.
** inkscape:windows:dist: Same as above
* macOS:
* macOS:
** inkscape::macos:arm Apple Clang 13.1.6
** inkscape::macos:arm: Apple Clang 15.0.0
** inkscape:macos:x64: Apple Clang 14.0.0.
** inkscape:macos:x64: Apple Clang 13.0.0 (temporarily disabled since GTK4 port)


 
We strive to support latest Debian stable and latest Ubuntu LTS. However, we had to break that promise since the GTK4 port, which requires gtkmm4 >= 4.14:
We strive to support lastest Debian stable and latest Ubuntu LTS. But this may not be possible for a gtk4 based release. Ideally, we would target gtkmm4 4.10 as it has a critical scrolling bug fix.
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 56: Line 60:
|}
|}


Errors and Deprecated items that we use:
Ubuntu users therefore have the following options:
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous  (ui/knot/knot-holder-entity.cpp)
 
* Wait for Ubuntu 24.04, expected around 25 April 2024.
* Upgrade to Ubuntu 24.04 now.
* Upgrade to Ubuntu 23.10 and build gtkmm4 from source, as is currently done by CI.
* ???
 
Deprecated items that we still use:
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]

Revision as of 05:43, 27 March 2024

See also C++11, C++17.

Some things that will be interesting to use once C++20 is common:

Feature Since Can use? GCC Apple Clang Comment
std::span C++20 from 1.4 10 11.0.3 Handle buffers like standard library containers without risk of overflow.
std::format C++20 not yet 13 N/A Better and more efficient formatting of strings. Text Formatting
std::lerp C++20 from 1.4 9 11.0.3 Linear interpolation. (ui/tools/pencil-tool.cpp)
std::bit_floor C++20 from 1.4 9/10 11.0.3/13.0.0 Compute floor(log2(x)). (helper/mathfns.h)
Concepts C++20 from 1.4? 6/10 12.0.0 Partial Safer templating. (ui/controller.h)
Coroutines C++20 not yet 10 10.0.1 Partial Simpler asynchronous code. (trace/trace.cpp)
std::make_unique_for_overwrite C++20 not yet 11 N/A Don't zero arrays allocated using std::make_unique. (util/pool.cpp)
Ranges C++20 not yet ? for (init; decl : expr). (ui/dialog/swatches.cpp)
Structural templates C++20 from 1.4? Partial Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)
Mathematical Constants C++20 10 12.0.5 Constants like std::numbers::pi.

References:

As of 27 March 2024, the CI runners for the various supported platforms are

  • Linux:
    • appimage:linux: GNU 13.2.0 (building on Ubuntu 23.10)
    • inkscape:linux: Same as above
  • Windows
    • inkscape:windows:build: GNU 13.2.0 (temporarily disabled since GTK4 port)
    • inkscape:windows:dist: Same as above
  • macOS:
    • inkscape::macos:arm: Apple Clang 15.0.0
    • inkscape:macos:x64: Apple Clang 13.0.0 (temporarily disabled since GTK4 port)

We strive to support latest Debian stable and latest Ubuntu LTS. However, we had to break that promise since the GTK4 port, which requires gtkmm4 >= 4.14:

Distro gcc clang gtkmm4
Debian 12 (Bookworm, stable) 12.2.0 15.0.6 4.8.3
Ubuntu 22.04 (Jammy Jellyfish) 12.3.0 15.0.7 Not packaged!
Ubuntu 23.04 (Lunar) 13.1.0 16.0.0 4.10.1

Ubuntu users therefore have the following options:

  • Wait for Ubuntu 24.04, expected around 25 April 2024.
  • Upgrade to Ubuntu 24.04 now.
  • Upgrade to Ubuntu 23.10 and build gtkmm4 from source, as is currently done by CI.
  • ???

Deprecated items that we still use: