Marshall Clow via llvm-dev
2017-Apr-10 20:22 UTC
[llvm-dev] RFC: Plan for removing components from namespace std::experimental
As part of the work on C++17, WG21 released a series of "Technical Specifications", (TS) which added proposed new features to the standard library. These were all defined in the namespace 'std::experimental' (and namespaces inside of that). Then, much of these features were merged into the main standard, and became part of namespace 'std'. Libc++ now has two implementations of several of these, and they are diverging (because changes were made to the ones in the main standard, but not to the ones in the TS. In the long run, I would like to remove the TS versions of these features from libc++ - since there are "better" versions in the main standard now. However, since people are using these, I don't think yanking them w/o warning is the right thing to do. So, I'm proposing a new policy, and a timetable: One year. One year after we ship a LLVM release that supports a new C++ standard, we will remove all the features that are in the 'experimental' namespace that are implemented in the new standard). Applying this policy to C++17, we get: LLVM 5.0 will support C++17. So, for LLVM 7.0, we will remove (at least) the following features from libc++ * std::experimental::filesystem * std::experimental::optional * std::experimental::any * std::experimental::string_view * the searchers (std::experimental::boyer_moore, etc) * std::experimental::random_shuffle and probably other things... Comments? -- Marshall -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170410/9f0ed5e5/attachment-0001.html>
Ben Craig via llvm-dev
2017-Apr-10 20:27 UTC
[llvm-dev] [cfe-dev] RFC: Plan for removing components from namespace std::experimental
Sounds reasonable to me. I believe expectations are set appropriately with the experimental namespace, and the extra, experimental library that needs to be linked in. From: cfe-dev [mailto:cfe-dev-bounces at lists.llvm.org] On Behalf Of Marshall Clow via cfe-dev Sent: Monday, April 10, 2017 3:23 PM To: cfe-dev at lists.llvm.org; llvm-dev at lists.llvm.org Subject: [cfe-dev] RFC: Plan for removing components from namespace std::experimental As part of the work on C++17, WG21 released a series of "Technical Specifications", (TS) which added proposed new features to the standard library. These were all defined in the namespace 'std::experimental' (and namespaces inside of that). Then, much of these features were merged into the main standard, and became part of namespace 'std'. Libc++ now has two implementations of several of these, and they are diverging (because changes were made to the ones in the main standard, but not to the ones in the TS. In the long run, I would like to remove the TS versions of these features from libc++ - since there are "better" versions in the main standard now. However, since people are using these, I don't think yanking them w/o warning is the right thing to do. So, I'm proposing a new policy, and a timetable: One year. One year after we ship a LLVM release that supports a new C++ standard, we will remove all the features that are in the 'experimental' namespace that are implemented in the new standard). Applying this policy to C++17, we get: LLVM 5.0 will support C++17. So, for LLVM 7.0, we will remove (at least) the following features from libc++ * std::experimental::filesystem * std::experimental::optional * std::experimental::any * std::experimental::string_view * the searchers (std::experimental::boyer_moore, etc) * std::experimental::random_shuffle and probably other things... Comments? -- Marshall -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170410/c15242f7/attachment.html>
C Bergström via llvm-dev
2017-Apr-10 20:29 UTC
[llvm-dev] [cfe-dev] RFC: Plan for removing components from namespace std::experimental
I think regardless of who may or may not be using *experimental* stuff there shouldn't be a level of guaranteed stability. As the name implies it's not stable. It's a vehicle for testing things and prototype implementations that can't make it into main. Show me another project where experimental == guaranteed stability On Tue, Apr 11, 2017 at 4:22 AM, Marshall Clow via cfe-dev <cfe-dev at lists.llvm.org> wrote:> As part of the work on C++17, WG21 released a series of "Technical > Specifications", (TS) which added proposed new features to the standard > library. These were all defined in the namespace 'std::experimental' (and > namespaces inside of that). > > Then, much of these features were merged into the main standard, and became > part of namespace 'std'. Libc++ now has two implementations of several of > these, and they are diverging (because changes were made to the ones in the > main standard, but not to the ones in the TS. > > In the long run, I would like to remove the TS versions of these features > from libc++ - since there are "better" versions in the main standard now. > However, since people are using these, I don't think yanking them w/o > warning is the right thing to do. > > So, I'm proposing a new policy, and a timetable: > > One year. > > One year after we ship a LLVM release that supports a new C++ standard, we > will remove all the features that are in the 'experimental' namespace that > are implemented in the new standard). > > Applying this policy to C++17, we get: > > LLVM 5.0 will support C++17. > > So, for LLVM 7.0, we will remove (at least) the following features from > libc++ > * std::experimental::filesystem > * std::experimental::optional > * std::experimental::any > * std::experimental::string_view > * the searchers (std::experimental::boyer_moore, etc) > * std::experimental::random_shuffle > > and probably other things... > > Comments? > > -- Marshall > > > _______________________________________________ > cfe-dev mailing list > cfe-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev >
Dimitry Andric via llvm-dev
2017-Apr-10 21:48 UTC
[llvm-dev] [cfe-dev] RFC: Plan for removing components from namespace std::experimental
Yes, this seems a good idea. I think it is already clear enough that the experimental headers can't be relied upon for any long term, so having a specific cutoff date in there is good. Maybe even mention it in the respective headers? That said, on FreeBSD I didn't get any requests for adding the libc++experimental dynamic library, so I have simply omitted it. Therefore, at least on FreeBSD there are no users of these features, so they won't be able to miss them either. :-) -Dimitry> On 10 Apr 2017, at 22:22, Marshall Clow via cfe-dev <cfe-dev at lists.llvm.org> wrote: > > As part of the work on C++17, WG21 released a series of "Technical Specifications", (TS) which added proposed new features to the standard library. These were all defined in the namespace 'std::experimental' (and namespaces inside of that). > > Then, much of these features were merged into the main standard, and became part of namespace 'std'. Libc++ now has two implementations of several of these, and they are diverging (because changes were made to the ones in the main standard, but not to the ones in the TS. > > In the long run, I would like to remove the TS versions of these features from libc++ - since there are "better" versions in the main standard now. However, since people are using these, I don't think yanking them w/o warning is the right thing to do. > > So, I'm proposing a new policy, and a timetable: > > One year. > > One year after we ship a LLVM release that supports a new C++ standard, we will remove all the features that are in the 'experimental' namespace that are implemented in the new standard). > > Applying this policy to C++17, we get: > > LLVM 5.0 will support C++17. > > So, for LLVM 7.0, we will remove (at least) the following features from libc++ > * std::experimental::filesystem > * std::experimental::optional > * std::experimental::any > * std::experimental::string_view > * the searchers (std::experimental::boyer_moore, etc) > * std::experimental::random_shuffle > > and probably other things... > > Comments? > > -- Marshall > > _______________________________________________ > cfe-dev mailing list > cfe-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev-------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 194 bytes Desc: Message signed with OpenPGP URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170410/eb7c6806/attachment.sig>
Justin Bogner via llvm-dev
2017-Apr-10 22:10 UTC
[llvm-dev] [cfe-dev] RFC: Plan for removing components from namespace std::experimental
Marshall Clow via cfe-dev <cfe-dev at lists.llvm.org> writes:> As part of the work on C++17, WG21 released a series of "Technical > Specifications", (TS) which added proposed new features to the standard > library. These were all defined in the namespace 'std::experimental' (and > namespaces inside of that). > > Then, much of these features were merged into the main standard, and became > part of namespace 'std'. Libc++ now has two implementations of several of > these, and they are diverging (because changes were made to the ones in the > main standard, but not to the ones in the TS. > > In the long run, I would like to remove the TS versions of these features > from libc++ - since there are "better" versions in the main standard now. > However, since people are using these, I don't think yanking them w/o > warning is the right thing to do. > > So, I'm proposing a new policy, and a timetable: > > One year. > > One year after we ship a LLVM release that supports a new C++ standard, we > will remove all the features that are in the 'experimental' namespace that > are implemented in the new standard). > > Applying this policy to C++17, we get: > > LLVM 5.0 will support C++17. > > So, for LLVM 7.0, we will remove (at least) the following features from > libc++ > * std::experimental::filesystem > * std::experimental::optional > * std::experimental::any > * std::experimental::string_view > * the searchers (std::experimental::boyer_moore, etc) > * std::experimental::random_shuffleShould we throw [[deprecated("use std::filesystem")]] and such on these things in the window between the non-experimental version being released and the experimental one being removed?> and probably other things... > > Comments? > > -- Marshall > _______________________________________________ > cfe-dev mailing list > cfe-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Christopher Di Bella via llvm-dev
2017-Apr-10 22:27 UTC
[llvm-dev] [cfe-dev] RFC: Plan for removing components from namespace std::experimental
I second Justin's suggestion, but would that happen in LLVM 5 or 6? Just as something to consider, it may also cause spurious errors for people who are relying on the at-version-stability of experimental libraries, causing them to turn off warnings for deprecated code. As C Bergstrom has said, users buy into experimental libraries with the knowledge that the interface or behaviour could change at a moment's notice, so it might not be an issue, but it is worth considering. On Tue., 11 Apr. 2017, 08:11 Justin Bogner via cfe-dev, < cfe-dev at lists.llvm.org> wrote:> Marshall Clow via cfe-dev <cfe-dev at lists.llvm.org> writes: > > As part of the work on C++17, WG21 released a series of "Technical > > Specifications", (TS) which added proposed new features to the standard > > library. These were all defined in the namespace 'std::experimental' (and > > namespaces inside of that). > > > > Then, much of these features were merged into the main standard, and > became > > part of namespace 'std'. Libc++ now has two implementations of several > of > > these, and they are diverging (because changes were made to the ones in > the > > main standard, but not to the ones in the TS. > > > > In the long run, I would like to remove the TS versions of these features > > from libc++ - since there are "better" versions in the main standard now. > > However, since people are using these, I don't think yanking them w/o > > warning is the right thing to do. > > > > So, I'm proposing a new policy, and a timetable: > > > > One year. > > > > One year after we ship a LLVM release that supports a new C++ standard, > we > > will remove all the features that are in the 'experimental' namespace > that > > are implemented in the new standard). > > > > Applying this policy to C++17, we get: > > > > LLVM 5.0 will support C++17. > > > > So, for LLVM 7.0, we will remove (at least) the following features from > > libc++ > > * std::experimental::filesystem > > * std::experimental::optional > > * std::experimental::any > > * std::experimental::string_view > > * the searchers (std::experimental::boyer_moore, etc) > > * std::experimental::random_shuffle > > Should we throw [[deprecated("use std::filesystem")]] and such on these > things in the window between the non-experimental version being released > and the experimental one being removed? > > > and probably other things... > > > > Comments? > > > > -- Marshall > > _______________________________________________ > > cfe-dev mailing list > > cfe-dev at lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev > _______________________________________________ > cfe-dev mailing list > cfe-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170410/831a08c1/attachment.html>
Marshall Clow via llvm-dev
2017-Apr-10 22:57 UTC
[llvm-dev] [cfe-dev] RFC: Plan for removing components from namespace std::experimental
On Mon, Apr 10, 2017 at 2:48 PM, Dimitry Andric <dimitry at andric.com> wrote:> Yes, this seems a good idea. I think it is already clear enough that the > experimental headers can't be relied upon for any long term, so having a > specific cutoff date in there is good. Maybe even mention it in the > respective headers? > > That said, on FreeBSD I didn't get any requests for adding the > libc++experimental dynamic library, so I have simply omitted it. > Therefore, at least on FreeBSD there are no users of these features, so > they won't be able to miss them either. :-) >Well, no. For example, std::experimental::string_view is header-only; there's no part of it that lives in the libc++experimental lib. It's not the only one. -- Marshall -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170410/4bfb0077/attachment.html>
陳韋任 via llvm-dev
2017-Apr-11 10:35 UTC
[llvm-dev] RFC: Plan for removing components from namespace std::experimental
Will clang give warning or hint so that users know what's going on and what they can do? Regards, chenwj 2017-04-11 4:22 GMT+08:00 Marshall Clow via llvm-dev < llvm-dev at lists.llvm.org>:> As part of the work on C++17, WG21 released a series of "Technical > Specifications", (TS) which added proposed new features to the standard > library. These were all defined in the namespace 'std::experimental' (and > namespaces inside of that). > > Then, much of these features were merged into the main standard, and > became part of namespace 'std'. Libc++ now has two implementations of > several of these, and they are diverging (because changes were made to the > ones in the main standard, but not to the ones in the TS. > > In the long run, I would like to remove the TS versions of these features > from libc++ - since there are "better" versions in the main standard now. > However, since people are using these, I don't think yanking them w/o > warning is the right thing to do. > > So, I'm proposing a new policy, and a timetable: > > One year. > > One year after we ship a LLVM release that supports a new C++ standard, we > will remove all the features that are in the 'experimental' namespace that > are implemented in the new standard). > > Applying this policy to C++17, we get: > > LLVM 5.0 will support C++17. > > So, for LLVM 7.0, we will remove (at least) the following features from > libc++ > * std::experimental::filesystem > * std::experimental::optional > * std::experimental::any > * std::experimental::string_view > * the searchers (std::experimental::boyer_moore, etc) > * std::experimental::random_shuffle > > and probably other things... > > Comments? > > -- Marshall > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >-- -- Wei-Ren Chen (陳韋任) Homepage: https://people.cs.nctu.edu.tw/~chenwj -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170411/11a36308/attachment.html>
Marshall Clow via llvm-dev
2018-Jan-04 00:43 UTC
[llvm-dev] RFC: Plan for removing components from namespace std::experimental
On Mon, Apr 10, 2017 at 1:22 PM, Marshall Clow <mclow.lists at gmail.com> wrote:> As part of the work on C++17, WG21 released a series of "Technical > Specifications", (TS) which added proposed new features to the standard > library. These were all defined in the namespace 'std::experimental' (and > namespaces inside of that). > > Then, much of these features were merged into the main standard, and > became part of namespace 'std'. Libc++ now has two implementations of > several of these, and they are diverging (because changes were made to the > ones in the main standard, but not to the ones in the TS. > > In the long run, I would like to remove the TS versions of these features > from libc++ - since there are "better" versions in the main standard now. > However, since people are using these, I don't think yanking them w/o > warning is the right thing to do. > > So, I'm proposing a new policy, and a timetable: > > One year. > > One year after we ship a LLVM release that supports a new C++ standard, we > will remove all the features that are in the 'experimental' namespace that > are implemented in the new standard). > > Applying this policy to C++17, we get: > > LLVM 5.0 will support C++17. > > So, for LLVM 7.0, we will remove (at least) the following features from > libc++ > * std::experimental::filesystem > * std::experimental::optional > * std::experimental::any > * std::experimental::string_view > * the searchers (std::experimental::boyer_moore, etc) > * std::experimental::random_shuffle > > and probably other things... > >Now that we have branched for 6.0, we can do this. ;-) I'll be rolling out details this week .... -- Marshall -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180103/8407794c/attachment-0001.html>
Eric Fiselier via llvm-dev
2018-Jan-05 18:15 UTC
[llvm-dev] [cfe-dev] RFC: Plan for removing components from namespace std::experimental
This plan SGTM. Thanks Marshall. /Eric On Wed, Jan 3, 2018 at 5:43 PM, Marshall Clow via cfe-dev < cfe-dev at lists.llvm.org> wrote:> On Mon, Apr 10, 2017 at 1:22 PM, Marshall Clow <mclow.lists at gmail.com> > wrote: > >> As part of the work on C++17, WG21 released a series of "Technical >> Specifications", (TS) which added proposed new features to the standard >> library. These were all defined in the namespace 'std::experimental' (and >> namespaces inside of that). >> >> Then, much of these features were merged into the main standard, and >> became part of namespace 'std'. Libc++ now has two implementations of >> several of these, and they are diverging (because changes were made to the >> ones in the main standard, but not to the ones in the TS. >> >> In the long run, I would like to remove the TS versions of these features >> from libc++ - since there are "better" versions in the main standard now. >> However, since people are using these, I don't think yanking them w/o >> warning is the right thing to do. >> >> So, I'm proposing a new policy, and a timetable: >> >> One year. >> >> One year after we ship a LLVM release that supports a new C++ standard, >> we will remove all the features that are in the 'experimental' namespace >> that are implemented in the new standard). >> >> Applying this policy to C++17, we get: >> >> LLVM 5.0 will support C++17. >> >> So, for LLVM 7.0, we will remove (at least) the following features from >> libc++ >> * std::experimental::filesystem >> * std::experimental::optional >> * std::experimental::any >> * std::experimental::string_view >> * the searchers (std::experimental::boyer_moore, etc) >> * std::experimental::random_shuffle >> >> and probably other things... >> >> > Now that we have branched for 6.0, we can do this. ;-) > I'll be rolling out details this week .... > > -- Marshall > > > > > _______________________________________________ > cfe-dev mailing list > cfe-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180105/0a985c6e/attachment.html>
Marshall Clow via llvm-dev
2018-Jan-08 19:52 UTC
[llvm-dev] RFC: Plan for removing components from namespace std::experimental
On Wed, Jan 3, 2018 at 4:43 PM, Marshall Clow <mclow.lists at gmail.com> wrote:> Now that we have branched for 6.0, we can do this. ;-) > I'll be rolling out details this week .... > > See thread titled "HEADS UP: Dates for removing components from namespacestd::experimental”. TL;DR - they're all going away on 1-Feb. -- Marshall -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180108/f5656548/attachment.html>