<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Mar 21, 2019, at 12:42, Ben Craig <<a href="mailto:ben.craig@ni.com" class="">ben.craig@ni.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">It may be more palatable to maintain multiple stable APIs if there is a good (automated) test plan that can ensure stability.  Does such a test plan exist?</div></div></div></blockquote><div><br class=""></div><div>We need to keep each ABI stable with respect to itself, which is what we're doing today with ABI v1. It just means that we need to run whatever ABI tests we're running for each ABI version. So, for example, this means making sure that programs built against an old libc++ using ABI v2 still run when linking against a newer version of libc++ on ABI v2. We already have tests to this effect for ABI v1, and I don't see any roadblock to doing that for ABI v2 too.</div><div><br class=""></div><div>Note that I'm not "happy" about having to maintain multiple ABI versions. What I'm saying is that if we limit ourselves to 3 concurrent ABI versions, we might just be limiting ourselves to 3 ABI versions forever (since some people might not be able to migrate off v1).</div><div><br class=""></div><div>Louis</div><br class=""><blockquote type="cite" class=""><div class=""><div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="border-style: none none none solid; border-left-width: 1.5pt; border-left-color: blue; padding: 0in 0in 0in 4pt;" class=""><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0in 0in;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b class="">From:</b><span class="Apple-converted-space"> </span>libcxx-dev <<a href="mailto:libcxx-dev-bounces@lists.llvm.org" class="">libcxx-dev-bounces@lists.llvm.org</a>><span class="Apple-converted-space"> </span><b class="">On Behalf Of<span class="Apple-converted-space"> </span></b>JF Bastien via libcxx-dev<br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Thursday, March 21, 2019 11:37 AM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>Louis Dionne <<a href="mailto:ldionne@apple.com" class="">ldionne@apple.com</a>><br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span>Libc++ Dev <<a href="mailto:libcxx-dev@lists.llvm.org" class="">libcxx-dev@lists.llvm.org</a>><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>[EXTERNAL] Re: [libcxx-dev] Stabilizing libc++'s ABI v2<o:p class=""></o:p></div></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class=""><br class=""><o:p class=""></o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Mar 21, 2019, at 8:07 AM, Louis Dionne via libcxx-dev <<a href="mailto:libcxx-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">libcxx-dev@lists.llvm.org</a>> wrote:<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class=""><br class=""><o:p class=""></o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Mar 21, 2019, at 05:54, Eric Fiselier <<a href="mailto:eric@efcs.ca" style="color: purple; text-decoration: underline;" class="">eric@efcs.ca</a>> wrote:<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">libc++ should support only three ABI versions at once: deprecated, stable, and unstable.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Making v2 stable means deprecating v1.  The time between deprecation and removal<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">limits how often we can cut a new ABI.<o:p class=""></o:p></div></div></div></div></div></blockquote><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">I'm not sure I agree with this. If the time required for people to move off v1 is too great (and I think it is quite long), I don't see harm in maintaining multiple stable ABI versions at a given time. Basically, each ABI version just opts-in to some new ABI break. Eventually, if a stable ABI version is not needed anymore, it can be removed.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Otherwise, stabilizing ABI v3 will be blocked on the slowest "customer" moving off ABI v1, but in some cases this may be an unbounded amount of time.<o:p class=""></o:p></div></div></div></div></div></blockquote><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">I agree with Louis.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Of course ABI versions with no users shouldn’t be supported, and ABI version users should help maintain these versions. We’d be signing up to help maintain v1 since we’ve shipped it and have developers who rely on it.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">At the same time, this shouldn’t block new ABI versions. We shouldn’t be creating a new ABI every week, but we should be able to create new ones when it makes sense to do so. We don’t really need a policy on “when do we create new stable ABIs”: a thread like this is good enough given the number of developers in libc++. The point of this thread is to figure out: what’s missing from v2’s stability, and what’s our timeline.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">I therefore disagree that libc++ should support only three ABI versions at once.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class=""><br class=""><o:p class=""></o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Louis<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class=""><br class=""><o:p class=""></o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">/Eric<o:p class=""></o:p></div></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Wed, Mar 20, 2019 at 3:47 PM Louis Dionne via libcxx-dev <<a href="mailto:libcxx-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">libcxx-dev@lists.llvm.org</a>> wrote:<o:p class=""></o:p></div></div><blockquote style="border-style: none none none solid; border-left-width: 1pt; border-left-color: rgb(204, 204, 204); padding: 0in 0in 0in 6pt; margin-left: 4.8pt; margin-right: 0in;" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class=""><br class=""><o:p class=""></o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Mar 20, 2019, at 14:02, Mikhail Maltsev <<a href="mailto:Mikhail.Maltsev@arm.com" target="_blank" style="color: purple; text-decoration: underline;" class="">Mikhail.Maltsev@arm.com</a>> wrote:<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On 3/20/19 5:24 PM, Marshall Clow via libcxx-dev wrote:<br class=""><br class=""><o:p class=""></o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class=""><br class="">On Tue, Mar 19, 2019 at 1:10 PM Louis Dionne via libcxx-dev<br class=""><<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">libcxx-dev@lists.llvm.org</a><span class="Apple-converted-space"> </span><<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">mailto:libcxx-dev@lists.llvm.org</a>>> wrote:<br class=""><br class="">   Hi,<br class=""><br class="">   I'd like to know whether folks currently have breaking changes planned for<br class="">   the version 2 ABI of libc++. Are we aware of improvements that would require<br class="">   breaking the ABI and that we have not implemented yet?<br class=""><br class=""><br class="">I have a note to fix XXX::set_value to use call_once when I can break ABI, so I<br class="">should do that first.<o:p class=""></o:p></div></blockquote><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class="">You also mentioned some <regex>-related changes:<br class=""><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__bugs.llvm.org_show-5Fbug.cgi-3Fid-3D35967-23c2&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=up857i138YetP_qkcBifs-IQZEoT9qDkocTAsi5L5c8&s=ZxUeQ0Z4a0cLZJBao6pkJHA_trYtRAHwwDmNrSvLcfI&e=" target="_blank" style="color: purple; text-decoration: underline;" class="">https://bugs.llvm.org/show_bug.cgi?id=35967#c2</a><o:p class=""></o:p></div></div></div></blockquote><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Right, those two items are exactly the kind of thing I was thinking about. Let's implement those and put them behind ABI macros just so we don't forget. When we are ready to stabilize the ABI we won't miss those changes.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Louis<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">_______________________________________________<br class="">libcxx-dev mailing list<br class=""><a href="mailto:libcxx-dev@lists.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">libcxx-dev@lists.llvm.org</a><br class=""><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_libcxx-2Ddev&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=up857i138YetP_qkcBifs-IQZEoT9qDkocTAsi5L5c8&s=9DGccSEFgmd8ZI7xS0qIZ27E72FNPwDQPCsFAGuRIDY&e=" target="_blank" style="color: purple; text-decoration: underline;" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-dev</a><o:p class=""></o:p></div></blockquote></div></div></div></blockquote></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">_______________________________________________<br class="">libcxx-dev mailing list<br class=""><a href="mailto:libcxx-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">libcxx-dev@lists.llvm.org</a><br class=""><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_libcxx-2Ddev&d=DwQFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=up857i138YetP_qkcBifs-IQZEoT9qDkocTAsi5L5c8&s=9DGccSEFgmd8ZI7xS0qIZ27E72FNPwDQPCsFAGuRIDY&e=" style="color: purple; text-decoration: underline;" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-dev</a></div></div></blockquote></div></div></div></div></blockquote></div><br class=""></body></html>