From 127fc7930a7571694888f057ca6f17314b23d355 Mon Sep 17 00:00:00 2001 From: Mark de Wever Date: Tue, 16 Jan 2024 17:26:08 +0100 Subject: [PATCH] [libc++][doc] Removes LLVM-17 release notes. (#78062) The old notes are kept to make it easier to backport changes to the release branch. There are no LLVM-17 releases expected and this documentation should not be available in the LLVM-18 release. Note after branching LLVM-18 both LLVM-18 and LLVM-19 release notes should be available. --- libcxx/docs/ReleaseNotes/17.rst | 234 -------------------------------- libcxx/docs/index.rst | 1 - 2 files changed, 235 deletions(-) delete mode 100644 libcxx/docs/ReleaseNotes/17.rst diff --git a/libcxx/docs/ReleaseNotes/17.rst b/libcxx/docs/ReleaseNotes/17.rst deleted file mode 100644 index 763dc3494ebf..000000000000 --- a/libcxx/docs/ReleaseNotes/17.rst +++ /dev/null @@ -1,234 +0,0 @@ -============================ -Libc++ 17.0.0 Release Notes -============================ - -.. contents:: - :local: - :depth: 2 - -Written by the `Libc++ Team `_ - -Introduction -============ - -This document contains the release notes for the libc++ C++ Standard Library, -part of the LLVM Compiler Infrastructure, release 17.0.0. Here we describe the -status of libc++ in some detail, including major improvements from the previous -release and new feature work. For the general LLVM release notes, see `the LLVM -documentation `_. All LLVM releases may -be downloaded from the `LLVM releases web site `_. - -For more information about libc++, please see the `Libc++ Web Site -`_ or the `LLVM Web Site `_. - -Note that if you are reading this file from a Git checkout or the -main Libc++ web page, this document applies to the *next* release, not -the current one. To see the release notes for a specific release, please -see the `releases page `_. - -What's New in Libc++ 17.0.0? -============================ - -The main focus of the libc++ team has been to implement new C++20 and C++23 -features. Work on the next C++ version, C++26, has started. - -The C++20 ``format`` library is marked as stable. The library is not complete since -the C++20 ``chrono`` library lacks supports for time zones and some clocks. - -The C++20 spaceship operator is almost complete. It misses ``long double`` and -time zone support. - -There is an experimental implementation of the C++23 ``std`` module. See -:ref:`ModulesInLibcxx` for more information. - -An experimental implementation of the C++20 ``stop_token`` is available. - -Work has started on the C++17 Parallel STL. This feature is experimental, see -:ref:`pstl-status` for the current status. - - -Implemented Papers ------------------- -- P1206R7 - ``ranges::to``: A function to convert any range to a container -- P2520R0 - ``move_iterator`` should be a random access iterator -- P1328R1 - ``constexpr type_info::operator==()`` -- P2693R1 - Formatting ``thread::id`` (the ``stacktrace`` is not done yet) -- P2675R1 - ``format``'s width estimation is too approximate and not forward compatible -- P2505R5 - Monadic operations for ``std::expected`` -- P2711R1 - Making Multi-Param Constructors Of views explicit (``join_with_view`` is not done yet) -- P2572R1 - ``std::format`` fill character allowances -- P2510R3 - Formatting pointers -- P2136R3 - ``invoke_r`` -- P2494R2 - Relaxing range adaptors to allow for move only types -- P2585R0 - Improving default container formatting -- P0408R7 - Efficient Access to ``basic_stringbuf``'s Buffer -- P2474R2 - ``views::repeat`` -- P0009R18 - ``mdspan`` (``layout_stride`` is not done yet) -- P2093R14 - Formatted output (the ``ostream`` overload is not done yet) -- P2539R4 - Should the output of ``std::print`` to a terminal be synchronized - with the underlying stream? (the ``ostream`` overload is not done yet) - -With the ``format`` library being marked as stable, the -following papers are now available by default without using -``-fexperimental-library``: - -- P0645 - Text Formatting -- P1652 - Printf corner cases in std::format -- P1892 - Extended locale-specific presentation specifiers for std::format -- P1868 - width: clarifying units of width and precision in std::format -- P2216 - std::format improvements -- P2418 - Add support for std::generator-like types to std::format -- P2286R8 - Formatting Ranges -- P2508R1 - Exposing std::basic-format-string - -Improvements and New Features ------------------------------ -- ``std::equal``, ``std::ranges::equal``, ``std::find``, and - ``std::ranges::find`` are now forwarding to ``std::memcmp`` for trivially - equality comparable types, which can lead up to 40x performance improvements. - -- The performance of ``dynamic_cast`` on its hot paths is greatly improved and is as efficient as the - ``libsupc++`` implementation. Note that the performance improvements are shipped in ``libcxxabi``. - -- `D122780 `_ Improved the performance of ``std::sort`` and ``std::ranges::sort`` - by up to 50% for arithmetic types and by approximately 10% for other types. - -- The ```` header is no longer considered experimental. Some - ``std::formatter`` specializations are not yet available since the class used - in the specialization has not been implemented in libc++. This prevents the - feature-test macro to be set. - -- Platforms that don't have support for a filesystem can now still take advantage of some parts of ````. - Anything that does not rely on having an actual filesystem available will now work, such as ``std::filesystem::path``, - ``std::filesystem::perms`` and similar classes. - -- ASan container annotations have been extended to cover all allocators in ``std::vector``. - -- ASan annotations have been added to the ``std::deque`` container, to detect container overflows. - -- On Windows, ``std::wcout``, ``wcin``, and ``wcerr`` now work correctly when the underlying - stream has been configured in wide mode. - -Deprecations and Removals -------------------------- - -- The legacy debug mode has been removed in this release. The ``LIBCXX_ENABLE_DEBUG_MODE`` CMake variable has been - removed. For additional context, refer to the `Discourse post - `_. - -- The ```` header has been removed in this release. The ```` header - has been shipping since LLVM 14, so the Coroutines TS implementation is being removed per our policy - for removing TSes. - -- Several incidental transitive includes have been removed from libc++. Those - includes are removed based on the language version used. Incidental transitive - inclusions of the following headers have been removed: - - - C++23: ``atomic``, ``bit``, ``cstdint``, ``cstdlib``, ``cstring``, ``initializer_list``, ``limits``, ``new``, - ``stdexcept``, ``system_error``, ``type_traits``, ``typeinfo`` - - - ```` no longer includes ```` in any C++ version (it was previously included in C++17 and earlier). - - - ```` no longer includes ```` in any C++ version (it was previously included in C++20 and earlier). - - - ````, ````, and ```` no longer include ```` - in any C++ version (it was previously included in C++20 and earlier). - -- ````, ````, ````, ````, ```` and ```` no longer include ```` - (it was previously included in all Standard versions). - -- ````, ```` and ```` no longer transitively include ````. - -- The headers ```` and ```` have been removed, since all the contents - have been implemented in namespace ``std`` for at least two releases. - -- The ``std`` clang module has been broken up into separate top level modules per public header. - -- The formatter specialization ``template struct formatter`` - has been removed. Since libc++'s format library was marked experimental there - is no backwards compatibility option. This specialization has been removed - from the Standard since it was never used, the proper specialization to use - instead is ``template struct formatter``. - -- Libc++ used to provide some C++11 tag type global variables in C++03 as an extension, which are removed in - this release. Those variables were ``std::allocator_arg``, ``std::defer_lock``, ``std::try_to_lock``, - ``std::adopt_lock``, and ``std::piecewise_construct``. Note that the types associated to those variables are - still provided in C++03 as an extension (e.g. ``std::piecewise_construct_t``). Providing those variables in - C++03 mode made it impossible to define them properly -- C++11 mandated that they be ``constexpr`` variables, - which is impossible in C++03 mode. Furthermore, C++17 mandated that they be ``inline constexpr`` variables, - which led to ODR violations when mixed with the C++03 definition. Cleaning this up is required for libc++ to - make progress on support for C++20 modules. - -- The ``_LIBCPP_ABI_OLD_LOGNORMAL_DISTRIBUTION`` macro has been removed. - -- The classes ``strstreambuf`` , ``istrstream``, ``ostrstream``, and ``strstream`` have been deprecated. - They have been deprecated in the Standard since C++98, but were never marked as deprecated in libc++. - -- LWG3631 ``basic_format_arg(T&&) should use remove_cvref_t throughout`` removed - support for ``volatile`` qualified formatters. - -- The unmaintained Solaris support has been removed. - -Upcoming Deprecations and Removals ----------------------------------- - -LLVM 18 -~~~~~~~ - -- The base template for ``std::char_traits`` has been marked as deprecated and - will be removed in LLVM 18. If you are using ``std::char_traits`` with types - other than ``char``, ``wchar_t``, ``char8_t``, ``char16_t``, ``char32_t`` or - a custom character type for which you specialized ``std::char_traits``, your code - will stop working when we remove the base template. The Standard does not - mandate that a base template is provided, and such a base template is bound - to be incorrect for some types, which could currently cause unexpected - behavior while going undetected. - -- The ``_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED`` macro will not be honored anymore in LLVM 18. - Please see the updated documentation about the safe libc++ mode and in particular the ``_LIBCPP_VERBOSE_ABORT`` - macro for details. - -- The headers ````, ````, ````, - ````, ````, ````, ````, - ````, ````, ````, - and ```` will be removed in LLVM 18, as all their contents will have been implemented in - namespace ``std`` for at least two releases. - -API Changes ------------ -- Added ``__asan_annotate_container_with_allocator``, which is a - customization point to allow users to disable Address Sanitizer container annotations - for specific allocators. See :ref:`turning-off-asan` for more - information. - -ABI Affecting Changes ---------------------- - -- Symbols for ``std::allocator_arg``, ``std::defer_lock``, ``std::try_to_lock``, ``std::adopt_lock``, and - ``std::piecewise_construct`` have been removed from the built library. Under most circumstances, user code - should not have been relying on those symbols anyway since those are empty classes and the compiler does - not generate an undefined reference unless the address of the object is taken. However, this is an ABI break - if the address of one of these objects has been taken in code compiled as C++03, since in those cases the - objects were marked as defined in the shared library. In other Standard modes, this should never be a problem - since those objects were defined in the headers as ``constexpr``. - -Build System Changes --------------------- - -- Building libc++ and libc++abi for Apple platforms now requires targeting macOS 10.13 and later. - This is relevant for vendors building the libc++ shared library and for folks statically linking - libc++ into an application that has back-deployment requirements on Apple platforms. - -- ``LIBCXX_ENABLE_FILESYSTEM`` now represents whether a filesystem is supported on the platform instead - of representing merely whether ```` should be provided. This means that vendors building - with ``LIBCXX_ENABLE_FILESYSTEM=OFF`` will now also get ```` excluded from their configuration - of the library. - -- ``LIBCXX_ENABLE_FSTREAM`` is not supported anymore, please use ``LIBCXX_ENABLE_FILESYSTEM=OFF`` if your - platform does not have support for a filesystem. - -- The lit test parameter ``enable_modules`` changed from a Boolean to an enum. The changes are - - - ``False`` became ``none``. This option does not test with modules enabled. - - ``True`` became ``clang``. This option tests using Clang modules. - - ``std`` is a new optional and tests with the experimental C++23 ``std`` module. diff --git a/libcxx/docs/index.rst b/libcxx/docs/index.rst index 241eeba21bbe..066d8d87e552 100644 --- a/libcxx/docs/index.rst +++ b/libcxx/docs/index.rst @@ -34,7 +34,6 @@ Getting Started with libc++ .. toctree:: :maxdepth: 1 - ReleaseNotes/17 ReleaseNotes/18 UsingLibcxx BuildingLibcxx